diff --git a/.github/ISSUE_TEMPLATE/bug_report_form.yml b/.github/ISSUE_TEMPLATE/bug_report_form.yml new file mode 100644 index 000000000..7cbaddc49 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report_form.yml @@ -0,0 +1,65 @@ +name: Bug Report +description: File a bug report +body: + - type: markdown + attributes: + value: | + Before filing, please check if the issue already exists (either open or closed) by using the search bar on the issues page. If it does, comment there. Even if it's closed, we can reopen it based on your comment. + - type: textarea + id: what-happened + attributes: + label: Description of the bug + description: What happened? Please, enclose a screenshot whenever possible (even when you think the description is clear). What did you expect to happen? In case of 3D rendering issues, please attach the content of menu Help -> System Info dialog. + placeholder: | + What is the problem? + What did you expect? + You paste or drop screenshots here + validations: + required: true + - type: textarea + id: to_reproduce + attributes: + label: Project file & How to reproduce + description: "*Please* upload a ZIP archive containing the project file used when the problem arise. Please export it just before the problem occurs. Even if you did nothing and/or there is no object, export it! (it contains your current configuration)." + placeholder: | + `File`->`Export project as...` then zip it & drop it here + Also, if needed include the steps to reproduce the bug: + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: true + - type: checkboxes + attributes: + label: Checklist of files included above + options: + - label: Project file + - label: Screenshot + validations: + required: true + - type: input + id: version + attributes: + label: Version of PrusaSlicer + description: What version of PrusaSlicer are you running? You can see the full version in `Help` -> `About PrusaSlicer`. + placeholder: e.g. 2.4.1-alpha2-win64 / 2.3.3-linux / 2.4.1-alpha0+61-win64-gcd2459455 ... + validations: + required: true + - type: input + id: os + attributes: + label: Operating system + description: with the version if possible + placeholder: e.g. Windows 7/8/10/11 ... , Ubuntu 22.04/Debian ... , macOS 10.15/11.1 ... + validations: + required: true + - type: input + id: printer + attributes: + label: Printer model + description: Please, fill this in even when it seems irrelevant. + placeholder: voron 2.4 with afterburner + validations: + required: true + diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..d373b69ee --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,9 @@ +contact_links: + - name: PrusaSlicer Manual and Support + url: https://help.prusa3d.com/en/article/customer-support_2287/ + about: If you are not sure that what you are reporting is really a bug, please, consult the manual first. + - name: PrusaPrinters Forum + url: https://forum.prusaprinters.org/forum/prusaslicer/ + about: Please get in touch on our PrusaPrinters Community Forum! (Not an official support channel.) + +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..aed184687 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe how it would work** +Be as descriptive as your skill level allows you. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or paint drawing about the feature request here. diff --git a/.gitignore b/.gitignore index e3a9db477..c4df3f3f8 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ local-lib build-linux/* deps/build-linux/* **/.DS_Store +/.idea/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 72fd87d22..679f2ef1a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -506,6 +506,12 @@ endif () # Find the Cereal serialization library find_package(cereal REQUIRED) +add_library(libcereal INTERFACE) +if (NOT TARGET cereal::cereal) + target_link_libraries(libcereal INTERFACE cereal) +else() + target_link_libraries(libcereal INTERFACE cereal::cereal) +endif() # l10n set(L10N_DIR "${SLIC3R_RESOURCES_DIR}/localization") @@ -517,21 +523,28 @@ add_custom_target(gettext_make_pot WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMENT "Generate pot file from strings in the source tree" ) -add_custom_target(gettext_merge_po_with_pot + +add_custom_target(gettext_merge_community_po_with_pot WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - COMMENT "Merge localization po with new generted pot file" + COMMENT "Merge community po with new generated pot file" ) file(GLOB L10N_PO_FILES "${L10N_DIR}/*/PrusaSlicer*.po") +# list of names of directories, which are licalized by PS internally +list(APPEND PS_L10N_DIRS "cs" "de" "es" "fr" "it" "ja" "pl") foreach(po_file ${L10N_PO_FILES}) - #GET_FILENAME_COMPONENT(po_dir "${po_file}" DIRECTORY) - #SET(po_new_file "${po_dir}/PrusaSlicer_.po") - add_custom_command( - TARGET gettext_merge_po_with_pot PRE_BUILD - COMMAND msgmerge -N -o ${po_file} ${po_file} "${L10N_DIR}/PrusaSlicer.pot" - # delete obsolete lines from resulting PO to avoid conflicts after a merging of it with wxWidgets.po - COMMAND msgattrib --no-obsolete -o ${po_file} ${po_file} - DEPENDS ${po_file} - ) + GET_FILENAME_COMPONENT(po_dir "${po_file}" DIRECTORY) + GET_FILENAME_COMPONENT(po_dir_name "${po_dir}" NAME) + list(FIND PS_L10N_DIRS ${po_dir_name} found_dir_id) + # found_dir_id==-1 means that po_dir_name wasn't found in PS_L10N_DIRS + if(found_dir_id LESS 0) + add_custom_command( + TARGET gettext_merge_community_po_with_pot PRE_BUILD + COMMAND msgmerge -N -o ${po_file} ${po_file} "${L10N_DIR}/PrusaSlicer.pot" + # delete obsolete lines from resulting PO to avoid conflicts after a merging of it with wxWidgets.po + COMMAND msgattrib --no-obsolete -o ${po_file} ${po_file} + DEPENDS ${po_file} + ) + endif() endforeach() add_custom_target(gettext_concat_wx_po_with_po @@ -539,7 +552,6 @@ add_custom_target(gettext_concat_wx_po_with_po COMMENT "Concatenate and merge wxWidgets localization po with PrusaSlicer po file" ) file(GLOB L10N_PO_FILES "${L10N_DIR}/*/PrusaSlicer*.po") -file(GLOB L10N_WX_PO_FILES "${L10N_DIR}/*/PrusaSlicer*.po") foreach(po_file ${L10N_PO_FILES}) GET_FILENAME_COMPONENT(po_dir "${po_file}" DIRECTORY) GET_FILENAME_COMPONENT(po_dir_name "${po_dir}" NAME) diff --git a/build_win.bat b/build_win.bat index de5030ee5..3dbdb0ad6 100644 --- a/build_win.bat +++ b/build_win.bat @@ -164,6 +164,9 @@ IF NOT EXIST "%MSVC_DIR%" ( @ECHO ERROR: Compatible Visual Studio installation not found. 1>&2 GOTO :HELP ) +REM Cmake always defaults to latest supported MSVC generator. Let's make sure it uses what we select. +FOR /F "tokens=* USEBACKQ" %%I IN (`^""%VSWHERE%" %MSVC_FILTER% -nologo -property catalog_productLineVersion^"`) DO SET PS_PRODUCT_VERSION=%%I + REM Give the user a chance to cancel if we found something odd. IF "%PS_ASK_TO_CONTINUE%" EQU "" GOTO :BUILD_ENV @ECHO. @@ -183,6 +186,7 @@ SET PS_CURRENT_STEP=environment @ECHO ** Deps path: %PS_DESTDIR% @ECHO ** Using Microsoft Visual Studio installation found at: @ECHO ** %MSVC_DIR% +SET CMAKE_GENERATOR=Visual Studio %PS_VERSION% %PS_PRODUCT_VERSION% CALL "%MSVC_DIR%\Common7\Tools\vsdevcmd.bat" -arch=%PS_ARCH% -host_arch=%PS_ARCH_HOST% -app_platform=Desktop IF %ERRORLEVEL% NEQ 0 GOTO :END REM Need to reset the echo state after vsdevcmd.bat clobbers it. diff --git a/cmake/modules/FindTBB.cmake.in b/cmake/modules/FindTBB.cmake.in index a7eafa545..49e405c18 100644 --- a/cmake/modules/FindTBB.cmake.in +++ b/cmake/modules/FindTBB.cmake.in @@ -293,7 +293,7 @@ if(NOT TBB_FOUND) # Create targets ################################## - if(NOT CMAKE_VERSION VERSION_LESS 3.0 AND TBB_FOUND) + if(NOT CMAKE_VERSION VERSION_LESS 3.0 AND TBB_FOUND AND NOT TARGET TBB::tbb) add_library(TBB::tbb UNKNOWN IMPORTED) set_target_properties(TBB::tbb PROPERTIES INTERFACE_COMPILE_DEFINITIONS "${TBB_DEFINITIONS}" diff --git a/deps/Boost/Boost.cmake b/deps/Boost/Boost.cmake index 15792d5a7..d33e891f6 100644 --- a/deps/Boost/Boost.cmake +++ b/deps/Boost/Boost.cmake @@ -37,6 +37,8 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") if (WIN32) set(_boost_toolset "clang-win") + elseif (APPLE) + set(_boost_toolset "clang") else() set(_boost_toolset "clang") endif() @@ -103,11 +105,16 @@ if (NOT _boost_variants) set(_boost_variants release) endif() +set(_boost_layout system) +if (MSVC) + set(_boost_layout versioned) +endif () + set(_build_cmd ${_build_cmd} ${_boost_flags} -j${NPROC} ${_libs} - --layout=versioned + --layout=${_boost_layout} --debug-configuration toolset=${_boost_toolset} address-model=${_bits} diff --git a/resources/icons/legend_cog.svg b/resources/icons/legend_cog.svg new file mode 100644 index 000000000..9a55fb7f5 --- /dev/null +++ b/resources/icons/legend_cog.svg @@ -0,0 +1,50 @@ + + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon + + diff --git a/resources/icons/toolbar_arrow_2.svg b/resources/icons/toolbar_arrow_2.svg new file mode 100644 index 000000000..5ff1cfa2b --- /dev/null +++ b/resources/icons/toolbar_arrow_2.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/localization/PrusaSlicer.pot b/resources/localization/PrusaSlicer.pot index 3034b5aeb..ded7a9515 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: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -548,7 +548,7 @@ msgstr "" msgid "PrusaSlicer version" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "" @@ -556,17 +556,17 @@ msgstr "" msgid "filaments" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "" @@ -625,7 +625,7 @@ msgstr "" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "" @@ -710,7 +710,7 @@ msgstr "" msgid "All installed printers are compatible with the selected %1%." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "" @@ -789,7 +789,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "" @@ -1075,7 +1075,7 @@ msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "" @@ -1139,7 +1139,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "" @@ -1582,8 +1582,8 @@ msgid "parameter name" msgstr "" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "" @@ -1771,7 +1771,7 @@ msgstr "" msgid "Add selected shape(s) to the bed" msgstr "" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "" @@ -1973,7 +1973,7 @@ msgid "Wipe" msgstr "" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "" @@ -2242,7 +2242,7 @@ msgid "Add..." msgstr "" #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "" @@ -3118,25 +3118,25 @@ msgstr "" msgid "Internal error: %1%" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " "not be affected." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, possible-boost-format msgid "You are opening %1% version %2%." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, possible-boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3148,7 +3148,7 @@ msgid "" "configuration." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, possible-boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3157,19 +3157,19 @@ msgid "" "Shall this configuration be imported?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3179,53 +3179,53 @@ msgid "" "Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, possible-c-format, possible-boost-format msgid "" "%s\n" "Do you want to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, possible-boost-format msgid "New release version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, possible-boost-format msgid "New prerelease version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, possible-boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3238,291 +3238,291 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, possible-boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, possible-boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" "Settings will be available in physical printers settings." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" "Note: This name can be changed later from the physical printers settings" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, possible-c-format, possible-boost-format msgid "Run %s" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, possible-c-format, possible-boost-format msgid "%s View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, possible-boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, possible-boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to changes your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "" @@ -3628,7 +3628,7 @@ msgstr "" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3638,7 +3638,7 @@ msgid "Advanced" msgstr "" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3652,8 +3652,8 @@ msgid "Supports" msgstr "" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3663,8 +3663,8 @@ msgstr "" msgid "Pad" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -3767,7 +3767,7 @@ msgstr "" msgid "Reload the selected volumes from disk" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "" @@ -3793,19 +3793,19 @@ msgstr "" msgid "Scale the selected object to fit the print volume" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "" @@ -4066,7 +4066,7 @@ msgstr "" msgid "Loading" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "" @@ -4485,7 +4485,7 @@ msgstr "" msgid "Delete Option %s" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, possible-c-format, possible-boost-format msgid "Change Option %s" msgstr "" @@ -4604,18 +4604,18 @@ msgstr "" msgid "Legend/Estimated printing time" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "" @@ -4775,11 +4775,11 @@ msgid "" "presets were used as fallback." msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "" @@ -4820,11 +4820,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "" @@ -5205,7 +5205,7 @@ msgstr "" msgid "Show/Hide G-code window" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "" @@ -5317,29 +5317,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "" #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "" @@ -5849,7 +5849,7 @@ msgid "Open New Instance" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "" @@ -5958,9 +5958,9 @@ msgstr "" msgid "Save zip file as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "" @@ -6221,7 +6221,7 @@ msgstr "" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "" @@ -6247,8 +6247,8 @@ msgstr "" msgid "Instance %d" msgstr "" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "" @@ -6504,12 +6504,12 @@ msgstr "" msgid "Around object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "" @@ -6616,7 +6616,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "" @@ -6624,7 +6624,7 @@ msgstr "" msgid "Expand sidebar" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6634,12 +6634,12 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, possible-boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, possible-c-format, possible-boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -6650,11 +6650,11 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, possible-c-format, possible-boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -6667,15 +6667,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, possible-c-format, possible-boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -6688,180 +6688,180 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 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:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, possible-c-format, possible-boost-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:2648 +#: src/slic3r/GUI/Plater.cpp:2660 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:2767 +#: src/slic3r/GUI/Plater.cpp:2779 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:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, possible-boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -6869,171 +6869,171 @@ msgid "" "printer technology." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" "Note, if changes will be saved then new project wouldn't keep them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, possible-c-format, possible-boost-format msgid "%s - Drop project file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, possible-c-format, possible-boost-format msgid "Set numbers of copies to %d" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." msgstr "" -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "" @@ -7150,7 +7150,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7164,7 +7164,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7175,7 +7175,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -7678,11 +7678,11 @@ msgstr "" msgid "Upload to Printer Host with the following filename:" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "" @@ -7691,18 +7691,18 @@ msgstr "" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "" @@ -8138,7 +8138,7 @@ msgstr "" msgid "symbolic profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "" @@ -8222,11 +8222,11 @@ msgstr "" msgid "Flow" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "" @@ -8238,11 +8238,11 @@ msgstr "" msgid "Extruder clearance" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "" @@ -8250,19 +8250,20 @@ msgstr "" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "" @@ -8337,7 +8338,7 @@ msgid "Ramming settings" msgstr "" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "" @@ -8375,8 +8376,8 @@ msgstr "" msgid "Size and coordinates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "" @@ -8441,11 +8442,11 @@ msgstr "" msgid "Tilt time" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "" @@ -8600,69 +8601,73 @@ msgstr "" msgid "%1% Preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " "apply a different set of machine limits." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 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:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -8670,23 +8675,23 @@ msgid "" "to the system (or default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 msgid "" "for the left button: indicates a non-system (or non-default) preset,\n" "for the right button: indicates that the settings hasn't been modified." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -8694,13 +8699,13 @@ msgid "" "to the last saved preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 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:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -8708,17 +8713,17 @@ msgid "" "default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 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:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -8726,253 +8731,254 @@ msgid "" "preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 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:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 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 "" -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, possible-boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" "To enable \"%1%\", please switch off \"%2%\"" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 -msgid "" -"You will not be asked about the unsaved changes in presets the next time you " -"create new project" -msgstr "" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " -"switch a preset" +"create new project" msgstr "" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" +"You will not be asked about the unsaved changes in presets the next time you " +"switch a preset" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 +msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" "- Closing PrusaSlicer while some presets are modified,\n" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, possible-boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to be asked about unsaved changes again." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 -#, possible-boost-format -msgid "Save the selected options to preset \"%1%\"." -msgstr "" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, possible-boost-format +msgid "Save the selected options to preset \"%1%\"." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 +#, possible-boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, possible-boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, possible-boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, possible-boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "" @@ -9734,115 +9740,115 @@ msgstr "" msgid "write calledback failed" msgstr "" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "" -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "" -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "" -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "" -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " "\"complete_objects\"." msgstr "" -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." msgstr "" -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." msgstr "" -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." msgstr "" -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" msgstr "" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" msgstr "" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" msgstr "" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." msgstr "" -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" msgstr "" -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "" -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, possible-boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, possible-boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -9850,13 +9856,13 @@ msgid "" "same diameter." msgstr "" -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." msgstr "" -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -9864,27 +9870,46 @@ msgid "" "set to 0)." msgstr "" -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "" diff --git a/resources/localization/ca/PrusaSlicer.mo b/resources/localization/ca/PrusaSlicer.mo index 167cc324d..c5f940d31 100644 Binary files a/resources/localization/ca/PrusaSlicer.mo and b/resources/localization/ca/PrusaSlicer.mo differ diff --git a/resources/localization/ca/PrusaSlicer_ca.po b/resources/localization/ca/PrusaSlicer_ca.po index 5248ef55b..39fe9b44b 100644 --- a/resources/localization/ca/PrusaSlicer_ca.po +++ b/resources/localization/ca/PrusaSlicer_ca.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" -"PO-Revision-Date: 2021-12-16 18:50+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" +"PO-Revision-Date: 2022-03-04 17:01+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: ca\n" @@ -90,7 +90,7 @@ msgstr "" #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:84 #, boost-format msgid "PrusaSlicer has encountered a fatal error: \"%1%\"" -msgstr "" +msgstr "PrusaSlicer ha trobat un error crític: \"%1%\"" #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:85 msgid "" @@ -611,7 +611,7 @@ msgstr "Actiu" msgid "PrusaSlicer version" msgstr "Versió de PrusaSlicer" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "imprimir" @@ -619,17 +619,17 @@ msgstr "imprimir" msgid "filaments" msgstr "filaments" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "Impressió SLA" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "Material SLA" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "impressora" @@ -688,7 +688,7 @@ msgstr "Estàndard" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "Tots" @@ -780,7 +780,7 @@ msgid "All installed printers are compatible with the selected %1%." msgstr "" "Totes les impressores instal·lades són compatibles amb el %1% seleccionat." -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "filament" @@ -875,7 +875,7 @@ msgstr "" "actualització." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "Recarregar des del disc" @@ -1194,7 +1194,7 @@ msgstr "&Acabar" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "Cancel·lar" @@ -1265,7 +1265,7 @@ msgstr "" "d'escriptori de PrusaSlicer probablement s'ha pogut crear amb èxit." #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "Integració a l'escriptori" @@ -1754,8 +1754,8 @@ msgid "parameter name" msgstr "nom del paràmetre" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "N/A" @@ -1887,7 +1887,7 @@ msgstr "Imatge del firmware:" #: src/slic3r/GUI/FirmwareDialog.cpp:813 msgid "Select a file" -msgstr "" +msgstr "Seleccioneu un fitxer" #: src/slic3r/GUI/FirmwareDialog.cpp:815 #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:297 @@ -1963,7 +1963,7 @@ msgstr "Afegir a la base" msgid "Add selected shape(s) to the bed" msgstr "Afegir la(es) forma(es) seleccionada(es) a la base" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "Afegir" @@ -2169,7 +2169,7 @@ msgid "Wipe" msgstr "Netejar" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "Opcions" @@ -2438,7 +2438,7 @@ msgid "Add..." msgstr "Afegir..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "Eliminar tot" @@ -3369,7 +3369,7 @@ msgstr "Error crític" msgid "Internal error: %1%" msgstr "Error intern: %1%" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " @@ -3379,7 +3379,7 @@ msgstr "" "està danyat. Intenta eliminar manualment el fitxer per recuperar-se de " "l'error. Els vostres perfils d'usuari no es veuran afectats." -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." @@ -3388,12 +3388,12 @@ msgstr "" "probablement estigui danyat. Intenta eliminar manualment el fitxer per " "recuperar-se de l'error." -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "Estàs obrint %1% versió %2%." -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3412,7 +3412,7 @@ msgstr "" "Si és així, es farà una còpia de seguretat de la configuració activa abans " "d'importar la nova configuració." -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3425,19 +3425,19 @@ msgstr "" "\n" "S'ha d'importar aquesta configuració?" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "Importar" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "No importar" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "Voleu continuar i instal·lar les actualitzacions de configuració?" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3453,7 +3453,7 @@ msgstr "" "de https://www.prusa3d.cz/prusaslicer/.\n" "Voleu continuar?" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" @@ -3462,46 +3462,46 @@ msgstr "" "%s\n" "Voleu continuar?" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "Recorda la meva elecció" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "S'està carregant la configuració" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "Hi ha disponible una nova versió %1%." -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "Veure pàgina de Descàrregues." -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "La nova versió prellançament %1% està disponible." -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "Consulteu pàgina de llançaments." -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "Preparant pestanyes de configuració" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" -msgstr "" +msgstr "Restaura la posició de la finestra a l'inici" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" -msgstr "" +msgstr "PrusaSlicer s'ha reiniciat després d'una fallada" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3513,25 +3513,36 @@ msgid "" "To avoid this problem, consider disabling \"%4%\" in \"Preferences\". " "Otherwise, the application will most likely crash again next time." msgstr "" +"PrusaSlicer va crashejar la darrera vegada en intentar establir la posició " +"de la finestra.\n" +"Lamentem les molèsties, malauradament passa amb certes configuracions de " +"monitor múltiple.\n" +"El motiu més precís de l'accident: \"%1%\".\n" +"Per obtenir més informació, consulteu el nostre rastrejador d'incidències de " +"GitHub: \"%2%\" i \"%3%\"\n" +"\n" +"Per evitar aquest problema, considereu desactivar \"%4%\" a \"Preferències" +"\". En cas contrari, és probable que l'aplicació es torni a crashejar la " +"propera vegada." -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" -msgstr "" +msgstr "Deshabilitar \"%1%\"" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" -msgstr "" +msgstr "Deixa \"%1%\" habilitat" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" "Teniu els paràmetres preestablerts següents amb opcions desades per a " "\"Pujada del host d'impressió\"" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" @@ -3541,7 +3552,7 @@ msgstr "" "informació als paràmetres d'impressora.\n" "Els paràmetres es mostraran a la configuració d'impressora física." -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" @@ -3552,139 +3563,139 @@ msgstr "" "Nota: Aquest nom es pot canviar posteriorment als paràmetres d'impressora " "física" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "Informació" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "Recreant" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "Carregant els paràmetres actuals" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "S'està carregant mode visualització" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "Trieu un fitxer (3MF/AMF):" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Trieu un o més fitxers (STL / OBJ / AMF / 3MF / PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "Trieu un fitxer (GCODE/. GCO/. G/.ngc/NGC):" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "Canvi d'idioma d'una aplicació" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "Seleccioneu l'idioma" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "Idioma" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "modificat" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "Executar %s" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "Instantànies de &Configuració" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "Inspeccionar / activar instantànies de configuració" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "&Prendre una Instanània de Configuració" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "Captura una instantània de configuració" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "Comprova si hi ha actualitzacions de configuració" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "Comprova si hi ha actualitzacions de configuració" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "&Preferències" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "Preferències de l'aplicació" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "Simple" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "Mode de visualització simple" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "Mode Avançat" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "Mode de visualització avançada" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "Expert" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "Mode de visualització expert" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "Mode" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "%s Tipus de vista" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "&Idioma" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "Grava el &firmware a la impressora" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "" "Carregar una imatge de microprogramari a una impressora basada en Arduino" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "Prenent una instantània de la configuració" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." @@ -3692,32 +3703,32 @@ msgstr "" "Alguns paràmetres estan modificats i els canvis no desats no seran capturats " "per la instantània de configuració." -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "Nom de la instantània" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "S'està carregant una instantània de configuració" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "Continuar activant una instantània de configuració %1%?" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "No s'ha pogut activar la instantània de configuració." -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "Reiniciar l'aplicació" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "Selecció d'idiomes" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3725,88 +3736,89 @@ msgstr "" "Canviar l'idioma requereix reiniciar l'aplicació.\n" "Perdràs tot el contingut situat a la base." -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "Voleu continuar?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "&Configuració" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "Les modificacions del paràmetre s'han desat correctament" msgstr[1] "Les modificacions dels paràmetres s'han desat correctament" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "En cas d'un nou projecte, totes les modificacions es restabliran" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" "S'està carregant un projecte nou mentre es modifica el projecte actual." -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "El projecte s'està carregant" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "Obre un nou projecte mentre alguns paràmetres estan sense desar." -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "Les pujades encara estan en curs" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "Aturar-les i continuar igualment?" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "Càrregues en curs" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "És impossible imprimir objectes de diverses peces amb tecnologia SLA." -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "" "Comproveu la llista d'objectes abans de canviar els paràmetres inicials." -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "La configuració s'edita des de ConfigWizard" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "Seleccioneu un fitxer gcode:" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "Obrir l'hiperenllaç al navegador per defecte?" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "PrusaSlicer: Obrir hipervincle" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "Suprimir per obrir hiperenllaç al navegador" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "PrusaSlicer recordarà la vostra elecció." -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" +"No se us tornarà a preguntar al respecte quan passis per sobre de l'enllaç." -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -3815,8 +3827,8 @@ msgstr "" "Visiteu \"Preferències\" i comproveu \"%1%\"\n" "per canviar la teva elecció." -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "PrusaSlicer: No em tornis a preguntar" @@ -3922,7 +3934,7 @@ msgstr "Faldilla i bassa" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3932,7 +3944,7 @@ msgid "Advanced" msgstr "Avançat" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3946,8 +3958,8 @@ msgid "Supports" msgstr "Suports" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3957,8 +3969,8 @@ msgstr "Suports" msgid "Pad" msgstr "Pad" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -4061,7 +4073,7 @@ msgstr "Exporta com a STL" msgid "Reload the selected volumes from disk" msgstr "Torna a carregar els volums seleccionats des del disc" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "Substitueix per STL" @@ -4087,19 +4099,19 @@ msgstr "Escalar al volum d'impressió" msgid "Scale the selected object to fit the print volume" msgstr "Escala els objectes seleccionats per ajustar-se al volum d'impressió" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "Convertir des d'unitats imperials" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "Reverteix la conversió des de les unitats imperials" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "Converteix des de metres" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "Reverteix la conversió des de metres" @@ -4365,7 +4377,7 @@ msgstr "Carregar Modificador" msgid "Loading" msgstr "Carregant" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "S'està carregant el fitxer" @@ -4807,7 +4819,7 @@ msgstr "Suprimeix el paràmetre" msgid "Delete Option %s" msgstr "Suprimeix l'opció %s" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "Canvia l'opció %s" @@ -4926,18 +4938,18 @@ msgstr "Marcador d'eina" msgid "Legend/Estimated printing time" msgstr "Llegenda/Temps d'impressió estimat" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "Més" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "Obrir preferències." -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "Obre la Documentació al navegador web." @@ -5008,15 +5020,16 @@ msgstr "S'ha produït un error inesperat" #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:21 msgid "Best surface quality" -msgstr "" +msgstr "Màxima qualitat de superfície" #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:23 msgid "Optimize object rotation for best surface quality." msgstr "" +"Optimitzar la rotació de l'objecte per a la màxima qualitat de superfície." #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:24 msgid "Reduced overhang slopes" -msgstr "" +msgstr "Pendents de voladís reduïts" #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:26 msgid "" @@ -5025,14 +5038,20 @@ msgid "" "Note that this method will try to find the best surface of the object for " "touching the print bed if no elevation is set." msgstr "" +"Optimitza la rotació d'objectes per tenir una quantitat mínima de voladissos " +"que necessiten estructures de suport.\n" +"Tingueu en compte que aquest mètode intentarà trobar la millor superfície de " +"l'objecte per tocar el llit d'impressió si no s'estableix cap elevació." #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:30 msgid "Lowest Z height" -msgstr "" +msgstr "Mínima alçada Z" #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:32 msgid "Rotate the model to have the lowest z height for faster print time." msgstr "" +"Rota el model per tenir l'alçada z més baixa i un temps d'impressió més " +"ràpid." #: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:59 msgid "Searching for optimal orientation" @@ -5106,11 +5125,11 @@ msgstr "" "El fitxer SLA importat no contenia cap preajustament. Els preajustaments " "actuals de SLA s'han utilitzat com a reserva." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "No pots carregar un projecte SLA amb diverses peces a la base" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "Atenció!" @@ -5151,11 +5170,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "Carregar Configuració des de ini/amf/3mf/gcode i combina" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "Exportar el codi G" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "Envia el codi G" @@ -5548,7 +5567,7 @@ msgstr "Mostrar/Ocultar Llegenda i Temps d'impressió estimat" msgid "Show/Hide G-code window" msgstr "Mostrar/Ocultar finestra de codi G" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "Previsualització" @@ -5666,29 +5685,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "Tancant PrusaSlicer mentre es modifiquen alguns paràmetres." #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "Configuració d'Impressió" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "Configuració del Material" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "Configuració del Filament" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "Configuració de la Impressora" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "Sense títol" @@ -6205,7 +6224,7 @@ msgid "Open New Instance" msgstr "Obre una instància nova" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "Compara els predefinits" @@ -6314,9 +6333,9 @@ msgstr "Codi G" msgid "Save zip file as:" msgstr "Desa el fitxer zip com a:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "Laminant" @@ -6584,7 +6603,7 @@ msgstr "ERROR:" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "AVÍS:" @@ -6610,8 +6629,8 @@ msgstr "Instàncies" msgid "Instance %d" msgstr "Instància %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "Capes" @@ -6894,12 +6913,12 @@ msgstr "A sota de l'objecte" msgid "Around object" msgstr "Al voltant de l'objecte" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "Enviar a la impressora" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "Laminar ara" @@ -6985,7 +7004,7 @@ msgstr "Voleu desar els canvis a \"%1%\"?" #: src/slic3r/GUI/Plater.cpp:1732 src/slic3r/GUI/Preferences.cpp:222 msgid "Ask for unsaved changes in project" -msgstr "" +msgstr "Preguntar pels canvis no desats al projecte" #: src/slic3r/GUI/Plater.cpp:1735 msgid "" @@ -6993,6 +7012,9 @@ msgid "" "- Closing PrusaSlicer,\n" "- Loading or creating a new project" msgstr "" +"No et preguntarà pels canvis no guardats la propera vegada que: \n" +"- Tanquis PrusaSlicer,\n" +"- Carreguis o creis un nou projecte" #: src/slic3r/GUI/Plater.cpp:2197 #, c-format, boost-format @@ -7008,7 +7030,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "L'expulsió del dispositiu %s(%s) ha fallat." -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "Nou Projecte" @@ -7016,7 +7038,7 @@ msgstr "Nou Projecte" msgid "Expand sidebar" msgstr "Expandeix la barra lateral" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -7030,13 +7052,13 @@ msgstr[1] "" "Els paràmetres de sota han estat instal·lats temporalment a la instància " "activa de PrusaSlicer" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" "Error en carregar el fitxer \"%1%\" a causa d'una configuració no vàlida." -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -7051,11 +7073,11 @@ msgstr[1] "" "La mida dels objectes del fitxer %s sembla ser zero.\n" "Aquests objectes han estat eliminats del model" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "La mida de l'objecte és zero" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -7074,15 +7096,15 @@ msgstr[1] "" "La unitat interna de PrusaSlicer és el mil·límetre. Voleu recalcular les " "dimensions d'aquests objectes?" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "L'objecte és massa petit" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "Aplica-ho a tots els objectes petits restants que s'estan carregant." -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -7101,7 +7123,7 @@ msgstr[1] "" "polzades. La unitat interna de PrusaSlicer és el mil·límetre. Voleu " "recalcular les dimensions d'aquests objectes?" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" @@ -7111,22 +7133,22 @@ msgstr "" "En lloc de considerar-los com a objectes múltiples, s'hauria de carregar\n" "el fitxer com un sol objecte amb múltiples parts?" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "Objecte de peces múltiples detectat" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 msgid "" "This file cannot be loaded in a simple mode. Do you want to switch to an " "advanced mode?" msgstr "" "Aquest fitxer no es pot carregar en mode simple. Vols canviar al mode expert?" -#: src/slic3r/GUI/Plater.cpp:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "Dades avançades detectades" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " @@ -7135,7 +7157,7 @@ msgstr "" "No podeu afegir l'objecte(s) des de % s perquè un o alguns d'ells són de " "diverses peces" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" @@ -7146,7 +7168,7 @@ msgstr "" "En lloc de considerar-los com a objectes múltiples, hauria de considerar\n" "aquests fitxers per formar un sol objecte que té diverses parts?" -#: src/slic3r/GUI/Plater.cpp:2767 +#: src/slic3r/GUI/Plater.cpp:2779 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." @@ -7154,39 +7176,39 @@ msgstr "" "La teva peça sembla massa gran, així que s'ha escalat automàticament perquè " "pugui cabre a la base d'impressió." -#: src/slic3r/GUI/Plater.cpp:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "Objecte massa gran?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "Exporta el fitxer STL:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "Exporta el fitxer AMF:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "Desa el fitxer com a:" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "Exporta el fitxer OBJ:" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "Suprimeix l'objecte" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "Suprimeix tots els objectes" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "Reinicialitza el projecte" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." @@ -7194,15 +7216,15 @@ msgstr "" "L'objecte seleccionat no s'ha pogut dividir perquè només conté una part " "sòlida." -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "S'han eliminat totes les parts no sòlides (modificadors)" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "Partir en diverses peces" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." @@ -7210,87 +7232,87 @@ msgstr "" "Un objecte té reforçadors de suport personalitzats que no es faran servir " "perquè els suports estan desactivats." -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "Habilitar suports només per als reforçadors" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "Les dades no són vàlides" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "Actualment s'està executant una altra feina d'exportació." -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "Reemplaçar des de:" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "No es pot substituir per més d'un volum" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "S'ha produït un error durant la substitució" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "Seleccioneu el fitxer nou" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "No s'ha seleccionat el fitxer per a la substitució" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "Seleccioneu el fitxer que voleu tornar a carregar" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "El fitxer seleccionat" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "difereix del fitxer original" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "Voleu substituir-lo" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "Torna a carregar des de:" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "No es pot tornar a carregar:" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "S'ha produït un error durant la recàrrega" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "Torna a carregar-ho tot des del disc" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "Hi ha advertiments actius sobre els models laminats:" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "advertiments generats" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "Vista editor 3D" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "Desfer / Refer s'està processant" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -7301,21 +7323,21 @@ msgstr "" "S'han modificat alguns paràmetres de %1%, que es perdran després de canviar " "la tecnologia de la impressora." -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "Creant un projecte nou mentre es modifica el projecte actual." -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "Creant un nou projecte mentre es modifiquen alguns paràmetres." -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" "Pots mantenir les modificacions dels preajustaments al nou projecte o " "descartar-los" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" @@ -7326,125 +7348,125 @@ msgstr "" "Tingueu en compte que si es desen els canvis, el projecte nou no els " "conservarà" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "Creant un nou projecte" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "Carregar Projecte" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "Importar Objecte" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "Importar Objetes" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "no conté codi gcode vàlid." -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "S'ha produït un error en carregar el fitxer .gcode" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "%s - Deixar anar fitxer de projecte" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "Obre com a projecte" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "Importa només la geometria" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "Importa només la configuració" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "Seleccioneu una acció que s'aplicarà al fitxer" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "Acció" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "No tornis a mostrar" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "Només podeu obrir un fitxer .gcode alhora." -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "Arrossegar i deixar anar el fitxer de codi G" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "Carregar Arxiu" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "Carregar Arxius" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "Tots els objectes seran eliminats, vols continuar?" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "Suprimeix els objectes seleccionats" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "Augmenta les instàncies" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "Disminueix les instàncies" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "Introduïu el nombre de còpies:" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "Còpies de l'objecte seleccionat" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Estableix el nombre de còpies a %d" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "Tallar pel Plànol" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "Desa el fitxer de codi G com a:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "Desa el fitxer SL1 / SL1S com a:" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "El nom del fitxer proporcionat no és vàlid." -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "Un sistema de fitxers FAT no permet els caràcters següents:" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" @@ -7452,15 +7474,15 @@ msgstr "" "La plataforma és buida.\n" "Vols desar el projecte?" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "Desar projecte" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "Exportar" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." @@ -7468,14 +7490,14 @@ msgstr "" "Els suports personalitzats, les costures i la pintura multimaterial s'han " "retirat després de reparar la malla." -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "Enganxa des del porta-retalls" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "General" @@ -7622,13 +7644,18 @@ msgid "" "- Closing PrusaSlicer,\n" "- Loading or creating a new project" msgstr "" +"Sol·licita sempre canvis no desats en el projecte, quan: \n" +"- Tancament PrusaSlicer,\n" +"- Càrrega o creació d'un nou projecte" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" msgstr "" +"Demana desar els canvis no desats en els predefinits en tancar l'aplicació o " +"en carregar un projecte nou" #: src/slic3r/GUI/Preferences.cpp:235 msgid "" @@ -7636,9 +7663,12 @@ msgid "" "- Closing PrusaSlicer while some presets are modified,\n" "- Loading a new project while some presets are modified" msgstr "" +"Preguntar sempre pels canvis no guardats en els predefinits, quan:\n" +"- En tancar PrusaSlicer mentre es modifiquen alguns ajustaments,\n" +"- En carregar un nou projecte mentre es modifiquen alguns ajustaments" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7647,15 +7677,20 @@ msgid "" "Always ask for unsaved changes in presets when selecting new preset or " "resetting a preset" msgstr "" +"Preguntar sempre pels canvis no guardats en predefinits en seleccionar un " +"nou ajustament o en restablir un ajustament" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" +"Preguntar pels canvis no desats en predefinits en crear un nou projecte" #: src/slic3r/GUI/Preferences.cpp:251 msgid "Always ask for unsaved changes in presets when creating new project" msgstr "" +"Preguntar sempre pels canvis no guardats en predefinits en crear un nou " +"projecte" #: src/slic3r/GUI/Preferences.cpp:258 msgid "Associate .gcode files to PrusaSlicer G-code Viewer" @@ -7688,6 +7723,7 @@ msgstr "Mostra la pantalla de presentació" #: src/slic3r/GUI/Preferences.cpp:289 msgid "If enabled, PrusaSlicer will be open at the position it was closed" msgstr "" +"Si està habilitat, PrusaSlicer s'obrirà en la posició en què s'ha tancat" #: src/slic3r/GUI/Preferences.cpp:295 msgid "Clear Undo / Redo stack on new project" @@ -7779,7 +7815,7 @@ msgstr "" #: src/slic3r/GUI/Preferences.cpp:384 msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." -msgstr "" +msgstr "Si està habilitat, PrusaSlicer no obrirà hipervincles al navegador." #: src/slic3r/GUI/Preferences.cpp:391 msgid "Use colors for axes values in Manipulation panel" @@ -8216,13 +8252,13 @@ msgstr "Enviar el codi G al host d'impressió" msgid "Upload to Printer Host with the following filename:" msgstr "Carregar el host amb el següent nom de fitxer:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" "Use barras diagonales ( / ) como separadores de directorios si fuese " "necesario." -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "Agrupar" @@ -8231,18 +8267,18 @@ msgstr "Agrupar" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "El nom del fitxer enviat no s'acaba amb \"%s\". Voleu continuar?" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "Pujar" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "Enviar i imprimir" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "Enviar i simular" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "Pujar" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "ID" @@ -8709,7 +8745,7 @@ msgstr "nom complet del perfil" msgid "symbolic profile name" msgstr "nom simbòlic del perfil" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "Capes i Perímetres" @@ -8793,11 +8829,11 @@ msgstr "Superposició" msgid "Flow" msgstr "Fluxe" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "Altre" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "Opcions de sortida" @@ -8809,11 +8845,11 @@ msgstr "Impressió seqüencial" msgid "Extruder clearance" msgstr "Separació de l'extrusor" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "Fitxer de sortida" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "Scripts de postprocessament" @@ -8821,19 +8857,20 @@ msgstr "Scripts de postprocessament" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "Notes" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "Dependències" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "Dependències del perfil" @@ -8917,7 +8954,7 @@ msgid "Ramming settings" msgstr "Configuració d'empenyiment" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "Codi G personalitzat" @@ -8964,8 +9001,8 @@ msgstr "" msgid "Size and coordinates" msgstr "Mida i coordenades" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "Capacitats" @@ -9034,11 +9071,11 @@ msgstr "Inclinació" msgid "Tilt time" msgstr "Temps d'inclinació" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "Correccions" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "Exposició" @@ -9217,42 +9254,46 @@ msgstr "Segur que desitges %1% el predefinit seleccionat?" msgid "%1% Preset" msgstr "%1% Predefinit" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "Ajust" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" -msgstr "Cerca" +msgstr "Cercar" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" -msgstr "" +msgstr "Substitueix-ho per" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" -msgstr "" +msgstr "Expressió normal" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" -msgstr "" +msgstr "No distingeix minúscules/majúscules" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "Paraula sencera" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" -msgstr "" +msgstr "Coincideix amb una sola línia" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "Esteu segur que voleu suprimir totes les substitucions?" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" "Els límits de la màquina s'incorporaran al codi G i es faran servir per " "calcular el temps d'impressió." -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " @@ -9262,7 +9303,7 @@ msgstr "" "estimar el temps d'impressió, que per tant pot no ser exacte ja que la " "impressora pot aplicar un conjunt diferent de límits de la màquina." -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." @@ -9270,12 +9311,12 @@ msgstr "" "Els límits de la màquina no estan establerts, per tant, el temps d'impressió " "estimat pot no ser exacte." -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "PANY BLOQUEJAT" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 msgid "" "indicates that the settings are the same as the system (or default) values " "for the current option group" @@ -9283,12 +9324,12 @@ msgstr "" "indica que els paràmetres són els mateixos que els valors del sistema (o per " "defecte) per al grup d'opcions actual" -#: src/slic3r/GUI/Tab.cpp:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "PANY DESBLOQUEJAT" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -9300,12 +9341,12 @@ msgstr "" "Feu clic a la icona PANY DESBLOQUEJAT per restablir tots els paràmetres del " "grup d'opcions actuals als valors del sistema (o per defecte)." -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "VINYETA BLANCA" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 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." @@ -9314,12 +9355,12 @@ msgstr "" "predeterminat),\n" "per al botó dret: indica que la configuració no s'ha modificat." -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "FLETXA ENRERE" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -9331,7 +9372,7 @@ msgstr "" "Feu clic al símbol FLETXA ENRERE per resetejar tots els paràmetres del grup " "d'opcions actuals als gravats anteriorment." -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" @@ -9339,7 +9380,7 @@ msgstr "" "La icona de PANY BLOQUEJAT indica que els paràmetres són els mateixos que " "els valors del sistema (per defecte) per al grup d'opcions actual" -#: src/slic3r/GUI/Tab.cpp:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -9352,13 +9393,13 @@ msgstr "" "Feu clic per restablir totes les configuracions per al grup d'opcions " "actuals als valors del sistema (o per defecte)." -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" "La icona de VINYETA BLANCA indica un predifinit no del sistema (o no per " "defecte)" -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." @@ -9367,7 +9408,7 @@ msgstr "" "els de la darrera vegada que heu salvat els paràmetres per al grup d'opcions " "actual." -#: src/slic3r/GUI/Tab.cpp:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -9378,7 +9419,7 @@ msgstr "" "són iguals als que es van desar per al grup d'opcions actual.\n" "Feu clic per tornar aquests valors als darrers desats." -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." @@ -9386,7 +9427,7 @@ msgstr "" "La icona de PANY BLOQUEJAT indica que el valor és el mateix que el del " "sistema (per defecte)" -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" @@ -9396,7 +9437,7 @@ msgstr "" "configuracions i no són iguals als valors del sistema (o predeterminats).\n" "Feu clic per reiniciar el valor actual als del sistema (o predeterminats)" -#: src/slic3r/GUI/Tab.cpp:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." @@ -9404,7 +9445,7 @@ msgstr "" "El símbol de VINYETA BLANCA indica que els valors són els mateixos que els " "dels paràmetres desats la darrera vegada." -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -9414,31 +9455,31 @@ msgstr "" "desat la darrera vegada.\n" "Feu clic per restaurar el valor al darrer paràmetre desat." -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "Material" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "Perfil d'impressió de material" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "Cap del suport" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "Pilar de suport" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "Connexió de les varetes de suport i unions" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "Generació automàtica" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" @@ -9447,86 +9488,94 @@ msgstr "" "\"%1%\" està desactivat perquè \"%2%\" és a la categoria \"%3%\".\n" "Per activar \"%1%\", si us plau desactiva \"%2%\"" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "Elevació de l'objecte" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "Pad al voltant de l'objecte" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "Undef" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "Canvis no desats" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "S'estan canviant els predefinits: canvis no desats" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "Valor antic" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "Valor nou" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "Mantenir" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "Transferir" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "No desar" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "Descartar" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "Desar" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 -msgid "" -"You will not be asked about the unsaved changes in presets the next time you " -"create new project" -msgstr "" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " -"switch a preset" +"create new project" msgstr "" +"No et preguntarà pels canvis no guardats en predefinits la propera vegada " +"que creis un nou projecte" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" +"You will not be asked about the unsaved changes in presets the next time you " +"switch a preset" +msgstr "" +"No et preguntarà pels canvis no guardats en predefinits la propera vegada " +"que canvíis d'ajust" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 +msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" "- Closing PrusaSlicer while some presets are modified,\n" "- Loading a new project while some presets are modified" msgstr "" +"Preguntar sempre pels canvis no guardats en predefinits la propera vegada " +"que::\n" +"- Tanquis PrusaSlicer mentre es modifiquen alguns ajustaments,\n" +"- Carreguis un nou projecte mentre es modifiquen alguns ajustaments" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "PrusaSlicer recordarà la vostra acció." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -9535,58 +9584,59 @@ msgstr "" "Visita \"Preferències\" i marca\"%1%\"\n" "per a què pregunti sobre els canvis no guardats novament." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" "Alguns camps són massa llargs per cabre. El clic dret del ratolí mostra el " "text complet." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "No es desaran tots els canvis de configuració" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "Tots els canvis dels ajustaments seran descartats." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "Desa les opcions seleccionades." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "Conserva la configuració seleccionada." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "" "Transfereix la configuració seleccionada al predefinit seleccionat " "recentment." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format msgid "Save the selected options to preset \"%1%\"." msgstr "Desar les opcions seleccionades a la configuració predefinida \"%1%\"." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 #, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "" "Transferir les opcions seleccionades al nou predifnit seleccionat \"%1%\"." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "S'ha modificat el predefinit següent" msgstr[1] "S'han modificat els predefinits següents" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "Predefinit \"%1%\" té els següents canvis no desats:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " @@ -9595,7 +9645,7 @@ msgstr "" "El predefinit \"%1%\" no és compatible amb el perfil d'impressora nou i té " "els canvis següents no desats:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " @@ -9604,40 +9654,40 @@ msgstr "" "El predefinit \"%1%\" no és compatible amb el nou perfil d'impressió i té " "els canvis següents:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "Comptador d'extrusors" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" -msgstr "" +msgstr "Seleccioneu els predefinits per comparar" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "Mostra tots els predefinits (inclosos els incompatibles)" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "Valor predefinit esquerre" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "Valor predefinit dret" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "No s'ha trobat un dels predefinits" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "Els predefinits comparats tenen una tecnologia d'impressora diferent" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "Els predefinits són els mateixos" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." @@ -9646,11 +9696,11 @@ msgstr "" "Feu clic en aquest botó per seleccionar el mateix predefinit per al " "predefinit dret i esquerre." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "Categoria sense definir" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "Grup sense definir" @@ -10239,24 +10289,26 @@ msgstr "" #: src/slic3r/Config/Snapshot.cpp:584 msgid "Taking a configuration snapshot failed." -msgstr "" +msgstr "No s'ha pogut prendre una instantània de configuració." #: src/slic3r/Config/Snapshot.cpp:598 msgid "" "PrusaSlicer has encountered an error while taking a configuration snapshot." msgstr "" +"El PrusaSlicer ha trobat un error mentre feia una instantània de " +"configuració." #: src/slic3r/Config/Snapshot.cpp:599 msgid "PrusaSlicer error" -msgstr "" +msgstr "Error de PrusaSlicer" #: src/slic3r/Config/Snapshot.cpp:601 msgid "Continue" -msgstr "" +msgstr "Continuar" #: src/slic3r/Config/Snapshot.cpp:601 msgid "Abort" -msgstr "" +msgstr "Avortar" #: src/libslic3r/GCode.cpp:539 msgid "There is an object with no extrusions in the first layer." @@ -10307,7 +10359,7 @@ msgstr "" #: src/libslic3r/GCode.cpp:1236 src/libslic3r/GCode.cpp:1247 msgid "No extrusions were generated for objects." -msgstr "" +msgstr "No s'han generat extrusions per als objectes." #: src/libslic3r/GCode.cpp:1445 msgid "" @@ -10515,26 +10567,26 @@ msgstr "ha fallat la validació" msgid "write calledback failed" msgstr "ha fallat write calledback" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "Tots els objectes són fora del volum d'impressió." -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "La configuració subministrada provocarà una impressió buida." -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "Alguns objectes estan massa a prop; L'extrusor xocarà amb ells." -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "" "Alguns objectes són massa alts i no es poden imprimir sense col·lisions " "d'extrusora." -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " @@ -10544,7 +10596,7 @@ msgstr "" "tots menys l'últim objecte o habiliteu el mode seqüencial per " "\"complete_objects\"." -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." @@ -10552,7 +10604,7 @@ msgstr "" "L'opció gaso en espiral sols pot ser usada per imprimir objectes d'un sol " "material." -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." @@ -10560,7 +10612,7 @@ msgstr "" "La torre de neteja només és compatible si tots els extrusors tenen el mateix " "diàmetre de nozzle i usen filament del mateix diàmetre." -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." @@ -10568,7 +10620,7 @@ msgstr "" "La Torre de Neteja només és compatible amb les variants de codi G usades per " "Marlin, RepRap/Sprinter, RepRapFirmware i Repetier." -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." @@ -10576,20 +10628,20 @@ msgstr "" "Actualment,Torre de Neteja només és compatible amb l'encaminament relatiu de " "l'extrusor (use_relative_e_distances=1)." -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" "La prevenció de degoteig actualment no és compatible amb la torre de neteja " "activa." -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" "La Torre de Neteja actualment no és compatible amb E volumètric " "(use_volumetric_e=0)." -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." @@ -10597,7 +10649,7 @@ msgstr "" "La Torre de Neteja no es permet ara per a impressions seqüencials " "multimaterial." -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" @@ -10605,7 +10657,7 @@ msgstr "" "La torre de neteja només és compatible amb diversos objectes si tenen " "alçades de capes iguals" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" @@ -10613,7 +10665,7 @@ msgstr "" "La torre de neteja només es permet per a diversos objectes si s'imprimeixen " "sobre un nombre igual de capes de bassa" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -10621,7 +10673,7 @@ msgstr "" "La torre de neteja només és compatible amb diversos objectes si " "s'imprimeixen amb la mateixa support_material_contact_distance" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." @@ -10629,7 +10681,7 @@ msgstr "" "La torre de neteja només és compatible amb diversos objectes si es tallen " "igual." -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" @@ -10637,23 +10689,23 @@ msgstr "" "La Torre de Neteja només és compatible si tots els objectes tenen la mateixa " "alçada de capa variable" -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "Un o més objectes han estat assignats a un extrusor inexistent." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "%1%=%2% mm és massa baix per ser imprès a una alçada de capa de %3% mm" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "" "%1%=%2% mm excessius per ser imprimible amb un nozzle de diàmetre de %3% mm" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -10665,7 +10717,7 @@ msgstr "" "o support_material_interface_extruder == 0), tots els nozzles han de ser del " "mateix diàmetre." -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." @@ -10673,7 +10725,7 @@ msgstr "" "Perquè la torre de neteja funcioni amb suports solubles, les capes de " "suports necessiten estar sincronitzades amb les capes de l'objecte." -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -10685,28 +10737,54 @@ msgstr "" "support_material_extruder com support_material_interface_extruder s'han de " "configurar a 0)." -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "" "L'alçada de primera capa no pot ser més gran que el diàmetre del nozzle" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "L'alçada de la capa no pot ser més gran que diàmetre del nozzle" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" +"L'adreçament relatiu de l'extrusor requereix restablir la posició de " +"l'extrusor a cada capa per evitar la pèrdua de precisió de coma flotant. " +"Afegiu \"G92 E0\" a layer_gcode." + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" +"\"G92 E0\" s'ha trobat a before_layer_gcode, el qual és incompatible amb " +"l'adreçament absolut d'extrusor." + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" +"\"G92 E0\" s'ha trobat a layer_gcode, el qual és incompatible amb " +"l'adreçament absolut d'extrusor." + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "Omplint capes" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "Generant faldilla i bassa" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "S'està exportant el codi G" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "S'està generant el codi G" @@ -12284,11 +12362,11 @@ msgstr "" #: src/libslic3r/PrintConfig.cpp:1361 msgid "G-code substitutions" -msgstr "" +msgstr "Substitucions de codi G" #: src/libslic3r/PrintConfig.cpp:1362 msgid "Find / replace patterns in G-code lines and substitute them." -msgstr "" +msgstr "Cerca / substitueix patrons en línies de codi G i els substitueix." #: src/libslic3r/PrintConfig.cpp:1367 msgid "High extruder current on filament swap" @@ -15562,7 +15640,7 @@ msgid "" "theVariable layer height tool. (Not available for SLA printers.)" msgstr "" "Alçada de capa variable\n" -"Sabies que pot imprimir diferents regions del teu model amb una alçada de " +"Sabies que pots imprimir diferents regions del teu model amb una alçada de " "capa diferent i suavitzar les transicions entre elles? Proveu " "l'einaAlçada de capa variable. (No disponible per a impressores SLA.)" @@ -15599,7 +15677,7 @@ msgid "" "threshold area. (Expert mode only.)" msgstr "" "Àrea llindar de farciment sòlid\n" -"Sabies que pot fer que les parts del seu model amb una secció transversal " +"Sabies que pots fer que les parts del teu model amb una secció transversal " "petita s'emplenin amb farciment sòlid automàticament? Ajusta elÀrea " "llindar de farciment sòlid. (Només en mode Expert.)" @@ -15812,13 +15890,44 @@ msgstr "" "Sabies que pots posar el PrusaSlicer en mode de pantalla completa? Utilitzeu " "la tecla d'accés ràpid F11." -#: ../src/common/debugrpt.cpp:586 -msgid "" -"\n" -"Please send this report to the program maintainer, thank you!\n" -msgstr "" -"\n" -"Envieu aquest informe al mantenidor del programa. Gràcies!\n" +#~ msgid "" +#~ "If enabled, the descriptions of configuration parameters in settings tabs " +#~ "wouldn't work as hyperlinks. If disabled, the descriptions of " +#~ "configuration parameters in settings tabs will work as hyperlinks." +#~ msgstr "" +#~ "Si està habilitat, les descripcions dels paràmetres de configuració a les " +#~ "pestanyes de configuració no funcionaran com a hiperenllaços. Si està " +#~ "deshabilitat, les descripcions dels paràmetres de configuració a les " +#~ "pestanyes de configuració funcionaran com a hiperenllaços." + +#, c-format, boost-format +#~ msgid "" +#~ "PrusaSlicer detected another configuration folder at %s.\n" +#~ "Its version is %s.\n" +#~ "Last version you used in current configuration folder is %s.\n" +#~ "Please note that PrusaSlicer uses different folders to save configuration " +#~ "of alpha, beta and full release versions.\n" +#~ "Would you like to copy found configuration to your current configuration " +#~ "folder?\n" +#~ "\n" +#~ "If you select yes, PrusaSlicer will copy all profiles and other files " +#~ "from found folder to the current one. Overwriting any existing file with " +#~ "matching name.\n" +#~ "If you select no, you will continue with current configuration." +#~ msgstr "" +#~ "PrusaSlicer ha detectat una altra carpeta de configuració a %s.\n" +#~ "La vostra versió és %s.\n" +#~ "La darrera versió que heu utilitzat a la carpeta de configuració actual " +#~ "és %s.\n" +#~ "Si us plau, tingueu en compte que PrusaSlicer utilitza diferents carpetes " +#~ "per desar la configuració de les versions alfa, beta i final.\n" +#~ "Voleu copiar la configuració trobada a la vostra carpeta de configuració " +#~ "actual?\n" +#~ "\n" +#~ "Si seleccioneu sí, PrusaSlicer copiarà tots els perfils i altres fitxers " +#~ "de la carpeta trobada a l'actual, sobreescrivint qualsevol fitxer " +#~ "existent amb el mateix nom.\n" +#~ "Si seleccioneu no, continuareu amb la configuració actual." #: ../src/richtext/richtextstyledlg.cpp:210 #: ../src/richtext/richtextstyledlg.cpp:222 diff --git a/resources/localization/cs/PrusaSlicer.mo b/resources/localization/cs/PrusaSlicer.mo index 7523c895e..9fb2a6f7b 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 a0f176d9b..1ec8fea19 100644 --- a/resources/localization/cs/PrusaSlicer_cs.po +++ b/resources/localization/cs/PrusaSlicer_cs.po @@ -1,13 +1,13 @@ msgid "" msgstr "" -"Language: cs_CZ\n" +"Language: cs\n" "MIME-Version: 1.0\n" "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: Phrase (phrase.com)\n" +"X-Generator: Prusalator\n" #: src/slic3r/GUI/Tab.cpp:4707 #, boost-format @@ -18,6 +18,22 @@ msgstr "" "\"%1%\" je deaktivováno, protože \"%2%\" je zapnuto v kategorii \"%3%\".\n" "Chcete-li povolit \"%1%\",, vypněte \"%2%\"" +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" +"V before_layer_gcode byl nalezen kód \"G92 E0\", který není kompatibilní s " +"absolutním adresováním extruderu." + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" +"V kódu layer_gcode byl nalezen kód \"G92 E0\", který není kompatibilní s " +"absolutním adresováním extruderu." + #: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:1087 #: src/libslic3r/PrintConfig.cpp:1559 src/libslic3r/PrintConfig.cpp:1751 #: src/libslic3r/PrintConfig.cpp:1814 src/libslic3r/PrintConfig.cpp:2065 @@ -134,6 +150,12 @@ msgstr[1] "%1% (%2$d stěny)" msgstr[2] "%1% (%2$d stěny)" msgstr[3] "%1% (%2$d stěn)" +#. TRN Remove/Delete +#: src/slic3r/GUI/Tab.cpp:3736 +#, boost-format +msgid "%1% Preset" +msgstr "%1% Přednastavení" + #: src/slic3r/GUI/ConfigWizard.cpp:752 #, boost-format msgid "" @@ -143,12 +165,6 @@ msgstr "" "%1% označené * nejsou kompatibilní s některými nainstalovanými " "tiskárnami." -#. TRN Remove/Delete -#: src/slic3r/GUI/Tab.cpp:3736 -#, boost-format -msgid "%1% Preset" -msgstr "%1% Přednastavení" - #: src/slic3r/GUI/GUI.cpp:317 #, boost-format msgid "%1% was substituted with %2%" @@ -210,6 +226,16 @@ msgstr "%s - ZLOMOVÁ ZMĚNA" msgid "%s - Drop project file" msgstr "%s - Otevírání projektu" +#: src/slic3r/GUI/ConfigWizard.cpp:550 +#, c-format, boost-format +msgid "%s Family" +msgstr "%s Rodina" + +#: src/slic3r/GUI/GUI_App.cpp:2245 +#, c-format, boost-format +msgid "%s View Mode" +msgstr "%s Režim zobrazení" + #: src/slic3r/GUI/UpdateDialogs.cpp:213 #, c-format, boost-format msgid "%s configuration is incompatible" @@ -225,11 +251,6 @@ msgstr "%s nepodporuje procenta" msgid "%s error" msgstr "%s chyba" -#: src/slic3r/GUI/ConfigWizard.cpp:550 -#, c-format, boost-format -msgid "%s Family" -msgstr "%s Rodina" - #: src/slic3r/GUI/MsgDialog.cpp:233 #, c-format, boost-format msgid "%s has a warning" @@ -240,6 +261,18 @@ msgstr "%s obsahuje varování" msgid "%s has encountered an error" msgstr "Došlo k chybě v programu %s" +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 +#, c-format, boost-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 zaznamenal chybu. Bylo to pravděpodobně způsobeno nedostatkem paměti. " +"Pokud jste si jisti, že máte v systému dostatek paměti RAM, může to být také " +"chyba programu a v takovém případě bychom byli rádi, kdybyste nám to " +"nahlásili." + #: src/slic3r/GUI/GUI_App.cpp:698 #, c-format, boost-format msgid "" @@ -256,18 +289,6 @@ msgstr "" "\n" "Aplikace se nyní ukončí." -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 -#, c-format, boost-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 zaznamenal chybu. Bylo to pravděpodobně způsobeno nedostatkem paměti. " -"Pokud jste si jisti, že máte v systému dostatek paměti RAM, může to být také " -"chyba programu a v takovém případě bychom byli rádi, kdybyste nám to " -"nahlásili." - #: src/slic3r/GUI/UpdateDialogs.cpp:304 #, c-format, boost-format msgid "%s has no configuration updates available." @@ -316,11 +337,6 @@ msgstr "" "Při nastavování nových předvoleb postupujte podle pokynů v %s a vyberte, zda " "chcete povolit automatické přednastavené aktualizace." -#: src/slic3r/GUI/GUI_App.cpp:2245 -#, c-format, boost-format -msgid "%s View Mode" -msgstr "%s Režim zobrazení" - #: src/slic3r/GUI/MsgDialog.cpp:232 #, c-format, boost-format msgid "%s warning" @@ -473,22 +489,14 @@ msgstr "&Okno" msgid "(All)" msgstr "(Všechny)" -#: src/slic3r/GUI/Plater.cpp:1401 -msgid "(including spool)" -msgstr "(včetně cívky)" - -#: src/libslic3r/PrintConfig.cpp:1985 -msgid "(minimum)" -msgstr "(minimálně)" +#: src/slic3r/GUI/MainFrame.cpp:1293 +msgid "(Re)Slice No&w" +msgstr "&(Znovu) Slicovat" #: src/slic3r/GUI/KBShortcutsDialog.cpp:81 msgid "(Re)slice" msgstr "(Znovu)Slicovat" -#: src/slic3r/GUI/MainFrame.cpp:1293 -msgid "(Re)Slice No&w" -msgstr "&(Znovu) Slicovat" - #: src/libslic3r/GCode.cpp:573 msgid "(Some lines not shown)" msgstr "(Některé řádky nejsou zobrazeny)" @@ -497,6 +505,14 @@ msgstr "(Některé řádky nejsou zobrazeny)" msgid "(Unknown)" msgstr "(Neznámý)" +#: src/slic3r/GUI/Plater.cpp:1401 +msgid "(including spool)" +msgstr "(včetně cívky)" + +#: src/libslic3r/PrintConfig.cpp:1985 +msgid "(minimum)" +msgstr "(minimálně)" + #: src/slic3r/GUI/MainFrame.cpp:1625 msgid ") not found." msgstr ") nebyl nalezen." @@ -557,10 +573,6 @@ msgstr "3 (silné)" msgid "3&D" msgstr "3&D" -#: src/slic3r/GUI/Plater.cpp:4438 -msgid "3D editor view" -msgstr "Zobrazení 3D editoru" - #: src/libslic3r/PrintConfig.cpp:1153 msgid "3D Honeycomb" msgstr "3D Plástev" @@ -569,6 +581,10 @@ msgstr "3D Plástev" msgid "3D Mouse disconnected." msgstr "3D myš odpojena." +#: src/slic3r/GUI/Plater.cpp:4438 +msgid "3D editor view" +msgstr "Zobrazení 3D editoru" + #: src/slic3r/GUI/Mouse3DController.cpp:453 msgid "3Dconnexion settings" msgstr "Nastavení 3DConnexion" @@ -607,10 +623,6 @@ msgid "" "from the system preset." msgstr "Bude vytvořena oddělená kopie aktuálního systémového přednastavení." -#: src/slic3r/GUI/ConfigWizard.cpp:2717 -msgid "A new filament was installed and it will be activated." -msgstr "Byl nainstalován nový filament a bude aktivován." - #: src/slic3r/GUI/ConfigWizard.cpp:2691 msgid "A new Printer was installed and it will be activated." msgstr "Byla nainstalována nová tiskárna, která bude aktivována." @@ -619,6 +631,10 @@ msgstr "Byla nainstalována nová tiskárna, která bude aktivována." msgid "A new SLA material was installed and it will be activated." msgstr "Byl nainstalován nový SLA materiál a bude aktivován." +#: src/slic3r/GUI/ConfigWizard.cpp:2717 +msgid "A new filament was installed and it will be activated." +msgstr "Byl nainstalován nový filament a bude aktivován." + #: src/slic3r/GUI/ConfigWizard.cpp:2596 msgid "A new vendor was installed and one of its printers will be activated" msgid_plural "" @@ -657,6 +673,14 @@ msgstr "" msgid "A toolpath outside the print area was detected." msgstr "Byla detekována cesta mimo tiskovou oblast." +#: src/libslic3r/PrintConfig.cpp:291 +msgid "API Key / Password" +msgstr "API klíč / Heslo" + +#: src/libslic3r/PrintConfig.cpp:351 +msgid "API key" +msgstr "API klíč" + #: src/slic3r/Config/Snapshot.cpp:601 msgid "Abort" msgstr "Přerušit" @@ -666,10 +690,6 @@ msgstr "Přerušit" msgid "About %s" msgstr "O %s" -#: src/slic3r/GUI/GCodeViewer.cpp:3182 -msgid "above" -msgstr "nad" - #: src/libslic3r/PrintConfig.cpp:2161 msgid "Above Z" msgstr "Nad Z" @@ -702,10 +722,6 @@ msgstr "Aktivovat" msgid "Active" msgstr "Aktivní" -#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 -msgid "active" -msgstr "aktivní" - #: src/slic3r/GUI/GLCanvas3D.cpp:248 msgid "Adaptive" msgstr "Adaptivní" @@ -735,6 +751,60 @@ msgstr "Přidat" msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\"" msgstr "Přidat \"%1%\" jako další přednasatevení pro fyzickou tikárnu \"%2%\"" +#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 +msgid "Add Generic Subobject" +msgstr "Přidání obecného Dílčího objektu" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 +msgid "Add Height Range" +msgstr "Přidání Rozsahu vrstev" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 +msgid "Add Instance of the selected object" +msgstr "Přidat instanci vybraného objektu" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 +msgid "Add Layers" +msgstr "Přidat Vrstvy" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 +msgid "Add Settings Bundle for Height range" +msgstr "Přidání Skupiny nastavení pro Výškový rozsah" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 +msgid "Add Settings Bundle for Object" +msgstr "Přidání skupiny nastavení pro Objekt" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 +msgid "Add Settings Bundle for Sub-object" +msgstr "Přidání skupiny nastavení pro Dílčí objekt" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 +msgid "Add Settings for Layers" +msgstr "Přidání nastavení pro Vrstvy" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 +msgid "Add Settings for Object" +msgstr "Přidání nastavení pro Objekty" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 +msgid "Add Settings for Sub-object" +msgstr "Přidání nastavení pro Dílčí objeky" + +#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 +msgid "Add Shape" +msgstr "Přidat Tvar" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shape from Gallery" +msgstr "Přidání tvaru z galerie" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shapes from Gallery" +msgstr "Přidat tvary z galerie" + #: src/libslic3r/PrintConfig.cpp:3607 msgid "Add a pad underneath the supported model" msgstr "Pod podepíraný model přidá podložku" @@ -804,33 +874,15 @@ msgstr "Přidat změnu extruderu - Levé tlačítko myši" msgid "Add extruder to sequence" msgstr "Přidat extruder do seznamu" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 -msgid "Add Generic Subobject" -msgstr "Přidání obecného Dílčího objektu" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 -msgid "Add Height Range" -msgstr "Přidání Rozsahu vrstev" - #: src/slic3r/GUI/GLCanvas3D.cpp:4541 src/slic3r/GUI/GUI_Factories.cpp:1084 #: src/slic3r/GUI/GUI_Factories.cpp:1108 src/slic3r/GUI/GUI_Factories.cpp:1119 msgid "Add instance" msgstr "Přidat instanci" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 -msgid "Add Instance of the selected object" -msgstr "Přidat instanci vybraného objektu" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:164 msgid "Add layer range" msgstr "Přidat rozsah vrstev" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 -msgid "Add Layers" -msgstr "Přidat Vrstvy" - #: src/slic3r/GUI/GUI_Factories.cpp:162 msgid "Add modifier" msgstr "Přidat modifikátor" @@ -890,42 +942,6 @@ msgstr "Přidat vybraný tvar(y) na podložku" msgid "Add settings" msgstr "Přidat nastavení" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 -msgid "Add Settings Bundle for Height range" -msgstr "Přidání Skupiny nastavení pro Výškový rozsah" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 -msgid "Add Settings Bundle for Object" -msgstr "Přidání skupiny nastavení pro Objekt" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 -msgid "Add Settings Bundle for Sub-object" -msgstr "Přidání skupiny nastavení pro Dílčí objekt" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 -msgid "Add Settings for Layers" -msgstr "Přidání nastavení pro Vrstvy" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 -msgid "Add Settings for Object" -msgstr "Přidání nastavení pro Objekty" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 -msgid "Add Settings for Sub-object" -msgstr "Přidání nastavení pro Dílčí objeky" - -#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 -msgid "Add Shape" -msgstr "Přidat Tvar" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shape from Gallery" -msgstr "Přidání tvaru z galerie" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shapes from Gallery" -msgstr "Přidat tvary z galerie" - #: src/libslic3r/PrintConfig.cpp:686 msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " @@ -980,14 +996,14 @@ msgstr "Přidat/Odebrat přednastavení" msgid "Add/Remove printers" msgstr "Přidat/Odebrat tiskárny" -#: src/slic3r/GUI/Tab.cpp:1369 -msgid "Additional information:" -msgstr "Doplňující informace:" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:63 msgid "Additional Settings" msgstr "Další nastavení" +#: src/slic3r/GUI/Tab.cpp:1369 +msgid "Additional information:" +msgstr "Doplňující informace:" + #: src/slic3r/GUI/ConfigWizard.cpp:1236 msgid "" "Additionally a backup snapshot of the whole configuration is created before " @@ -999,26 +1015,19 @@ msgstr "" msgid "Address" msgstr "Adresa" -#: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 -#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 -#: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4661 -#: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 -#: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 -#: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 -#: src/libslic3r/PrintConfig.cpp:2490 src/libslic3r/PrintConfig.cpp:3028 -#: src/libslic3r/PrintConfig.cpp:3224 +#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 +msgctxt "Mode" msgid "Advanced" msgstr "Pokročilý" -#: src/slic3r/GUI/ConfigWizard.cpp:1280 -msgid "Advanced mode" -msgstr "Pokročilý režim" - #: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Advanced View Mode" msgstr "Pokročilý režim" +#: src/slic3r/GUI/ConfigWizard.cpp:1280 +msgid "Advanced mode" +msgstr "Pokročilý režim" + #: src/slic3r/GUI/FirmwareDialog.cpp:851 msgid "Advanced: Output log" msgstr "Pokročilý:  Výstupní log" @@ -1042,14 +1051,14 @@ msgstr "" msgid "After layer change G-code" msgstr "G-code po změně vrstvy" -#: src/libslic3r/PrintConfig.cpp:4322 -msgid "Align the model to the given point." -msgstr "Zarovnejte model s daným bodem." - #: src/libslic3r/PrintConfig.cpp:4321 msgid "Align XY" msgstr "Zarovnat XY" +#: src/libslic3r/PrintConfig.cpp:4322 +msgid "Align the model to the given point." +msgstr "Zarovnejte model s daným bodem." + #: src/libslic3r/PrintConfig.cpp:2223 msgid "Aligned" msgstr "Zarovnaný" @@ -1114,10 +1123,6 @@ msgstr "Všechna uživatelská přednastavení budou odstraněna." msgid "All walls" msgstr "Všechny stěny" -#: src/libslic3r/miniz_extension.cpp:121 -msgid "allocation failed" -msgstr "alokace selhala" - #: src/slic3r/GUI/Preferences.cpp:208 src/slic3r/GUI/Preferences.cpp:212 msgid "Allow just a single PrusaSlicer instance" msgstr "Povolit pouze jednu instanci PrusaSliceru" @@ -1209,6 +1214,10 @@ msgstr "" "Na objektu jsou definované vynucené podpěry, které nebudou použity, protože " "podpěry jsou zakázány." +#: src/slic3r/GUI/GLCanvas3D.cpp:6367 +msgid "An object outside the print area was detected." +msgstr "Byl detekován objekt mimo tiskovou oblast." + #: src/slic3r/GUI/GLCanvas3D.cpp:6372 msgid "" "An object outside the print area was detected.\n" @@ -1217,10 +1226,6 @@ msgstr "" "Byl detekován objekt mimo tiskovou oblast.\n" "Pro pokračování ve slicování vyřešte tento problém." -#: src/slic3r/GUI/GLCanvas3D.cpp:6367 -msgid "An object outside the print area was detected." -msgstr "Byl detekován objekt mimo tiskovou oblast." - #: src/slic3r/GUI/Jobs/PlaterJob.cpp:13 msgid "An unexpected error occured" msgstr "Došlo k neočekávané chybě" @@ -1241,14 +1246,6 @@ msgstr "" "Jakékoliv úpravy by měly být uloženy jako nové přednastavení zděděná z " "tohoto." -#: src/libslic3r/PrintConfig.cpp:351 -msgid "API key" -msgstr "API klíč" - -#: src/libslic3r/PrintConfig.cpp:291 -msgid "API Key / Password" -msgstr "API klíč / Heslo" - #: src/slic3r/GUI/GUI_App.cpp:2232 msgid "Application preferences" msgstr "Nastavení aplikace" @@ -1271,18 +1268,10 @@ msgstr "Automaticky aplikovat změnu barvy" msgid "Apply to all the remaining small objects being loaded." msgstr "Použít na všechny zbývající malé načítané objekty." -#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 -msgid "approximate seconds" -msgstr "vteřin přibližně" - #: src/libslic3r/PrintConfig.cpp:709 src/libslic3r/PrintConfig.cpp:1156 msgid "Archimedean Chords" msgstr "Archimedean Chords" -#: src/libslic3r/miniz_extension.cpp:147 -msgid "archive is too large" -msgstr "archiv je moc velký" - #: src/slic3r/GUI/Tab.cpp:3731 #, boost-format msgid "Are you sure you want to %1% the selected preset?" @@ -1313,6 +1302,10 @@ msgstr "" msgid "Are you sure you want to delete \"%1%\" printer?" msgstr "Opravdu chcete odstranit tiskárnu \"%1%\"?" +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "Jste si jisti, že chcete odstranit všechna nahrazení?" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1132 msgid "Are you sure you want to do it?" msgstr "Opravdu to chcete udělat?" @@ -1564,14 +1557,22 @@ msgstr "Záchrana při neznámých hodnotách konfigurace" msgid "Balanced" msgstr "Vyvážené" -#: src/slic3r/GUI/MainFrame.cpp:655 -msgid "based on Slic3r" -msgstr "založený na Slic3r" - #: src/slic3r/GUI/Tab.cpp:1989 msgid "Bed" msgstr "Tisková podložka" +#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape" +msgstr "Tvar tiskové podložky" + +#: src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape and Size" +msgstr "Tvar a rozměr podložky" + +#: src/slic3r/GUI/ConfigWizard.cpp:1581 +msgid "Bed Temperature:" +msgstr "Teplota tiskové podložky:" + #: src/libslic3r/PrintConfig.cpp:241 msgid "Bed custom model" msgstr "Vlastní model podložky" @@ -1588,18 +1589,10 @@ msgstr "Vyplnění podložky objektem zrušeno." msgid "Bed filling done." msgstr "Vyplnění tiskové podložky je dokončené." -#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape" -msgstr "Tvar tiskové podložky" - #: src/libslic3r/PrintConfig.cpp:231 msgid "Bed shape" msgstr "Tvar tiskové podložky" -#: src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape and Size" -msgstr "Tvar a rozměr podložky" - #: src/libslic3r/PrintConfig.cpp:396 msgid "Bed temperature" msgstr "Teplota tiskové podložky" @@ -1612,10 +1605,6 @@ msgstr "" "Teplota tiskové podložky pro další vrstvy po první vrstvě. Nastavením na " "hodnotu nula vypnete ovládací příkazy teploty tiskové podložky ve výstupu." -#: src/slic3r/GUI/ConfigWizard.cpp:1581 -msgid "Bed Temperature:" -msgstr "Teplota tiskové podložky:" - #: src/slic3r/GUI/Tab.cpp:2422 src/libslic3r/GCode.cpp:709 #: src/libslic3r/PrintConfig.cpp:402 msgid "Before layer change G-code" @@ -1625,14 +1614,14 @@ msgstr "G-code před změnou vrstvy" msgid "Before roll back" msgstr "Před vrácením zpět" -#: src/slic3r/GUI/Plater.cpp:579 -msgid "Below object" -msgstr "Pod objektem" - #: src/libslic3r/PrintConfig.cpp:2170 msgid "Below Z" msgstr "Pod Z" +#: src/slic3r/GUI/Plater.cpp:579 +msgid "Below object" +msgstr "Pod objektem" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:21 msgid "Best surface quality" msgstr "Nejlepší kvalita povrchu" @@ -1671,13 +1660,14 @@ msgstr "Objem láhve" msgid "Bottle weight" msgstr "Hmotnost láhve" -#. 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:1121 src/libslic3r/PrintConfig.cpp:423 -#: src/libslic3r/PrintConfig.cpp:432 +#: src/slic3r/GUI/OptionsGroup.cpp:352 +msgctxt "Layers" msgid "Bottom" -msgstr "Zespod" +msgstr "Spodních" + +#: src/slic3r/GUI/MainFrame.cpp:1121 +msgid "Bottom View" +msgstr "Pohled zespod" #: src/libslic3r/PrintConfig.cpp:2566 msgid "Bottom contact Z distance" @@ -1704,10 +1694,6 @@ msgstr "Tloušťka spodní skořepiny je %1% mm při výšce vrstvy %2% mm." msgid "Bottom solid layers" msgstr "Plné spodní vrstvy" -#: src/slic3r/GUI/MainFrame.cpp:1121 -msgid "Bottom View" -msgstr "Pohled zespod" - #: src/slic3r/GUI/GUI_Factories.cpp:461 src/slic3r/GUI/GUI_Factories.cpp:501 #: src/slic3r/GUI/GUI_Factories.cpp:505 msgid "Box" @@ -1806,10 +1792,6 @@ msgstr "Velikost štětce" msgid "Bucket fill" msgstr "Vylití barvou" -#: src/libslic3r/miniz_extension.cpp:141 -msgid "buffer too small" -msgstr "buffer je příliš malý" - #: src/slic3r/GUI/GUI_App.cpp:1660 msgid "" "But since this version of PrusaSlicer we don't show this information in " @@ -1834,18 +1816,30 @@ msgstr "" "„Printer N“.\n" "Poznámka: Tento název lze později změnit v nastavení fyzických tiskáren" -#: src/slic3r/GUI/PresetHints.cpp:191 -msgid "by the print profile maximum" -msgstr "maximem pro profil tisku" +#: src/slic3r/GUI/NotificationManager.cpp:890 +msgid "CANCELED" +msgstr "ZRUŠENO" + +#: src/slic3r/GUI/NotificationManager.cpp:895 +msgid "COMPLETED" +msgstr "DOKONČENO" + +#: src/libslic3r/miniz_extension.cpp:117 +msgid "CRC-32 check failed" +msgstr "CRC-32 kontrola selhala" + +#: src/slic3r/Utils/Http.cpp:91 +msgid "" +"CURL init has failed. PrusaSlicer will be unable to establish network " +"connections. See logs for additional details." +msgstr "" +"CURL init selhal. PrusaSlicer nebude schopen navázat síťová připojení. Další " +"podrobnosti najdete v logu." #: src/slic3r/GUI/Preferences.cpp:314 msgid "Camera" msgstr "Kamera" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 -msgid "Camera view" -msgstr "Pohled kamery" - #: resources/data/hints.ini: [hint:Camera Views] msgid "" "Camera Views\n" @@ -1856,6 +1850,10 @@ msgstr "" "Věděli jste, že pomocí číselných kláves 0-6 můžete rychle přepínat " "mezi předdefinovanými úhly kamery?" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 +msgid "Camera view" +msgstr "Pohled kamery" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:322 msgid "Can't apply when proccess preview." msgstr "Nelze použít při náhledu procesu." @@ -1878,10 +1876,6 @@ msgstr "Zrušit vybrané" msgid "Cancel upload" msgstr "Zrušit nahrávání" -#: src/slic3r/GUI/NotificationManager.cpp:890 -msgid "CANCELED" -msgstr "ZRUŠENO" - #: src/slic3r/GUI/PrintHostDialogs.cpp:375 msgid "Cancelled" msgstr "Zrušeno" @@ -1980,30 +1974,10 @@ msgstr "Soubory s certifikátem (*.crt, *.pem)|*.crt;*.pem|Všechny soubory|*.*" msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"" msgstr "Změnit \"%1%\" na\"%2%\" pro tuto fyzickou tiskárnu \"%3%\"" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 -msgid "Change camera type (perspective, orthographic)" -msgstr "Změna typu kamery (perspektivní, ortografická)" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 -msgid "Change drainage hole diameter" -msgstr "Změna poloměru odtokového otvoru" - -#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 -msgid "Change extruder" -msgstr "Změnit extruder" - #: src/slic3r/GUI/GUI_ObjectList.cpp:616 msgid "Change Extruder" msgstr "Změnit Extruder" -#: src/slic3r/GUI/DoubleSlider.cpp:1613 -msgid "Change extruder (N/A)" -msgstr "Změnit extruder (N/A)" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:722 -msgid "Change extruder color" -msgstr "Změna barvy extruderu" - #: src/slic3r/GUI/GUI_ObjectList.cpp:4267 msgid "Change Extruders" msgstr "Změnit Extrudery" @@ -2017,6 +1991,26 @@ msgstr "Změna parametru %s" msgid "Change Part Type" msgstr "Změna typu části" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 +msgid "Change camera type (perspective, orthographic)" +msgstr "Změna typu kamery (perspektivní, ortografická)" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 +msgid "Change drainage hole diameter" +msgstr "Změna poloměru odtokového otvoru" + +#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 +msgid "Change extruder" +msgstr "Změnit extruder" + +#: src/slic3r/GUI/DoubleSlider.cpp:1613 +msgid "Change extruder (N/A)" +msgstr "Změnit extruder (N/A)" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:722 +msgid "Change extruder color" +msgstr "Změna barvy extruderu" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:702 msgid "Change point head diameter" msgstr "Změna průměru hrotu" @@ -2053,6 +2047,10 @@ msgstr "" "Změnou nastavení se aplikace restartuje.\n" "Ztratíte objekty na tiskové podložce." +#: src/slic3r/GUI/GUI_App.cpp:2219 +msgid "Check for Configuration Updates" +msgstr "Kontrola aktualizace konfigurací" + #: src/slic3r/GUI/ConfigWizard.cpp:1214 msgid "Check for application updates" msgstr "Zkontrolovat aktualizace aplikace" @@ -2061,9 +2059,9 @@ msgstr "Zkontrolovat aktualizace aplikace" msgid "Check for configuration updates" msgstr "Zkontrolujte aktualizace konfigurace" -#: src/slic3r/GUI/GUI_App.cpp:2219 -msgid "Check for Configuration Updates" -msgstr "Kontrola aktualizace konfigurací" +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 +msgid "Choose SLA archive:" +msgstr "Vyberte SLA archiv:" #: src/slic3r/GUI/BedShapeDialog.cpp:552 msgid "Choose a file to import bed texture from (PNG/SVG):" @@ -2085,6 +2083,10 @@ msgid "Choose an STL file to import bed shape from:" msgstr "" "Vyberte STL soubor, ze kterého chcete importovat tvar tiskové podložky:" +#: src/slic3r/GUI/GalleryDialog.cpp:453 +msgid "Choose one PNG file:" +msgstr "Vyberte jeden PNG soubor:" + #: src/slic3r/GUI/GUI_App.cpp:1836 msgid "Choose one file (3MF/AMF):" msgstr "Vyberte jeden soubor (3MF/AMF):" @@ -2101,14 +2103,6 @@ msgstr "Vyberte jeden nebo více souborů (STL, OBJ):" msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Vyberte jeden nebo více souborů (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GalleryDialog.cpp:453 -msgid "Choose one PNG file:" -msgstr "Vyberte jeden PNG soubor:" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 -msgid "Choose SLA archive:" -msgstr "Vyberte SLA archiv:" - #: src/slic3r/GUI/ConfigWizard.cpp:1361 msgid "Choose the type of firmware used by your printer." msgstr "Vyberte typ firmware používaný vaší tiskárnou." @@ -2123,10 +2117,6 @@ msgstr "Kruh" msgid "Circular" msgstr "Kruhový" -#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 -msgid "Clear all" -msgstr "Vymazat vše" - #: src/slic3r/GUI/Preferences.cpp:295 msgid "Clear Undo / Redo stack on new project" msgstr "Vymazat historii operací Zpět / Vpřed" @@ -2138,6 +2128,10 @@ msgstr "" "Vymazat historii operací Zpět a Vpřed při otevírání či vytváření nového " "projektu." +#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 +msgid "Clear all" +msgstr "Vymazat vše" + #: src/slic3r/GUI/GLCanvas3D.cpp:4689 src/slic3r/GUI/GLCanvas3D.cpp:4728 msgid "Click right mouse button to open/close History" msgstr "Stisk pravého tlačítka myši pro zobrazení/skrytí Historie" @@ -2191,11 +2185,6 @@ msgstr "Zavřít" msgid "Close holes" msgstr "Uzavírání děr" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 -#: src/libslic3r/PrintConfig.cpp:3759 -msgid "Closing distance" -msgstr "Vzdálenost uzavření" - #: src/slic3r/GUI/MainFrame.cpp:232 msgid "Closing PrusaSlicer while some presets are modified." msgstr "Zavírání PrusaSliceru. Některá přednastavení jsou změněná." @@ -2204,6 +2193,11 @@ msgstr "Zavírání PrusaSliceru. Některá přednastavení jsou změněná." msgid "Closing PrusaSlicer. Current project is modified." msgstr "Zavírání PrusaSliceru. Aktuální projekt je upravený." +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 +#: src/libslic3r/PrintConfig.cpp:3759 +msgid "Closing distance" +msgstr "Vzdálenost uzavření" + #: src/libslic3r/PrintConfig.cpp:2667 msgid "Closing radius" msgstr "Poloměr uzavření" @@ -2220,6 +2214,15 @@ msgstr "Sbalit/Rozbalit postranní panel" msgid "Color" msgstr "Barva" +#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 +msgid "Color Change G-code" +msgstr "G-code pro změnu barvy" + +#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 +#: src/slic3r/GUI/GUI_Preview.cpp:957 +msgid "Color Print" +msgstr "Barevný tisk" + #: src/slic3r/GUI/GCodeViewer.cpp:3487 src/slic3r/GUI/GCodeViewer.cpp:3543 msgid "Color change" msgstr "Změna barvy" @@ -2234,10 +2237,6 @@ msgstr "Změna barvy (\"%1%\")" msgid "Color change (\"%1%\") for Extruder %2%" msgstr "Změna barvy (\"%1%\") pro Extruder %2%" -#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 -msgid "Color Change G-code" -msgstr "G-code pro změnu barvy" - #: src/libslic3r/PrintConfig.cpp:2432 msgid "Color change G-code" msgstr "G-code pro změnu barvy" @@ -2246,11 +2245,6 @@ msgstr "G-code pro změnu barvy" msgid "Color changes" msgstr "Změny barev" -#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 -#: src/slic3r/GUI/GUI_Preview.cpp:957 -msgid "Color Print" -msgstr "Barevný tisk" - #: src/libslic3r/PrintConfig.cpp:537 msgid "Colorprint height" msgstr "Výška barevného tisku" @@ -2284,12 +2278,12 @@ msgid "Comment:" msgstr "Komentář:" #: src/slic3r/GUI/MainFrame.cpp:1417 -msgid "Compare presets" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +msgid "Compare Presets" msgstr "Porovnání přednastavení" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 -msgid "Compare Presets" +msgid "Compare presets" msgstr "Porovnání přednastavení" #: src/slic3r/GUI/Tab.cpp:216 @@ -2324,14 +2318,6 @@ msgstr "Dokončení individuálních objektů" msgid "Completed" msgstr "Dokončeno" -#: src/slic3r/GUI/NotificationManager.cpp:895 -msgid "COMPLETED" -msgstr "DOKONČENO" - -#: src/libslic3r/miniz_extension.cpp:113 -msgid "compression failed" -msgstr "komprese se nezdařila" - #: src/libslic3r/PrintConfig.cpp:707 src/libslic3r/PrintConfig.cpp:1151 #: src/libslic3r/PrintConfig.cpp:2722 msgid "Concentric" @@ -2349,6 +2335,22 @@ msgstr "Průvodce &nastavením" msgid "Configuration Assistant" msgstr "Průvodce nastavení tiskárny" +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 +msgid "Configuration Snapshots" +msgstr "Zálohy konfigurace" + +#: src/slic3r/Utils/PresetUpdater.cpp:777 +msgid "" +"Configuration Updates causes a lost of preset modification.\n" +"So, check unsaved changes and save them if necessary." +msgstr "" +"Aktualizace konfigurace způsobí ztrátu změn v přednastaveních.\n" +"Zkontrolujte tedy neuložené změny a případně je uložte." + +#: src/slic3r/GUI/ConfigWizard.cpp:3039 +msgid "Configuration Wizard" +msgstr "Průvodce nastavením" + #: src/slic3r/GUI/GUI.cpp:355 msgid "" "Configuration bundle was loaded, however some configuration values were not " @@ -2390,10 +2392,6 @@ msgstr "" "uživatelských přednastavení? Pomocí nabídky Konfigurace - Zálohy " "konfigurace můžete konfigurace prohlížet a přepínat se mezi nimi." -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 -msgid "Configuration Snapshots" -msgstr "Zálohy konfigurace" - #: src/slic3r/GUI/UpdateDialogs.cpp:94 src/slic3r/GUI/UpdateDialogs.cpp:261 msgid "Configuration update" msgstr "Aktualizace nastavení" @@ -2410,18 +2408,6 @@ msgstr "Je k dispozici aktualizace konfigurace." msgid "Configuration updates" msgstr "Aktualizace nastavení" -#: src/slic3r/Utils/PresetUpdater.cpp:777 -msgid "" -"Configuration Updates causes a lost of preset modification.\n" -"So, check unsaved changes and save them if necessary." -msgstr "" -"Aktualizace konfigurace způsobí ztrátu změn v přednastaveních.\n" -"Zkontrolujte tedy neuložené změny a případně je uložte." - -#: src/slic3r/GUI/ConfigWizard.cpp:3039 -msgid "Configuration Wizard" -msgstr "Průvodce nastavením" - #: src/slic3r/GUI/FirmwareDialog.cpp:916 msgid "Confirmation" msgstr "Potvrzení" @@ -2488,12 +2474,6 @@ msgstr "Připojení k FlashAir funguje správně a nahrávání je povoleno." msgid "Connection to OctoPrint works correctly." msgstr "Připojení k OctoPrint pracuje správně." -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 -msgid "Connection to printers connected via the print host failed." -msgstr "" -"Připojení k tiskárnám připojených prostřednictvím tiskového serveru se " -"nezdařilo." - #: src/slic3r/Utils/OctoPrint.cpp:292 msgid "Connection to Prusa SL1 / SL1S works correctly." msgstr "Připojení k tiskárně Prusa SL1 /SL1S funguje správně." @@ -2506,9 +2486,11 @@ msgstr "Připojení k PrusaLinku funguje správně." msgid "Connection to Repetier works correctly." msgstr "Připojení k Repetieru funguje správně." -#: src/slic3r/GUI/DoubleSlider.cpp:1458 -msgid "continue" -msgstr "pokračovat" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 +msgid "Connection to printers connected via the print host failed." +msgstr "" +"Připojení k tiskárnám připojených prostřednictvím tiskového serveru se " +"nezdařilo." #: src/slic3r/Config/Snapshot.cpp:601 msgid "Continue" @@ -2592,25 +2574,26 @@ msgstr "Pozice chladící trubičky" msgid "Copies of the selected object" msgstr "Kopie vybraného modelu" -#: src/slic3r/GUI/GLCanvas3D.cpp:4520 +#: src/slic3r/GUI/SavePresetDialog.cpp:221 +msgctxt "PresetName" msgid "Copy" -msgstr "Kopírovat" +msgstr "Kopie" + +#: src/slic3r/GUI/AboutDialog.cpp:308 +msgid "Copy Version Info" +msgstr "Zkopírovat číslo verze" #: src/slic3r/GUI/MainFrame.cpp:1343 msgid "Copy selection to clipboard" msgstr "Kopírovat výběr do schránky" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 -msgid "Copy to clipboard" -msgstr "Kopírovat do schránky" - #: src/slic3r/GUI/SysInfoDialog.cpp:169 msgid "Copy to Clipboard" msgstr "Kopírovat do Schránky" -#: src/slic3r/GUI/AboutDialog.cpp:308 -msgid "Copy Version Info" -msgstr "Zkopírovat číslo verze" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 +msgid "Copy to clipboard" +msgstr "Kopírovat do schránky" #: src/slic3r/Utils/PresetUpdater.cpp:61 #, boost-format @@ -2759,10 +2742,6 @@ msgstr "" "trojúhelníkových sítí. Operace uzavírání mezery může snížit konečné " "rozlišení tisku, proto je vhodné udržovat rozumně nízkou hodnotu." -#: src/libslic3r/miniz_extension.cpp:117 -msgid "CRC-32 check failed" -msgstr "CRC-32 kontrola selhala" - #: src/libslic3r/PrintConfig.cpp:3682 msgid "Create pad around object and ignore the support elevation" msgstr "" @@ -2802,14 +2781,6 @@ msgstr "Ctrl + kolečko myši" msgid "Cubic" msgstr "Kubický" -#: src/slic3r/Utils/Http.cpp:91 -msgid "" -"CURL init has failed. PrusaSlicer will be unable to establish network " -"connections. See logs for additional details." -msgstr "" -"CURL init selhal. PrusaSlicer nebude schopen navázat síťová připojení. Další " -"podrobnosti najdete v logu." - #: src/slic3r/GUI/wxExtensions.cpp:645 #, c-format, boost-format msgid "Current mode is %s" @@ -2927,10 +2898,6 @@ msgstr "Mrtvá zóna:" msgid "Decimate ratio" msgstr "Procento decimace" -#: src/libslic3r/miniz_extension.cpp:111 -msgid "decompression failed or archive is corrupted" -msgstr "dekomprese selhala nebo je archiv poškozen" - #: src/slic3r/GUI/Plater.cpp:5517 msgid "Decrease Instances" msgstr "Odebrání Instancí" @@ -2941,16 +2908,9 @@ msgstr "Odebrání Instancí" msgid "Default" msgstr "Výchozí" -#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 -#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 -msgid "default" -msgstr "výchozí" +#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 +msgid "Default SLA material profile" +msgstr "Výchozí profil pro SLA materiál" #: src/libslic3r/PrintConfig.cpp:1072 msgid "" @@ -2966,18 +2926,10 @@ msgstr "" msgid "Default color" msgstr "Výchozí barva" -#: src/slic3r/GUI/GCodeViewer.cpp:3388 -msgid "default color" -msgstr "výchozí barva" - #: src/libslic3r/PrintConfig.cpp:837 msgid "Default extrusion width" msgstr "Výchozí šířka extruze" -#: src/slic3r/GUI/Tab.cpp:1386 -msgid "default filament profile" -msgstr "výchozí profil filamentu" - #: src/libslic3r/PrintConfig.cpp:622 msgid "Default filament profile" msgstr "Výchozí profil filamentu" @@ -2991,10 +2943,6 @@ msgstr "" "Výchozí materiálový profil spojený se současným profilem tiskárny. Při " "výběru současného profilu tiskárny se aktivuje tento materiálový profil." -#: src/slic3r/GUI/Tab.cpp:1383 -msgid "default print profile" -msgstr "výchozí tiskový profil" - #: src/libslic3r/PrintConfig.cpp:629 msgid "Default print profile" msgstr "Výchozí tiskový profil" @@ -3009,22 +2957,6 @@ msgstr "" "Výchozí tiskový profil spojený se současným profilem tiskárny. Při výběru " "současného profilu tiskárny se aktivuje tento tiskový profil." -#: src/slic3r/GUI/Tab.cpp:1400 -msgid "default SLA material profile" -msgstr "výchozí profil pro SLA materiál" - -#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 -msgid "Default SLA material profile" -msgstr "Výchozí profil pro SLA materiál" - -#: src/slic3r/GUI/Tab.cpp:1404 -msgid "default SLA print profile" -msgstr "výchozí SLA tiskový profil" - -#: src/slic3r/GUI/Field.cpp:190 -msgid "default value" -msgstr "výchozí hodnota" - #: src/slic3r/GUI/ConfigWizard.cpp:1177 msgid "Define a custom printer profile" msgstr "Vytvořit vlastní tiskový profil" @@ -3045,10 +2977,6 @@ msgstr "" msgid "Delay after unloading" msgstr "Zpoždění po vyjmutí" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "delete" -msgstr "smazat" - #: src/slic3r/GUI/GalleryDialog.cpp:118 src/slic3r/GUI/GalleryDialog.cpp:508 #: src/slic3r/GUI/GLCanvas3D.cpp:4480 src/slic3r/GUI/GUI_Factories.cpp:444 #: src/slic3r/GUI/Tab.cpp:3734 @@ -3059,11 +2987,6 @@ msgstr "Smazat" msgid "Delete &All" msgstr "Sm&azat Vše" -#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 -msgid "Delete all" -msgstr "Smazat vše" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1901 msgid "Delete All Instances from Object" msgstr "Smazat všechny instance objektu" @@ -3072,22 +2995,6 @@ msgstr "Smazat všechny instance objektu" msgid "Delete All Objects" msgstr "Smazat všechny objekty" -#: src/slic3r/GUI/DoubleSlider.cpp:2012 -msgid "Delete color change" -msgstr "Smazat změnu barvy" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 -msgid "Delete color change marker for current layer" -msgstr "Odebrat značku změny barvy pro aktuální vrstvu" - -#: src/slic3r/GUI/DoubleSlider.cpp:2015 -msgid "Delete custom G-code" -msgstr "Smazat vlastní G-code" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 -msgid "Delete drainage hole" -msgstr "Odstranění odtokového otvoru" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1917 msgid "Delete Height Range" msgstr "Odstranění Rozsahu vrstev" @@ -3100,32 +3007,15 @@ msgstr "Smazání Instance" msgid "Delete Object" msgstr "Smazat Objekt" -#: src/slic3r/GUI/GalleryDialog.cpp:118 -msgid "Delete one or more custom shape. You can't delete system shapes" -msgstr "" -"Odstranění jednoho nebo více vlastních tvarů. Systémové tvary nelze odstranit" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:105 #, c-format, boost-format msgid "Delete Option %s" msgstr "Odebrání parametru %s" -#: src/slic3r/GUI/DoubleSlider.cpp:2014 -msgid "Delete pause print" -msgstr "Odebrat pozastavení tisku" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:733 -msgid "Delete physical printer" -msgstr "Odstranit fyzickou tiskárnu" - #: src/slic3r/GUI/PresetComboBoxes.cpp:340 msgid "Delete Physical Printer" msgstr "Odstranit fyzickou tiskárnu" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 -msgid "Delete selected" -msgstr "Smazat vybrané" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2934 msgid "Delete Selected" msgstr "Smazání vybraných" @@ -3146,6 +3036,44 @@ msgstr "Smazat Nastavení" msgid "Delete Subobject" msgstr "Smazání dílčího objektu" +#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 +#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 +msgid "Delete all" +msgstr "Smazat vše" + +#: src/slic3r/GUI/DoubleSlider.cpp:2012 +msgid "Delete color change" +msgstr "Smazat změnu barvy" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 +msgid "Delete color change marker for current layer" +msgstr "Odebrat značku změny barvy pro aktuální vrstvu" + +#: src/slic3r/GUI/DoubleSlider.cpp:2015 +msgid "Delete custom G-code" +msgstr "Smazat vlastní G-code" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 +msgid "Delete drainage hole" +msgstr "Odstranění odtokového otvoru" + +#: src/slic3r/GUI/GalleryDialog.cpp:118 +msgid "Delete one or more custom shape. You can't delete system shapes" +msgstr "" +"Odstranění jednoho nebo více vlastních tvarů. Systémové tvary nelze odstranit" + +#: src/slic3r/GUI/DoubleSlider.cpp:2014 +msgid "Delete pause print" +msgstr "Odebrat pozastavení tisku" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:733 +msgid "Delete physical printer" +msgstr "Odstranit fyzickou tiskárnu" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 +msgid "Delete selected" +msgstr "Smazat vybrané" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:522 msgid "Delete support point" msgstr "Odebrání podpěrného bodu" @@ -3222,10 +3150,6 @@ msgstr "Odznačit všechny objekty" msgid "Desktop Integration" msgstr "Integrace do systému" -#: src/slic3r/GUI/NotificationManager.hpp:768 -msgid "Desktop integration failed." -msgstr "Integrace do systému selhala." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:466 msgid "" "Desktop Integration sets this binary to be searchable by the system.\n" @@ -3237,6 +3161,10 @@ msgstr "" "\n" "Pro pokračování stiskněte tlačítko \"Provést\"." +#: src/slic3r/GUI/NotificationManager.hpp:768 +msgid "Desktop integration failed." +msgstr "Integrace do systému selhala." + #: src/slic3r/GUI/NotificationManager.hpp:766 msgid "Desktop integration was successful." msgstr "Integrace do systému proběhla úspěšně." @@ -3330,10 +3258,6 @@ msgstr "" "Vrstvy a perimetry a upravte hodnoty v pravém panelu. Více informací najdete " "v dokumentaci." -#: src/slic3r/GUI/Plater.cpp:3652 -msgid "differs from the original file" -msgstr "liší se od původního souboru" - #: src/libslic3r/PrintConfig.cpp:2231 msgid "Direction" msgstr "Směr" @@ -3504,17 +3428,13 @@ msgstr "Chcete uložit změny do \"%1%\"?" msgid "Do you want to save your manually edited support points?" msgstr "Chcete uložit ručně upravené podpěrné body?" -#: src/slic3r/GUI/ConfigWizard.cpp:2463 -msgid "Do you want to select default filaments for these FFF printer models?" -msgstr "Chcete pro tyto modely FFF tiskáren vybrat výchozí filamenty?" - #: src/slic3r/GUI/ConfigWizard.cpp:2481 msgid "Do you want to select default SLA materials for these printer models?" msgstr "Chcete pro tyto modely tiskáren vybrat výchozí SLA materiály?" -#: src/slic3r/GUI/Plater.cpp:5202 -msgid "does not contain valid gcode." -msgstr "neobsahuje platný G-code." +#: src/slic3r/GUI/ConfigWizard.cpp:2463 +msgid "Do you want to select default filaments for these FFF printer models?" +msgstr "Chcete pro tyto modely FFF tiskáren vybrat výchozí filamenty?" #: src/libslic3r/PrintConfig.cpp:4353 msgid "Don't arrange" @@ -3609,10 +3529,36 @@ msgstr "Dynamic" msgid "E&xport" msgstr "E&xportovat" +#: src/slic3r/GUI/NotificationManager.cpp:885 +msgid "ERROR" +msgstr "CHYBA" + +#: src/slic3r/GUI/NotificationManager.cpp:1447 +#: src/slic3r/GUI/NotificationManager.cpp:1454 +#: src/slic3r/GUI/NotificationManager.cpp:1470 +#: src/slic3r/GUI/NotificationManager.cpp:1476 +#: src/slic3r/GUI/NotificationManager.cpp:1547 +msgid "ERROR:" +msgstr "CHYBA:" + +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 +msgid "" +"ERROR: Please close all manipulators available from the left toolbar first" +msgstr "" +"CHYBA: Nejprve zavřete všechny manipulátory dostupné z levého panelu nástrojů" + +#: src/slic3r/GUI/Jobs/Job.cpp:111 +msgid "ERROR: not enough resources to execute a new job." +msgstr "CHYBA: nedostatek prostředků ke spuštění nové úlohy." + #: src/slic3r/GUI/ImGuiWrapper.cpp:527 msgid "Edit" msgstr "Upravit" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 +msgid "Edit Height Range" +msgstr "Úprava Rozsahu vrstev" + #: src/slic3r/GUI/DoubleSlider.cpp:2004 msgid "Edit color" msgstr "Upravit barvu" @@ -3626,10 +3572,6 @@ msgstr "" msgid "Edit custom G-code" msgstr "Upravit vlastní G-code" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 -msgid "Edit Height Range" -msgstr "Úprava Rozsahu vrstev" - #: src/slic3r/GUI/DoubleSlider.cpp:2005 msgid "Edit pause print message" msgstr "Upravit zprávu při pozastavení tisku" @@ -3662,10 +3604,6 @@ msgstr "Podporovaná vlastní vektorizace:" msgid "Ejec&t SD Card / Flash Drive" msgstr "Vysunou&t SD kartu / Flash disk" -#: src/slic3r/GUI/NotificationManager.cpp:701 -msgid "Eject drive" -msgstr "Vysunout úložiště" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:91 msgid "Eject SD card / Flash drive" msgstr "Vysunout SD kartu / Flash disk" @@ -3674,6 +3612,10 @@ msgstr "Vysunout SD kartu / Flash disk" 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/slic3r/GUI/NotificationManager.cpp:701 +msgid "Eject drive" +msgstr "Vysunout úložiště" + #: src/slic3r/GUI/Plater.cpp:2202 #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." @@ -3970,9 +3912,9 @@ msgstr "" msgid "Error" msgstr "Chyba" -#: src/slic3r/GUI/NotificationManager.cpp:885 -msgid "ERROR" -msgstr "CHYBA" +#: src/slic3r/GUI/PrintHostDialogs.cpp:253 +msgid "Error Message" +msgstr "Chybová hláška" #: src/slic3r/GUI/FirmwareDialog.cpp:650 #, c-format, boost-format @@ -3991,10 +3933,6 @@ msgstr "Chyba při nahrazení" msgid "Error loading shaders" msgstr "Chyba při načítání shaderů" -#: src/slic3r/GUI/PrintHostDialogs.cpp:253 -msgid "Error Message" -msgstr "Chybová hláška" - #: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " @@ -4033,29 +3971,11 @@ msgstr "Chyba!" msgid "Error! Invalid model" msgstr "Chyba! Neplatný model" -#: src/slic3r/GUI/NotificationManager.cpp:1447 -#: src/slic3r/GUI/NotificationManager.cpp:1454 -#: src/slic3r/GUI/NotificationManager.cpp:1470 -#: src/slic3r/GUI/NotificationManager.cpp:1476 -#: src/slic3r/GUI/NotificationManager.cpp:1547 -msgid "ERROR:" -msgstr "CHYBA:" - #: src/slic3r/GUI/FirmwareDialog.cpp:652 #, c-format, boost-format msgid "Error: %s" msgstr "Chyba: %s" -#: src/slic3r/GUI/Jobs/Job.cpp:111 -msgid "ERROR: not enough resources to execute a new job." -msgstr "CHYBA: nedostatek prostředků ke spuštění nové úlohy." - -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 -msgid "" -"ERROR: Please close all manipulators available from the left toolbar first" -msgstr "" -"CHYBA: Nejprve zavřete všechny manipulátory dostupné z levého panelu nástrojů" - #: src/slic3r/GUI/Plater.cpp:301 src/slic3r/GUI/Plater.cpp:1339 #: src/slic3r/GUI/Plater.cpp:1426 msgid "Estimated printing time" @@ -4077,15 +3997,6 @@ msgstr "Akce" msgid "Everywhere" msgstr "Všude" -#: src/slic3r/GUI/PresetHints.cpp:59 -#, boost-format -msgid "except for the first %1% layers." -msgstr "s výjimkou prvních %1% vrstev." - -#: src/slic3r/GUI/PresetHints.cpp:61 -msgid "except for the first layer." -msgstr "vyjma první vrstvy." - #: src/libslic3r/Print.cpp:575 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" @@ -4132,14 +4043,14 @@ msgstr "" msgid "Expert" msgstr "Expert" -#: src/slic3r/GUI/ConfigWizard.cpp:1281 -msgid "Expert mode" -msgstr "Expertní režim" - #: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Expert View Mode" msgstr "Režim Expert" +#: src/slic3r/GUI/ConfigWizard.cpp:1281 +msgid "Expert mode" +msgstr "Expertní režim" + #: src/slic3r/GUI/Plater.cpp:6492 msgid "Export" msgstr "Exportovat" @@ -4160,14 +4071,6 @@ msgstr "Exportovat &Trasy extruderu jako OBJ" msgid "Export 3MF" msgstr "Exportovat 3MF" -#: src/slic3r/GUI/MainFrame.cpp:1260 -msgid "Export all presets including physical printers to file" -msgstr "Exportovat do souboru všechna přednastavení včetně fyzických tiskáren" - -#: src/slic3r/GUI/MainFrame.cpp:1257 -msgid "Export all presets to file" -msgstr "Exportovat všechna přednastavení do souboru" - #: src/libslic3r/PrintConfig.cpp:4261 msgid "Export AMF" msgstr "Exportovat AMF" @@ -4176,14 +4079,6 @@ msgstr "Exportovat AMF" msgid "Export AMF file:" msgstr "Exportovat AMF soubor:" -#: src/slic3r/GUI/GUI_Factories.cpp:715 -msgid "Export as STL" -msgstr "Exportovat jako STL" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:89 -msgid "Export config" -msgstr "Exportovat konfiguraci" - #: src/slic3r/GUI/MainFrame.cpp:1257 msgid "Export Config &Bundle" msgstr "Exportovat Konfigurační &Balík" @@ -4192,6 +4087,63 @@ msgstr "Exportovat Konfigurační &Balík" msgid "Export Config Bundle With Physical Printers" msgstr "Exportovat Konfigurační balík včetně fyzických tiskáren" +#: src/slic3r/GUI/NotificationManager.cpp:1113 +msgid "Export G-Code." +msgstr "Export G-codu." + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 +#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +msgid "Export G-code" +msgstr "Exportovat G-code" + +#: src/slic3r/GUI/MainFrame.cpp:1235 +msgid "Export G-code to SD Card / Flash Drive" +msgstr "Exportovat G-code na SD kartu / Flash disk" + +#: src/libslic3r/PrintConfig.cpp:4238 +msgid "Export OBJ" +msgstr "Exportovat OBJ" + +#: src/slic3r/GUI/Plater.cpp:2865 +msgid "Export OBJ file:" +msgstr "Exportovat OBJ soubor:" + +#: src/slic3r/GUI/MainFrame.cpp:1239 +msgid "Export Plate as &STL" +msgstr "Exportovat Plochu jako &STL" + +#: src/slic3r/GUI/MainFrame.cpp:1242 +msgid "Export Plate as STL &Including Supports" +msgstr "Exportovat T&iskovou plochu včetně podpěr jako STL" + +#: src/libslic3r/PrintConfig.cpp:4250 +msgid "Export SLA" +msgstr "Exportovat SLA" + +#: src/libslic3r/PrintConfig.cpp:4266 +msgid "Export STL" +msgstr "Exportovat STL" + +#: src/slic3r/GUI/Plater.cpp:2846 +msgid "Export STL file:" +msgstr "Exportovat STL soubor:" + +#: src/slic3r/GUI/MainFrame.cpp:1260 +msgid "Export all presets including physical printers to file" +msgstr "Exportovat do souboru všechna přednastavení včetně fyzických tiskáren" + +#: src/slic3r/GUI/MainFrame.cpp:1257 +msgid "Export all presets to file" +msgstr "Exportovat všechna přednastavení do souboru" + +#: src/slic3r/GUI/GUI_Factories.cpp:715 +msgid "Export as STL" +msgstr "Exportovat jako STL" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:89 +msgid "Export config" +msgstr "Exportovat konfiguraci" + #: src/slic3r/GUI/MainFrame.cpp:1254 msgid "Export current configuration to file" msgstr "Exportovat současnou konfiguraci do souboru" @@ -4217,55 +4169,14 @@ msgid "" "Export full pathnames of models and parts sources into 3mf and amf files" msgstr "Exportovat úplné zdrojové cesty modelů a dílů do souborů 3mf a amf" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 -msgid "Export G-code" -msgstr "Exportovat G-code" - -#: src/slic3r/GUI/MainFrame.cpp:1235 -msgid "Export G-code to SD Card / Flash Drive" -msgstr "Exportovat G-code na SD kartu / Flash disk" - -#: src/slic3r/GUI/NotificationManager.cpp:1113 -msgid "Export G-Code." -msgstr "Export G-codu." - -#: src/libslic3r/PrintConfig.cpp:4238 -msgid "Export OBJ" -msgstr "Exportovat OBJ" - -#: src/slic3r/GUI/Plater.cpp:2865 -msgid "Export OBJ file:" -msgstr "Exportovat OBJ soubor:" - #: src/slic3r/Utils/FixModelByWin10.cpp:379 msgid "Export of a temporary 3mf file failed" msgstr "Export dočasného 3MF souboru selhalo" -#: src/slic3r/GUI/MainFrame.cpp:1239 -msgid "Export Plate as &STL" -msgstr "Exportovat Plochu jako &STL" - -#: src/slic3r/GUI/MainFrame.cpp:1242 -msgid "Export Plate as STL &Including Supports" -msgstr "Exportovat T&iskovou plochu včetně podpěr jako STL" - -#: src/libslic3r/PrintConfig.cpp:4250 -msgid "Export SLA" -msgstr "Exportovat SLA" - #: src/slic3r/GUI/Preferences.cpp:148 msgid "Export sources full pathnames to 3mf and amf" msgstr "Exportovat absolutní cesty k 3mf a amf souborům" -#: src/libslic3r/PrintConfig.cpp:4266 -msgid "Export STL" -msgstr "Exportovat STL" - -#: src/slic3r/GUI/Plater.cpp:2846 -msgid "Export STL file:" -msgstr "Exportovat STL soubor:" - #: src/libslic3r/PrintConfig.cpp:4257 msgid "Export the model(s) as 3MF." msgstr "Exportovat model(y) jako 3MF." @@ -4294,6 +4205,10 @@ msgstr "Exportovat trasy extruderu jako OBJ" msgid "Export." msgstr "Export." +#: src/libslic3r/Print.cpp:863 +msgid "Exporting G-code" +msgstr "Exportování souboru G-code" + #: src/slic3r/GUI/MainFrame.cpp:1809 msgid "Exporting configuration bundle" msgstr "Exportování konfiguračního balíku" @@ -4302,10 +4217,6 @@ msgstr "Exportování konfiguračního balíku" msgid "Exporting finished." msgstr "Exportování dokončeno." -#: src/libslic3r/Print.cpp:863 -msgid "Exporting G-code" -msgstr "Exportování souboru G-code" - #: src/slic3r/Utils/FixModelByWin10.cpp:221 #: src/slic3r/Utils/FixModelByWin10.cpp:362 msgid "Exporting source model" @@ -4332,10 +4243,6 @@ msgstr "Doba osvitu" msgid "External perimeter" msgstr "Vnější perimetr" -#: src/slic3r/GUI/PresetHints.cpp:170 -msgid "external perimeters" -msgstr "vnější perimetry" - #: src/libslic3r/PrintConfig.cpp:727 src/libslic3r/PrintConfig.cpp:739 msgid "External perimeters" msgstr "Vnější perimetry" @@ -4381,6 +4288,10 @@ msgstr "Extruder %d" msgid "Extruder (tool) is changed to Extruder \"%1%\"" msgstr "Extruder (nástroj) se změní na Extruder \"%1%\"" +#: src/libslic3r/PrintConfig.cpp:804 +msgid "Extruder Color" +msgstr "Barva extruderu" + #: src/slic3r/GUI/WipeTowerDialog.cpp:300 msgid "Extruder changed to" msgstr "Extruder změněn na" @@ -4389,10 +4300,6 @@ msgstr "Extruder změněn na" msgid "Extruder clearance" msgstr "Kolizní oblast extruderu" -#: src/libslic3r/PrintConfig.cpp:804 -msgid "Extruder Color" -msgstr "Barva extruderu" - #: src/libslic3r/PrintConfig.cpp:811 msgid "Extruder offset" msgstr "Odsazení extruderu" @@ -4414,22 +4321,10 @@ msgstr "Počet extruderů" msgid "Extrusion" msgstr "Extruze" -#: src/libslic3r/PrintConfig.cpp:821 -msgid "Extrusion axis" -msgstr "Osa extruderu" - -#: src/libslic3r/PrintConfig.cpp:827 -msgid "Extrusion multiplier" -msgstr "Násobič extruze" - #: src/slic3r/GUI/ConfigWizard.cpp:1567 msgid "Extrusion Temperature:" msgstr "Teplota extruze:" -#: src/slic3r/GUI/Tab.cpp:1650 -msgid "Extrusion width" -msgstr "Šířka extruze" - #: src/slic3r/GUI/GUI_Factories.cpp:134 src/libslic3r/PrintConfig.cpp:728 #: src/libslic3r/PrintConfig.cpp:838 src/libslic3r/PrintConfig.cpp:1195 #: src/libslic3r/PrintConfig.cpp:1455 src/libslic3r/PrintConfig.cpp:1956 @@ -4438,6 +4333,22 @@ msgstr "Šířka extruze" msgid "Extrusion Width" msgstr "Šíře extruze" +#: src/libslic3r/PrintConfig.cpp:821 +msgid "Extrusion axis" +msgstr "Osa extruderu" + +#: src/libslic3r/PrintConfig.cpp:827 +msgid "Extrusion multiplier" +msgstr "Násobič extruze" + +#: src/slic3r/GUI/Tab.cpp:1650 +msgid "Extrusion width" +msgstr "Šířka extruze" + +#: src/slic3r/GUI/ConfigWizard.cpp:2097 +msgid "FFF Technology Printers" +msgstr "Tiskárny technologie FFF" + #: src/slic3r/GUI/Plater.cpp:213 msgid "Facets" msgstr "Facety" @@ -4446,10 +4357,6 @@ msgstr "Facety" msgid "Faded layers" msgstr "Vrstvy počátečního osvitu" -#: src/libslic3r/miniz_extension.cpp:103 -msgid "failed finding central directory" -msgstr "selhalo nalezení kořenového adresáře" - #: src/slic3r/GUI/Plater.cpp:2516 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." @@ -4471,6 +4378,10 @@ msgstr "Aktivace konfiguračního snapshotu se nezdařila." msgid "Failed to drill some holes into the model" msgstr "Některé otvory se do modelu nepodařilo se vyvrtat" +#: src/slic3r/GUI/GCodeViewer.cpp:3296 +msgid "Fan Speed (%)" +msgstr "Rychlost ventilátoru (%)" + #: src/slic3r/GUI/Tab.cpp:2007 msgid "Fan settings" msgstr "Nastavení ventilátoru" @@ -4479,10 +4390,6 @@ msgstr "Nastavení ventilátoru" msgid "Fan speed" msgstr "Rychlost ventilátoru" -#: src/slic3r/GUI/GCodeViewer.cpp:3296 -msgid "Fan Speed (%)" -msgstr "Rychlost ventilátoru (%)" - #: src/slic3r/GUI/PresetHints.cpp:55 #, boost-format msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%." @@ -4538,19 +4445,41 @@ msgstr "Typ" msgid "Feature types" msgstr "Typy extrudování" -#: src/slic3r/GUI/ConfigWizard.cpp:2097 -msgid "FFF Technology Printers" -msgstr "Tiskárny technologie FFF" - #: src/slic3r/GUI/GCodeViewer.cpp:3696 src/slic3r/GUI/GCodeViewer.cpp:3722 #: src/slic3r/GUI/GUI.cpp:339 src/slic3r/GUI/Plater.cpp:818 #: src/slic3r/GUI/Tab.cpp:1962 src/slic3r/GUI/Tab.cpp:1963 msgid "Filament" msgstr "Filament" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 -msgid "filament" -msgstr "filament" +#: src/slic3r/GUI/ConfigWizard.cpp:1489 +msgid "Filament Diameter:" +msgstr "Průměr filamentu:" + +#: src/libslic3r/GCode.cpp:725 +msgid "Filament End G-code" +msgstr "Filament Konec G-code" + +#: src/slic3r/GUI/Tab.cpp:1861 +msgid "Filament Overrides" +msgstr "Přepsání globálních hodnot" + +#: src/slic3r/GUI/ConfigWizard.cpp:2912 +msgid "Filament Profiles Selection" +msgstr "Výběr Filamentových Profilů" + +#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 +#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 +#: src/slic3r/GUI/Tab.hpp:448 +msgid "Filament Settings" +msgstr "Nastavení filamentu" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 +msgid "Filament Settings Tab" +msgstr "Panel Nastavení filamentu" + +#: src/libslic3r/GCode.cpp:718 +msgid "Filament Start G-code" +msgstr "Filament Začátek G-code" #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Filament and Nozzle Diameters" @@ -4561,14 +4490,6 @@ msgstr "Průměr filamentu a trysky" msgid "Filament at extruder %1%" msgstr "Filament v extruderu %1%" -#: src/slic3r/GUI/ConfigWizard.cpp:1489 -msgid "Filament Diameter:" -msgstr "Průměr filamentu:" - -#: src/libslic3r/GCode.cpp:725 -msgid "Filament End G-code" -msgstr "Filament Konec G-code" - #: src/libslic3r/PrintConfig.cpp:936 msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " @@ -4585,36 +4506,14 @@ msgstr "Doba zavádění filamentu" msgid "Filament notes" msgstr "Poznámky k filamentu" -#: src/slic3r/GUI/Tab.cpp:1861 -msgid "Filament Overrides" -msgstr "Přepsání globálních hodnot" - #: src/libslic3r/PrintConfig.cpp:1920 msgid "Filament parking position" msgstr "Parkovací pozice filamentu" -#: src/slic3r/GUI/ConfigWizard.cpp:2912 -msgid "Filament Profiles Selection" -msgstr "Výběr Filamentových Profilů" - #: src/slic3r/GUI/Tab.cpp:2024 msgid "Filament properties" msgstr "Vlastnosti filamentu" -#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 -#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 -msgid "Filament Settings" -msgstr "Nastavení filamentu" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 -msgid "Filament Settings Tab" -msgstr "Panel Nastavení filamentu" - -#: src/libslic3r/GCode.cpp:718 -msgid "Filament Start G-code" -msgstr "Filament Začátek G-code" - #: src/libslic3r/PrintConfig.cpp:1011 msgid "Filament type" msgstr "Typ filamentu" @@ -4623,58 +4522,18 @@ msgstr "Typ filamentu" msgid "Filament unload time" msgstr "Doba vysouvání filamentu" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 -msgid "filaments" -msgstr "filamenty" - #: src/slic3r/GUI/ConfigWizard.cpp:752 src/slic3r/GUI/ConfigWizard.cpp:2043 #: src/slic3r/GUI/ConfigWizard.cpp:2912 msgid "Filaments" msgstr "Filamenty" -#: src/libslic3r/miniz_extension.cpp:131 -msgid "file close failed" -msgstr "zavření souboru selhalo" - -#: src/libslic3r/miniz_extension.cpp:125 -msgid "file create failed" -msgstr "vytvoření souboru selhalo" - -#: src/slic3r/GUI/Plater.cpp:3529 -msgid "File for the replace wasn't selected" -msgstr "Soubor pro nahrazení nebyl vybrán" - #: src/slic3r/GUI/MainFrame.cpp:1626 msgid "File Not Found" msgstr "Soubor nenalezen" -#: src/libslic3r/miniz_extension.cpp:145 -msgid "file not found" -msgstr "soubor nenalezen" - -#: src/libslic3r/miniz_extension.cpp:123 -msgid "file open failed" -msgstr "otevření souboru selhalo" - -#: src/libslic3r/miniz_extension.cpp:129 -msgid "file read failed" -msgstr "čtení souboru se nezdařilo" - -#: src/libslic3r/miniz_extension.cpp:133 -msgid "file seek failed" -msgstr "hledání souboru selhalo" - -#: src/libslic3r/miniz_extension.cpp:135 -msgid "file stat failed" -msgstr "soubor stat selhal" - -#: src/libslic3r/miniz_extension.cpp:95 -msgid "file too large" -msgstr "soubor je příliš velký" - -#: src/libslic3r/miniz_extension.cpp:127 -msgid "file write failed" -msgstr "zápis souboru se nezdařil" +#: src/slic3r/GUI/Plater.cpp:3529 +msgid "File for the replace wasn't selected" +msgstr "Soubor pro nahrazení nebyl vybrán" #: src/slic3r/GUI/PrintHostDialogs.cpp:252 msgid "Filename" @@ -4752,14 +4611,6 @@ msgstr "Dokončeno" msgid "Firmware" msgstr "Firmware" -#: src/slic3r/GUI/FirmwareDialog.cpp:787 -msgid "Firmware flasher" -msgstr "Aktualizace firmware" - -#: src/slic3r/GUI/FirmwareDialog.cpp:812 -msgid "Firmware image:" -msgstr "Soubor s firmware:" - #: src/slic3r/GUI/Tab.cpp:3007 msgid "Firmware Retraction" msgstr "Firmware Retrakce" @@ -4768,6 +4619,14 @@ msgstr "Firmware Retrakce" msgid "Firmware Type" msgstr "Typ firmware" +#: src/slic3r/GUI/FirmwareDialog.cpp:787 +msgid "Firmware flasher" +msgstr "Aktualizace firmware" + +#: src/slic3r/GUI/FirmwareDialog.cpp:812 +msgid "Firmware image:" +msgstr "Soubor s firmware:" + #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:116 msgid "First color" msgstr "První barva" @@ -4876,10 +4735,6 @@ msgstr "Průtok" msgid "Flow rate" msgstr "Průtok" -#: src/slic3r/GUI/PresetHints.cpp:188 -msgid "flow rate is maximized" -msgstr "průtok je maximalizován" - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:670 #, boost-format msgid "" @@ -4955,15 +4810,6 @@ msgstr "" msgid "For support enforcers only" msgstr "Pouze pro vynucené podpěry" -#. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4266 -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:142 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -5018,10 +4864,6 @@ msgstr "Nalezená vyhrazená klíčová slova v" msgid "From" msgstr "Předchozí extruder" -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "from" -msgstr "z" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1949 msgid "From Object List You can't delete the last solid part from object." msgstr "Ze seznamu objektů nemůžete smazat poslední část objektu." @@ -5038,10 +4880,6 @@ msgstr "Pohled zepředu" msgid "Full fan speed at layer" msgstr "Maximální otáčky ventilátoru ve vrstvě" -#: src/slic3r/GUI/Tab.cpp:1412 -msgid "full profile name" -msgstr "celé jméno profilu" - #: src/slic3r/GUI/MainFrame.cpp:1435 msgid "Fullscreen" msgstr "Fullscreen" @@ -5056,6 +4894,12 @@ msgstr "" "Věděli jste, že PrusaSlicer můžete přepnout do režimu celé obrazovky? " "Použijte klávesovou zkratku F11." +#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 +#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 +#: src/libslic3r/PrintConfig.cpp:1286 +msgid "Fuzzy Skin" +msgstr "Členitý povrch" + #: resources/data/hints.ini: [hint:Fuzzy skin] msgid "" "Fuzzy skin\n" @@ -5068,12 +4912,6 @@ msgstr "" "vytvořit texturu připomínající hrubou látku? Pomocí modifikátorů můžete také " "aplikovat členitý povrch pouze na část modelu." -#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 -#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 -#: src/libslic3r/PrintConfig.cpp:1286 -msgid "Fuzzy Skin" -msgstr "Členitý povrch" - #: src/slic3r/GUI/Tab.cpp:1500 msgid "Fuzzy skin (experimental)" msgstr "Členitý povrch (experimentální)" @@ -5090,10 +4928,6 @@ msgstr "Tloušťka členitého povrchu" msgid "Fuzzy skin type." msgstr "Typ členitého povrchu." -#: src/libslic3r/PrintConfig.cpp:1057 -msgid "g" -msgstr "g" - #: src/slic3r/GUI/MainFrame.cpp:1661 msgid "G-code" msgstr "G-code" @@ -5135,13 +4969,13 @@ msgstr "Náhledy G-codu" msgid "G-code viewer" msgstr "Prohlížeč G-codu" -#: src/libslic3r/PrintConfig.cpp:1006 -msgid "g/cm³" -msgstr "g/cm³" +#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 +msgid "GNU Affero General Public License, version 3" +msgstr "GNU Affero General Public License, verze 3" -#: src/libslic3r/PrintConfig.cpp:3288 -msgid "g/ml" -msgstr "g/ml" +#: src/slic3r/GUI/Preferences.cpp:343 +msgid "GUI" +msgstr "GUI" #: src/slic3r/GUI/GUI_Factories.cpp:471 msgid "Gallery" @@ -5193,10 +5027,6 @@ msgstr "Generovat podpěry" msgid "Generate supports for the models" msgstr "Generovat podpěry modelů" -#: src/slic3r/GUI/Plater.cpp:4107 -msgid "generated warnings" -msgstr "generovaná varování" - #: src/libslic3r/Print.cpp:867 msgid "Generating G-code" msgstr "Generování G-code" @@ -5241,10 +5071,6 @@ msgstr "Generování vrcholového bufferu" msgid "Generic" msgstr "Obecný" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 -msgid "Gizmo cut" -msgstr "Gizmo řez" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:155 msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM malování pozice švu" @@ -5253,14 +5079,6 @@ msgstr "Gizmo FDM malování pozice švu" msgid "Gizmo FDM paint-on supports" msgstr "Gizmo FDM malování podpěr" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 -msgid "Gizmo move" -msgstr "Gizmo posuv" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 -msgid "Gizmo move: Press to snap by 1mm" -msgstr "Gizmo posuvu: Stiskni pro 1mm krok" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:156 msgid "Gizmo Multi Material painting" msgstr "Gizmo Multimateriálového malování" @@ -5269,6 +5087,26 @@ msgstr "Gizmo Multimateriálového malování" msgid "Gizmo Place face on bed" msgstr "Gizmo Umístit plochou na podložku" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 +msgid "Gizmo SLA hollow" +msgstr "Gizmo SLA dutina" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 +msgid "Gizmo SLA support points" +msgstr "Gizmo SLA podpěrné body" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 +msgid "Gizmo cut" +msgstr "Gizmo řez" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 +msgid "Gizmo move" +msgstr "Gizmo posuv" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 +msgid "Gizmo move: Press to snap by 1mm" +msgstr "Gizmo posuvu: Stiskni pro 1mm krok" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:149 msgid "Gizmo rotate" msgstr "Gizmo rotace" @@ -5301,14 +5139,6 @@ msgstr "Gizmo měřítko: Stiskni pro 5% krok" msgid "Gizmo scale: Scale selection to fit print volume" msgstr "Gizmo měřítko: Vyplnit tiskový objem aktivním výběrem modelů" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 -msgid "Gizmo SLA hollow" -msgstr "Gizmo SLA dutina" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 -msgid "Gizmo SLA support points" -msgstr "Gizmo SLA podpěrné body" - #: src/slic3r/GUI/GLCanvas3D.cpp:2557 #: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:560 msgid "Gizmo-Move" @@ -5331,10 +5161,6 @@ msgstr "Gizmo-Měřítko" msgid "Gizmos" msgstr "Gizma" -#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 -msgid "GNU Affero General Public License, version 3" -msgstr "GNU Affero General Public License, verze 3" - #: src/slic3r/GUI/ConfigWizard.cpp:1486 msgid "" "Good precision is required, so use a caliper and do multiple measurements " @@ -5355,14 +5181,36 @@ msgstr "Skupina" msgid "Group manipulation" msgstr "Manipulace se skupinou" -#: src/slic3r/GUI/Preferences.cpp:343 -msgid "GUI" -msgstr "GUI" - #: src/libslic3r/PrintConfig.cpp:1154 msgid "Gyroid" msgstr "Gyroid" +#: src/libslic3r/PrintConfig.cpp:352 +msgid "HTTP digest" +msgstr "HTTP digest" + +#: src/slic3r/Utils/Repetier.cpp:246 +#, boost-format +msgid "" +"HTTP status: %1%\n" +"Message body: \"%2%\"" +msgstr "" +"HTTP stavový kód: %1%\n" +"Tělo zprávy: \"%2%\"" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 +#: src/libslic3r/PrintConfig.cpp:307 +msgid "HTTPS CA File" +msgstr "Soubor HTTPS CA" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" +"Soubor HTTPS CA je volitelný. Je nutný pouze pokud použijte HTTPS certifikát " +"s vlastním podpisem." + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:39 msgid "Head diameter" msgstr "Průměr hrotu" @@ -5534,14 +5382,14 @@ msgstr "Změna parametru dutiny" msgid "Honeycomb" msgstr "Plástev" -#: src/slic3r/GUI/Tab.cpp:1469 -msgid "Horizontal shells" -msgstr "Vodorovné stěny" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:254 msgid "Horizontal Slider" msgstr "Horizontální posuvník" +#: src/slic3r/GUI/Tab.cpp:1469 +msgid "Horizontal shells" +msgstr "Vodorovné stěny" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:219 #: src/slic3r/GUI/KBShortcutsDialog.cpp:223 msgid "Horizontal slider - Move active thumb Left" @@ -5604,40 +5452,14 @@ msgstr "Uplatnění limitů" msgid "How to apply the Machine Limits" msgstr "Jak se mají projevit limity stroje" -#: src/libslic3r/PrintConfig.cpp:352 -msgid "HTTP digest" -msgstr "HTTP digest" - -#: src/slic3r/Utils/Repetier.cpp:246 -#, boost-format -msgid "" -"HTTP status: %1%\n" -"Message body: \"%2%\"" -msgstr "" -"HTTP stavový kód: %1%\n" -"Tělo zprávy: \"%2%\"" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 -#: src/libslic3r/PrintConfig.cpp:307 -msgid "HTTPS CA File" -msgstr "Soubor HTTPS CA" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." -msgstr "" -"Soubor HTTPS CA je volitelný. Je nutný pouze pokud použijte HTTPS certifikát " -"s vlastním podpisem." +#: src/slic3r/GUI/PrintHostDialogs.cpp:247 +msgid "ID" +msgstr "ID" #: src/slic3r/GUI/Preferences.cpp:694 msgid "Icon size in a respect to the default size" msgstr "Velikost ikon vůči výchozí velikosti" -#: src/slic3r/GUI/PrintHostDialogs.cpp:247 -msgid "ID" -msgstr "ID" - #: src/libslic3r/PrintConfig.cpp:2511 msgid "" "If checked, supports will be generated automatically based on the overhang " @@ -5673,6 +5495,44 @@ msgstr "" "přednastavení. Tyto aktualizace jsou staženy do dočasného umístění. Pokud je " "k dispozici nové přednastavení, zobrazí se upozornění při startu programu." +#: src/slic3r/GUI/Preferences.cpp:289 +msgid "If enabled, PrusaSlicer will be open at the position it was closed" +msgstr "" +"Pokud je povoleno, PrusaSlicer se otevře na pozici, na které byl zavřen." + +#: src/slic3r/GUI/Preferences.cpp:384 +msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." +msgstr "" +"Pokud je tato funkce povolena, PrusaSlicer nebude v prohlížeči otevírat " +"hypertextové odkazy." + +#: src/slic3r/GUI/Preferences.cpp:410 +msgid "" +"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " +"will be used." +msgstr "" +"Pokud je tato možnost povolena, budou karty Nastavení umístěny jako položky " +"nabídky. Pokud je zakázáno, bude použito původní uživatelské rozhraní." + +#: src/slic3r/GUI/Preferences.cpp:177 +msgid "" +"If enabled, Slic3r 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 "" +"Pokud je povoleno, stáhne Slic3r na pozadí aktualizace vestavěných " +"systémových přednastavení. Tyto aktualizace jsou staženy do dočasného " +"umístění. Pokud je k dispozici nové přednastavení, zobrazí se upozornění při " +"startu programu." + +#: src/slic3r/GUI/Preferences.cpp:498 +msgid "" +"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." +msgstr "" +"Pokud je tato možnost povolena, bude uživatelské rozhraní používat tmavý " +"režim. Pokud je zakázáno, bude použito původní uživatelské rozhraní." + #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:174 msgid "If enabled, a repetition of the next random color will be allowed." msgstr "Pokud je povoleno, bude povoleno opakování další náhodné barvy." @@ -5685,6 +5545,14 @@ msgstr "" "Pokud je tato možnost povolena, všechny tiskové extrudery na začátku tisku " "vytlačí na předním okraji podložky malé množství materiálu." +#: src/slic3r/GUI/Preferences.cpp:150 +msgid "" +"If enabled, allows the Reload from disk command to automatically find and " +"load the files when invoked." +msgstr "" +"Pokud je povoleno, v případě vyžádání, umožňuje funkci „Znovu načíst z " +"disku“ automaticky vyhledat a načíst soubory." + #: src/slic3r/GUI/ConfigWizard.cpp:1250 msgid "" "If enabled, allows the Reload from disk command to automatically find and " @@ -5697,14 +5565,6 @@ msgstr "" "Pokud není povoleno, funkce „Znovu načíst z disku“ požádá o zadání cest ke " "každému souboru pomocí dialogového okna." -#: src/slic3r/GUI/Preferences.cpp:150 -msgid "" -"If enabled, allows the Reload from disk command to automatically find and " -"load the files when invoked." -msgstr "" -"Pokud je povoleno, v případě vyžádání, umožňuje funkci „Znovu načíst z " -"disku“ automaticky vyhledat a načíst soubory." - #: src/slic3r/GUI/Preferences.cpp:509 msgid "" "If enabled, application will use the standard Windows system menu,\n" @@ -5735,17 +5595,6 @@ msgstr "" "Pokud je povoleno, pohyby sekvenčního posuvníku v náhledu gcodu se aplikují " "pouze na horní vrstvu. Pokud je zakázáno, aplikují se na celý gcode." -#: src/slic3r/GUI/Preferences.cpp:289 -msgid "If enabled, PrusaSlicer will be open at the position it was closed" -msgstr "" -"Pokud je povoleno, PrusaSlicer se otevře na pozici, na které byl zavřen." - -#: src/slic3r/GUI/Preferences.cpp:384 -msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." -msgstr "" -"Pokud je tato funkce povolena, PrusaSlicer nebude v prohlížeči otevírat " -"hypertextové odkazy." - #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:166 msgid "If enabled, random sequence of the selected extruders will be used." msgstr "" @@ -5760,6 +5609,14 @@ msgstr "Pokud je povoleno, vykreslí objekt za pomoci mapy prostředí." msgid "If enabled, reverses the direction of zoom with mouse wheel" msgstr "Pokud je povoleno, při zoomu obrátí funkci kolečka myši" +#: src/slic3r/GUI/Preferences.cpp:260 +msgid "" +"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." +"gcode files." +msgstr "" +"Pokud je zašktnuto, PrusaSlicer bude výchozí aplikaci pro otevírání souborů ." +"gcode." + #: src/slic3r/GUI/Preferences.cpp:159 msgid "If enabled, sets PrusaSlicer as default application to open .3mf files." msgstr "" @@ -5772,34 +5629,6 @@ msgstr "" "Pokud je zašktnuto, PrusaSlicer bude výchozí aplikaci pro otevírání souborů ." "stl." -#: src/slic3r/GUI/Preferences.cpp:260 -msgid "" -"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." -"gcode files." -msgstr "" -"Pokud je zašktnuto, PrusaSlicer bude výchozí aplikaci pro otevírání souborů ." -"gcode." - -#: src/slic3r/GUI/Preferences.cpp:410 -msgid "" -"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " -"will be used." -msgstr "" -"Pokud je tato možnost povolena, budou karty Nastavení umístěny jako položky " -"nabídky. Pokud je zakázáno, bude použito původní uživatelské rozhraní." - -#: src/slic3r/GUI/Preferences.cpp:177 -msgid "" -"If enabled, Slic3r 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 "" -"Pokud je povoleno, stáhne Slic3r na pozadí aktualizace vestavěných " -"systémových přednastavení. Tyto aktualizace jsou staženy do dočasného " -"umístění. Pokud je k dispozici nové přednastavení, zobrazí se upozornění při " -"startu programu." - #: src/slic3r/GUI/Preferences.cpp:270 msgid "" "If enabled, the 3D scene will be rendered in Retina resolution. If you are " @@ -5855,13 +5684,6 @@ msgstr "" "čistící věže. Uživatel je odpovědný za to, že nedojde ke kolizi tiskové " "hlavy s tiskem." -#: src/slic3r/GUI/Preferences.cpp:498 -msgid "" -"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." -msgstr "" -"Pokud je tato možnost povolena, bude uživatelské rozhraní používat tmavý " -"režim. Pokud je zakázáno, bude použito původní uživatelské rozhraní." - #: src/slic3r/GUI/Preferences.cpp:328 msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" @@ -5968,15 +5790,6 @@ msgstr "" "Pokud je doba tisku vrstvy odhadnuta kratší než tento počet sekund, rychlost " "tisku se zpomalí, aby se prodloužila doba tisku této vrstvy." -#: src/libslic3r/PrintConfig.cpp:852 -msgid "" -"If this is enabled, fan will never be disabled and will be kept running at " -"least at its minimum speed. Useful for PLA, harmful for ABS." -msgstr "" -"Pokud je tato funkce zapnutá, ventilátor nebude nikdy vypnut a bude udržován " -"v chodu alespoň rychlostí která je nastavena jako minimální rychlost. " -"Užitečné pro PLA, škodlivé pro ABS." - #: src/slic3r/GUI/Preferences.cpp:131 msgid "" "If this is enabled, Slic3r will auto-center objects around the print bed " @@ -6001,6 +5814,15 @@ msgstr "" "Pokud je tato volba povolena, Slic3r vyvolá poslední výstupní adresář " "namísto toho, který obsahuje vstupní soubory." +#: src/libslic3r/PrintConfig.cpp:852 +msgid "" +"If this is enabled, fan will never be disabled and will be kept running at " +"least at its minimum speed. Useful for PLA, harmful for ABS." +msgstr "" +"Pokud je tato funkce zapnutá, ventilátor nebude nikdy vypnut a bude udržován " +"v chodu alespoň rychlostí která je nastavena jako minimální rychlost. " +"Užitečné pro PLA, škodlivé pro ABS." + #: src/slic3r/GUI/Preferences.cpp:214 msgid "" "If this is enabled, when starting PrusaSlicer and another instance of the " @@ -6134,26 +5956,6 @@ msgstr "Načíst konfiguraci z &Projektu" msgid "Import Config from ini/amf/3mf/gcode" msgstr "Načíst konfiguraci ze souboru ini/amf/3mf/gcode" -#: src/slic3r/GUI/Plater.cpp:5265 -msgid "Import config only" -msgstr "Importovat pouze konfiguraci" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 -msgid "Import file" -msgstr "Importovat soubor" - -#: src/slic3r/GUI/Plater.cpp:5264 -msgid "Import geometry only" -msgstr "Importovat pouze modely" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 -msgid "Import model and profile" -msgstr "Importovat model a profil" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 -msgid "Import model only" -msgstr "Importujte pouze model" - #: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 msgid "Import Object" msgstr "Importovat Objekt" @@ -6162,14 +5964,6 @@ msgstr "Importovat Objekt" msgid "Import Objects" msgstr "Importovat Objekty" -#: src/slic3r/Utils/FixModelByWin10.cpp:395 -msgid "Import of the repaired 3mf file failed" -msgstr "Import opraveného 3MF souboru selhal" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 -msgid "Import profile only" -msgstr "Importovat pouze profil" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Import SL1 / SL1S Archive" msgstr "Importovat SL1 / SL1S Archiv" @@ -6190,6 +5984,38 @@ msgstr "Importovat STL/OBJ/AM&F/3MF" msgid "Import STL/OBJ/AMF/3MF without config, keep plater" msgstr "Importovat STL/OBJ/AMF/3MF bez konfigurace, zachová stávající podložku" +#: src/slic3r/GUI/Plater.cpp:5265 +msgid "Import config only" +msgstr "Importovat pouze konfiguraci" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 +msgid "Import file" +msgstr "Importovat soubor" + +#: src/slic3r/GUI/Plater.cpp:5264 +msgid "Import geometry only" +msgstr "Importovat pouze modely" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 +msgid "Import model and profile" +msgstr "Importovat model a profil" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 +msgid "Import model only" +msgstr "Importujte pouze model" + +#: src/slic3r/Utils/FixModelByWin10.cpp:395 +msgid "Import of the repaired 3mf file failed" +msgstr "Import opraveného 3MF souboru selhal" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 +msgid "Import profile only" +msgstr "Importovat pouze profil" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 +msgid "Importing SLA archive" +msgstr "Importuje se SLA archiv" + #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:164 msgid "Importing canceled." msgstr "Import zrušen." @@ -6198,18 +6024,6 @@ msgstr "Import zrušen." msgid "Importing done." msgstr "Import dokončen." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 -msgid "Importing SLA archive" -msgstr "Importuje se SLA archiv" - -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -msgid "in" -msgstr "in" - #: src/libslic3r/GCode.cpp:764 msgid "In the custom G-code were found reserved keywords:" msgstr "Ve vlastním G-kódu byla nalezena vyhrazená klíčová slova:" @@ -6244,41 +6058,6 @@ msgstr "Přidání Instancí" msgid "Increase/decrease edit area" msgstr "Zvětšit / zmenšit oblast úprav" -#. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4259 -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 "" -"indikuje, že některá nastavení byla změněna a nejsou shodná se systémovými " -"(výchozími) hodnotami pro danou skupinu nastavení.\n" -"Klikněte na ikonu ODEMKNUTÉHO ZÁMKU pro reset všech nastavení aktuální " -"skupiny nastavení na systémové (nebo výchozí) hodnoty." - -#. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4255 -msgid "" -"indicates that the settings are the same as the system (or default) values " -"for the current option group" -msgstr "" -"indikuje, že nastavení jsou stejná jako systémové (výchozí) hodnoty pro " -"aktuální skupinu nastavení" - -#. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4271 -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í.\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:199 #: src/slic3r/GUI/GUI_Factories.cpp:55 src/slic3r/GUI/GUI_Factories.cpp:128 #: src/slic3r/GUI/Plater.cpp:460 src/slic3r/GUI/Tab.cpp:1506 @@ -6292,10 +6071,6 @@ msgstr "" msgid "Infill" msgstr "Výplň" -#: src/slic3r/GUI/PresetHints.cpp:174 -msgid "infill" -msgstr "výplň" - #: src/libslic3r/PrintConfig.cpp:1467 msgid "Infill before perimeters" msgstr "Tisknout výplň před tiskem perimetrů" @@ -6341,6 +6116,11 @@ msgstr "Výška první vrstvy" msgid "Inner brim only" msgstr "Pouze vnitřní límec" +#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 +#: src/slic3r/GUI/Field.cpp:1575 +msgid "Input value is out of range" +msgstr "Zadaná hodnota je mimo rozsah" + #: src/slic3r/GUI/Field.cpp:266 #, c-format, boost-format msgid "" @@ -6350,11 +6130,6 @@ msgstr "" "Vstupní hodnota je mimo povolený rozsah\n" "Jste si jisti, že %s je správná hodnota a že chcete pokračovat?" -#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 -#: src/slic3r/GUI/Field.cpp:1575 -msgid "Input value is out of range" -msgstr "Zadaná hodnota je mimo rozsah" - #: resources/data/hints.ini: [hint:Insert Custom G-code] msgid "" "Insert Custom G-code\n" @@ -6427,10 +6202,6 @@ msgstr "Rozteč kontaktních vrstev" msgid "Interface shells" msgstr "Mezilehlé stěny" -#: src/libslic3r/miniz_extension.cpp:143 -msgid "internal error" -msgstr "interní chyba" - #: src/slic3r/GUI/GUI_App.cpp:713 #, boost-format msgid "Internal error: %1%" @@ -6441,6 +6212,10 @@ msgstr "Vnitřní chyba: %1%" msgid "Internal infill" msgstr "Vnitřní výplň" +#: src/slic3r/GUI/ConfigManipulation.cpp:329 +msgid "Invalid Head penetration" +msgstr "Neplatný průnik podpěry do modelu" + #: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 msgid "Invalid data" msgstr "Neplatná data" @@ -6450,18 +6225,6 @@ msgstr "Neplatná data" msgid "Invalid file format." msgstr "Neplatný formát souboru." -#: src/libslic3r/miniz_extension.cpp:139 -msgid "invalid filename" -msgstr "neplatný název souboru" - -#: src/slic3r/GUI/ConfigManipulation.cpp:329 -msgid "Invalid Head penetration" -msgstr "Neplatný průnik podpěry do modelu" - -#: src/libslic3r/miniz_extension.cpp:107 -msgid "invalid header or archive is corrupted" -msgstr "neplatná hlavička nebo je archiv poškozen" - #: src/slic3r/GUI/Field.cpp:397 #, boost-format msgid "" @@ -6477,14 +6240,19 @@ msgstr "" msgid "Invalid numeric input." msgstr "Neplatný číselný vstup." -#: src/libslic3r/miniz_extension.cpp:137 -msgid "invalid parameter" -msgstr "neplatný parametr" - #: src/slic3r/GUI/ConfigManipulation.cpp:342 msgid "Invalid pinhead diameter" msgstr "Průměr hrotu podpěry je neplatný" +#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 +#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 +#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 +#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 +#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 +#: src/libslic3r/PrintConfig.cpp:1577 +msgid "Ironing" +msgstr "Ironing" + #: resources/data/hints.ini: [hint:Ironing] msgid "" "Ironing\n" @@ -6499,32 +6267,14 @@ msgstr "" "vyrovnala případné nadzvednuté otřepky plastu. Více informací se dozvíte v " "dokumentaci. (Vyžaduje pokročilý nebo expertní režim.)" -#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 -#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 -#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 -#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 -#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 -#: src/libslic3r/PrintConfig.cpp:1577 -msgid "Ironing" -msgstr "Ironing" - #: src/libslic3r/PrintConfig.cpp:1542 src/libslic3r/PrintConfig.cpp:1544 msgid "Ironing Type" msgstr "Způsob vyhlazování" -#: src/slic3r/GUI/GUI_App.cpp:266 -msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." -msgstr "je založen na Slic3r od Alessandra Ranellucciho a RepRap komunity." - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:588 msgid "Is it safe?" msgstr "Je to bezpečné?" -#. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 -msgid "is licensed under the" -msgstr "je licencován pod" - #: src/slic3r/GUI/MainFrame.cpp:1114 msgid "Iso" msgstr "Izometrické" @@ -6580,15 +6330,6 @@ msgstr "Rozkmit (Jitter)" msgid "Jump to height" msgstr "Přechod do výšky" -#: src/slic3r/GUI/DoubleSlider.cpp:1391 -#, c-format, boost-format -msgid "" -"Jump to height %s\n" -"or Set ruler mode" -msgstr "" -"Přechod do výšky %s\n" -"nebo Nastavení režimu pravítka" - #: src/slic3r/GUI/DoubleSlider.cpp:1388 #, c-format, boost-format msgid "" @@ -6600,6 +6341,15 @@ msgstr "" "Nastavení režimu pravítka\n" "nebo Nastavení sekvence extruderů pro celý tisk" +#: src/slic3r/GUI/DoubleSlider.cpp:1391 +#, c-format, boost-format +msgid "" +"Jump to height %s\n" +"or Set ruler mode" +msgstr "" +"Přechod do výšky %s\n" +"nebo Nastavení režimu pravítka" + #: src/slic3r/GUI/DoubleSlider.cpp:1385 src/slic3r/GUI/DoubleSlider.cpp:2254 msgid "Jump to move" msgstr "Přechod na pohyb v rámci vrstvy" @@ -6642,9 +6392,25 @@ msgstr "Klávesové zkratky" msgid "Keyboard shortcuts" msgstr "Klávesové zkratky" -#: src/libslic3r/PrintConfig.cpp:3281 -msgid "kg" -msgstr "kg" +#: src/slic3r/GUI/Tab.cpp:4253 +msgid "LOCKED LOCK" +msgstr "ZAMČENÝ ZÁMEK" + +#: src/slic3r/GUI/Tab.cpp:4281 +msgid "" +"LOCKED LOCK icon indicates that the settings are the same as the system (or " +"default) values for the current option group" +msgstr "" +"Ikona ZAMKNUTÉHO ZÁMKU indikuje, že nastavení jsou stejná jako systémové " +"(nebo výchozí) hodnoty pro aktuální skupinu nastavení" + +#: src/slic3r/GUI/Tab.cpp:4297 +msgid "" +"LOCKED LOCK icon indicates that the value is the same as the system (or " +"default) value." +msgstr "" +"Ikona ZAMKNUTÉHO ZÁMKU indikuje, že hodnota je shodná se systémovou " +"(výchozí) hodnotou." #: src/libslic3r/PrintConfig.cpp:1353 msgid "Label objects" @@ -6698,23 +6464,11 @@ msgstr "Výškové limity vrstvy" msgid "Layer range Settings to modify" msgstr "Nastavení pro vrstvy v rozsahu" -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 -#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 -#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 -#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 -#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 -msgid "layers" -msgstr "vrstva(y)" - #: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4500 #: src/slic3r/GUI/Tab.cpp:4591 msgid "Layers" msgstr "Vrstvy" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 -msgid "Layers and perimeters" -msgstr "Vrstvy a perimetry" - #: src/slic3r/GUI/GUI_Factories.cpp:54 src/slic3r/GUI/GUI_Factories.cpp:127 #: src/libslic3r/PrintConfig.cpp:264 src/libslic3r/PrintConfig.cpp:381 #: src/libslic3r/PrintConfig.cpp:424 src/libslic3r/PrintConfig.cpp:433 @@ -6728,15 +6482,9 @@ msgstr "Vrstvy a perimetry" msgid "Layers and Perimeters" msgstr "Vrstvy a perimetry" -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Bottom" -msgstr "Spodních" - -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Top" -msgstr "Vrchních" +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 +msgid "Layers and perimeters" +msgstr "Vrstvy a perimetry" #: src/slic3r/GUI/Preferences.cpp:763 msgid "Layout Options" @@ -6751,6 +6499,14 @@ msgstr "Ponechat možnost \"%1%\" povolenou" msgid "Left" msgstr "Zleva" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +msgid "Left Preset Value" +msgstr "Hodnota levého přednastavení" + +#: src/slic3r/GUI/MainFrame.cpp:1127 +msgid "Left View" +msgstr "Pohled zleva" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 @@ -6767,14 +6523,6 @@ msgstr "Levé tlačítko myši" msgid "Left mouse button:" msgstr "Levé tlačítko myši:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 -msgid "Left Preset Value" -msgstr "Hodnota levého přednastavení" - -#: src/slic3r/GUI/MainFrame.cpp:1127 -msgid "Left View" -msgstr "Pohled zleva" - #: src/slic3r/GUI/GUI_Preview.cpp:1060 msgid "Legend/Estimated printing time" msgstr "Legenda / Odhadovaný čas tisku" @@ -6802,6 +6550,10 @@ msgstr "" "Licenční ujednání všech následujících programů (knihoven) je součástí " "licenční smlouvy" +#: src/libslic3r/PrintConfig.cpp:2153 +msgid "Lift Z" +msgstr "Zvednout Z" + #: src/libslic3r/PrintConfig.cpp:4358 msgid "" "Lift the object above the bed when it is partially below. Enabled by " @@ -6810,10 +6562,6 @@ msgstr "" "Zvedne objekt nad podložku v případě, pokud je je částečně pod ním. Ve " "výchozím nastavení povoleno, pro zakázání použijte --no-ensure-on-bed." -#: src/libslic3r/PrintConfig.cpp:2153 -msgid "Lift Z" -msgstr "Zvednout Z" - #: src/libslic3r/PrintConfig.cpp:1161 msgid "Lightning" msgstr "Lightning" @@ -6830,18 +6578,42 @@ msgstr "Čára" msgid "Load" msgstr "Načíst" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 +msgid "Load Config from ini/amf/3mf/gcode and merge" +msgstr "Načíst konfiguraci zesouboru ini/amf/3mf/gcode a sloučit" + +#: src/slic3r/GUI/Plater.cpp:5408 +msgid "Load File" +msgstr "Načíst soubor" + +#: src/slic3r/GUI/Plater.cpp:5413 +msgid "Load Files" +msgstr "Načíst soubory" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Modifier" +msgstr "Načíst Modifikátor" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Part" +msgstr "Přidání části" + +#: src/slic3r/GUI/Plater.cpp:5100 +msgid "Load Project" +msgstr "Načíst Projekt" + #: src/slic3r/GUI/MainFrame.cpp:1201 msgid "Load a model" msgstr "Načíst model" -#: src/slic3r/GUI/MainFrame.cpp:1205 -msgid "Load an model saved with imperial units" -msgstr "Načíst jako model v imperiálních jednotkách" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Load an SL1 / Sl1S archive" msgstr "Načíst SL1 / SL1S archiv" +#: src/slic3r/GUI/MainFrame.cpp:1205 +msgid "Load an model saved with imperial units" +msgstr "Načíst jako model v imperiálních jednotkách" + #: src/libslic3r/PrintConfig.cpp:4454 msgid "" "Load and store settings at the given directory. This is useful for " @@ -6870,10 +6642,6 @@ msgstr "" "SL1 / SL1S archiv, která rovněž umožňuje rekonstruovat 3D modely z " "voxelových dat." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 -msgid "Load Config from ini/amf/3mf/gcode and merge" -msgstr "Načíst konfiguraci zesouboru ini/amf/3mf/gcode a sloučit" - #: src/slic3r/GUI/MainFrame.cpp:1217 msgid "Load configuration from project file" msgstr "Načíst konfiguraci z projektu" @@ -6890,30 +6658,10 @@ msgstr "" msgid "Load exported configuration file" msgstr "Načíst exportovaný konfigurační soubor" -#: src/slic3r/GUI/Plater.cpp:5408 -msgid "Load File" -msgstr "Načíst soubor" - -#: src/slic3r/GUI/Plater.cpp:5413 -msgid "Load Files" -msgstr "Načíst soubory" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Modifier" -msgstr "Načíst Modifikátor" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Part" -msgstr "Přidání části" - #: src/slic3r/GUI/MainFrame.cpp:1221 msgid "Load presets from a bundle" msgstr "Načíst přednastavení z balíku" -#: src/slic3r/GUI/Plater.cpp:5100 -msgid "Load Project" -msgstr "Načíst Projekt" - #: src/slic3r/GUI/BedShapeDialog.cpp:203 msgid "Load shape from STL..." msgstr "Načíst tvar ze souboru STL…" @@ -6922,10 +6670,6 @@ msgstr "Načíst tvar ze souboru STL…" msgid "Load..." msgstr "Načíst..." -#: src/slic3r/GUI/WipeTowerDialog.cpp:309 -msgid "loaded" -msgstr "zaváděn" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1509 src/slic3r/GUI/Plater.cpp:2379 msgid "Loading" msgstr "Načítání" @@ -6989,26 +6733,6 @@ msgstr "Lokální souřadnice" msgid "Lock supports under new islands" msgstr "Ukotvi podpěry pod novými ostrůvky" -#: src/slic3r/GUI/Tab.cpp:4253 -msgid "LOCKED LOCK" -msgstr "ZAMČENÝ ZÁMEK" - -#: src/slic3r/GUI/Tab.cpp:4281 -msgid "" -"LOCKED LOCK icon indicates that the settings are the same as the system (or " -"default) values for the current option group" -msgstr "" -"Ikona ZAMKNUTÉHO ZÁMKU indikuje, že nastavení jsou stejná jako systémové " -"(nebo výchozí) hodnoty pro aktuální skupinu nastavení" - -#: src/slic3r/GUI/Tab.cpp:4297 -msgid "" -"LOCKED LOCK icon indicates that the value is the same as the system (or " -"default) value." -msgstr "" -"Ikona ZAMKNUTÉHO ZÁMKU indikuje, že hodnota je shodná se systémovou " -"(výchozí) hodnotou." - #: src/libslic3r/PrintConfig.cpp:4457 msgid "Logging level" msgstr "Úroveň logování" @@ -7041,12 +6765,6 @@ msgid "" msgstr "" "Nejsou nastaveny limity zařízení, proto nemusí být odhad doby tisku přesný." -#: src/slic3r/GUI/Tab.cpp:4224 -msgid "" -"Machine limits will be emitted to G-code and used to estimate print time." -msgstr "" -"Limity stroje budou emitovány do G-codu a budou použity k odhadu doby tisku." - #: src/slic3r/GUI/Tab.cpp:4227 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " @@ -7057,6 +6775,12 @@ msgstr "" "tisku, což však nemusí být přesné, protože tiskárna může použít jinou sadu " "limitů." +#: src/slic3r/GUI/Tab.cpp:4224 +msgid "" +"Machine limits will be emitted to G-code and used to estimate print time." +msgstr "" +"Limity stroje budou emitovány do G-codu a budou použity k odhadu doby tisku." + #: src/libslic3r/GCode.cpp:576 msgid "" "Make sure the object is printable. This is usually caused by negligibly " @@ -7088,10 +6812,6 @@ msgstr "Panel Nastavení mate&riálu" msgid "Material" msgstr "Materiál" -#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 -msgid "Material printing profile" -msgstr "Profil tiskového materiálu" - #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 #: src/slic3r/GUI/Tab.hpp:522 @@ -7102,6 +6822,10 @@ msgstr "Nastavení materiálu" msgid "Material Settings Tab" msgstr "Panel Nastavení materiálu" +#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 +msgid "Material printing profile" +msgstr "Profil tiskového materiálu" + #: src/libslic3r/PrintConfig.cpp:1749 src/libslic3r/PrintConfig.cpp:1758 msgid "Max" msgstr "Maximum" @@ -7130,10 +6854,6 @@ msgstr "Maximální výška tisku" msgid "Max print speed" msgstr "Maximální rychlost tisku" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 -msgid "max PrusaSlicer version" -msgstr "max PrusaSlicer verze" - #: src/libslic3r/PrintConfig.cpp:1800 msgid "Max volumetric slope negative" msgstr "Maximální negativní objemový sklon" @@ -7158,6 +6878,18 @@ msgstr "Maximální vzdálenost mezi podpěrami u částí s řídkou výplní." msgid "Maximum acceleration E" msgstr "Maximální zrychlení E" +#: src/libslic3r/PrintConfig.cpp:1661 +msgid "Maximum acceleration X" +msgstr "Maximální zrychlení X" + +#: src/libslic3r/PrintConfig.cpp:1662 +msgid "Maximum acceleration Y" +msgstr "Maximální zrychlení Y" + +#: src/libslic3r/PrintConfig.cpp:1663 +msgid "Maximum acceleration Z" +msgstr "Maximální zrychlení Z" + #: src/libslic3r/PrintConfig.cpp:1740 msgid "Maximum acceleration for travel moves" msgstr "Maximální zrychlení pro posuny" @@ -7206,18 +6938,6 @@ msgstr "Maximální zrychlení při retrakci" msgid "Maximum acceleration when retracting (M204 R)" msgstr "Maximální zrychlení při retrakci (M204 R)" -#: src/libslic3r/PrintConfig.cpp:1661 -msgid "Maximum acceleration X" -msgstr "Maximální zrychlení X" - -#: src/libslic3r/PrintConfig.cpp:1662 -msgid "Maximum acceleration Y" -msgstr "Maximální zrychlení Y" - -#: src/libslic3r/PrintConfig.cpp:1663 -msgid "Maximum acceleration Z" -msgstr "Maximální zrychlení Z" - #: src/slic3r/GUI/Tab.cpp:2655 msgid "Maximum accelerations" msgstr "Maximální zrychlení" @@ -7247,6 +6967,18 @@ msgstr "Maximální doba osvitu" msgid "Maximum feedrate E" msgstr "Maximální rychlost posuvu E" +#: src/libslic3r/PrintConfig.cpp:1644 +msgid "Maximum feedrate X" +msgstr "Maximální rychlost posuvu X" + +#: src/libslic3r/PrintConfig.cpp:1645 +msgid "Maximum feedrate Y" +msgstr "Maximální rychlost posuvu Y" + +#: src/libslic3r/PrintConfig.cpp:1646 +msgid "Maximum feedrate Z" +msgstr "Maximální rychlost posuvu Z" + #: src/libslic3r/PrintConfig.cpp:1653 msgid "Maximum feedrate of the E axis" msgstr "Maximální rychlost posuvu osy E" @@ -7263,18 +6995,6 @@ msgstr "Maximální rychlost posuvu osy Y" msgid "Maximum feedrate of the Z axis" msgstr "Maximální rychlost posuvu osy Z" -#: src/libslic3r/PrintConfig.cpp:1644 -msgid "Maximum feedrate X" -msgstr "Maximální rychlost posuvu X" - -#: src/libslic3r/PrintConfig.cpp:1645 -msgid "Maximum feedrate Y" -msgstr "Maximální rychlost posuvu Y" - -#: src/libslic3r/PrintConfig.cpp:1646 -msgid "Maximum feedrate Z" -msgstr "Maximální rychlost posuvu Z" - #: src/slic3r/GUI/Tab.cpp:2650 msgid "Maximum feedrates" msgstr "Maximální rychlosti posuvu" @@ -7287,6 +7007,18 @@ msgstr "Maximální doba počátečního osvitu" msgid "Maximum jerk E" msgstr "Maximální ryv E" +#: src/libslic3r/PrintConfig.cpp:1678 +msgid "Maximum jerk X" +msgstr "Maximální ryv X" + +#: src/libslic3r/PrintConfig.cpp:1679 +msgid "Maximum jerk Y" +msgstr "Maximální ryv Y" + +#: src/libslic3r/PrintConfig.cpp:1680 +msgid "Maximum jerk Z" +msgstr "Maximální ryv Z" + #: src/libslic3r/PrintConfig.cpp:1687 msgid "Maximum jerk of the E axis" msgstr "Maximální ryv (jerk) osy E" @@ -7303,18 +7035,6 @@ msgstr "Maximální ryv (jerk) osy Y" msgid "Maximum jerk of the Z axis" msgstr "Maximální ryv (jerk) osy Z" -#: src/libslic3r/PrintConfig.cpp:1678 -msgid "Maximum jerk X" -msgstr "Maximální ryv X" - -#: src/libslic3r/PrintConfig.cpp:1679 -msgid "Maximum jerk Y" -msgstr "Maximální ryv Y" - -#: src/libslic3r/PrintConfig.cpp:1680 -msgid "Maximum jerk Z" -msgstr "Maximální ryv Z" - #: src/libslic3r/PrintConfig.cpp:1423 msgid "Maximum length of the infill anchor" msgstr "Maximální délka výplňové kotvy" @@ -7405,10 +7125,6 @@ msgstr "Minimum" msgid "Min print speed" msgstr "Minimální rychlost tisku" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 -msgid "min PrusaSlicer version" -msgstr "min PrusaSlicer verze" - #: src/libslic3r/PrintConfig.cpp:3597 msgid "Minimal distance of the support points" msgstr "Minimální vzdálenost podpěrných bodů" @@ -7471,6 +7187,10 @@ msgstr "Minimální rychlosti posuvu" msgid "Minimum initial exposure time" msgstr "Minimální doba počátečního osvitu" +#: src/slic3r/GUI/Tab.cpp:1475 +msgid "Minimum shell thickness" +msgstr "Minimální tloušťka skořepiny" + #: resources/data/hints.ini: [hint:Minimum shell thickness] msgid "" "Minimum shell thickness\n" @@ -7483,10 +7203,6 @@ msgstr "" "Minimální tloušťku stěny milimetrech? Tato funkce je užitečná zejména " "při použití funkce proměnné výšky vrstvy." -#: src/slic3r/GUI/Tab.cpp:1475 -msgid "Minimum shell thickness" -msgstr "Minimální tloušťka skořepiny" - #: src/libslic3r/PrintConfig.cpp:2374 src/libslic3r/PrintConfig.cpp:2375 msgid "Minimum thickness of a top / bottom shell" msgstr "Minimální tloušťka vrchní / spodní skořepiny" @@ -7523,6 +7239,10 @@ msgstr "" "Minimální šířka prvků, které je třeba zachovat při provádění kompenzace " "rozplácnutí první vrstvy." +#: src/slic3r/GUI/GUI_Factories.cpp:885 +msgid "Mirror" +msgstr "Zrcadlit" + #: resources/data/hints.ini: [hint:Mirror] msgid "" "Mirror\n" @@ -7534,18 +7254,14 @@ msgstr "" "verzi? Klepněte na model pravým tlačítkem myši, vyberte možnost Zrcadlit a " "vyberte osu zrcadlení." -#: src/slic3r/GUI/GUI_Factories.cpp:885 -msgid "Mirror" -msgstr "Zrcadlit" +#: src/slic3r/GUI/GLCanvas3D.cpp:1684 +msgid "Mirror Object" +msgstr "Zrcadlit Objekt" #: src/libslic3r/PrintConfig.cpp:3131 msgid "Mirror horizontally" msgstr "Zrcadlit horizontálně" -#: src/slic3r/GUI/GLCanvas3D.cpp:1684 -msgid "Mirror Object" -msgstr "Zrcadlit Objekt" - #: src/slic3r/GUI/GUI_Factories.cpp:885 msgid "Mirror the selected object" msgstr "Zrcadlit vybraný objekt" @@ -7576,133 +7292,10 @@ msgstr "Nesprávný typ tiskového serveru: % s" msgid "Mixed" msgstr "Smíšený" -#: src/libslic3r/PrintConfig.cpp:3274 -msgid "ml" -msgstr "ml" - -#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 -#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 -#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 -#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 -#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 -#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 -#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 -#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 -#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 -#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 -#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 -#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 -#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 -#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 -#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 -#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 -#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 -#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 -#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 -#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 -#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 -#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 -#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 -#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 -#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 -#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 -#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 -#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 -#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 -#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 -#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 -#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 -#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 -#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 -#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 -#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 -#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 -#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 -#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 -#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 -#: src/libslic3r/PrintConfig.cpp:3767 -msgid "mm" -msgstr "mm" - -#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 -#: src/libslic3r/PrintConfig.cpp:2148 -msgid "mm (zero to disable)" -msgstr "mm (nula pro vypnutí)" - -#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 -#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 -#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 -#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 -#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 -#: src/libslic3r/PrintConfig.cpp:2845 -msgid "mm or %" -msgstr "mm nebo %" - -#: src/libslic3r/PrintConfig.cpp:385 -msgid "mm or % (zero to disable)" -msgstr "mm nebo % (nula pro deaktivaci)" - -#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 -#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 -#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 -#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 -#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 -#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 -#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 -#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 -#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 -#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 -#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 -msgid "mm/s" -msgstr "mm/s" - -#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 -#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 -#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 -#: src/libslic3r/PrintConfig.cpp:2859 -msgid "mm/s or %" -msgstr "mm/s nebo %" - -#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 -#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 -#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 -#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 -#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 -msgid "mm/s²" -msgstr "mm/s²" - -#: src/libslic3r/PrintConfig.cpp:2316 -msgid "mm²" -msgstr "mm²" - -#: src/libslic3r/PrintConfig.cpp:957 -msgid "mm³" -msgstr "mm³" - -#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 -#: src/libslic3r/PrintConfig.cpp:1782 -msgid "mm³/s" -msgstr "mm³/s" - -#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 -msgid "mm³/s²" -msgstr "mm³/s²" - #: src/slic3r/GUI/GUI_App.cpp:2245 msgid "Mode" msgstr "Reži&m" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "model" -msgstr "model" - #: src/slic3r/GUI/BedShapeDialog.cpp:344 msgid "Model" msgstr "Model" @@ -7715,19 +7308,10 @@ msgstr "Oprava modelu byla zrušena" msgid "Model repair finished" msgstr "Oprava modelu byla dokončena" -#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 -msgctxt "Mode" -msgid "Advanced" -msgstr "Pokročilý" - #: src/slic3r/GUI/Tab.cpp:1319 msgid "Modifications to the current profile will be saved." msgstr "Úpravy aktuálního profilu budou uloženy." -#: src/slic3r/GUI/GUI_App.cpp:2159 -msgid "modified" -msgstr "upraveno" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Modifier" msgstr "Modifikátor" @@ -7736,14 +7320,6 @@ msgstr "Modifikátor" msgid "Modifiers" msgstr "Modifikátory" -#: src/libslic3r/PrintConfig.cpp:3295 -msgid "money/bottle" -msgstr "cena/láhev" - -#: src/libslic3r/PrintConfig.cpp:1047 -msgid "money/kg" -msgstr "cena/kg" - #: src/libslic3r/PrintConfig.cpp:705 msgid "Monotonic" msgstr "Monotónní" @@ -7775,6 +7351,10 @@ msgstr "Kolečko myši:" msgid "Move" msgstr "Přesunout" +#: src/slic3r/GUI/GLCanvas3D.cpp:3245 +msgid "Move Object" +msgstr "Posunutí Objektu" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:234 msgid "Move active thumb Down" msgstr "Posunout aktivní ukazatel dolů" @@ -7799,10 +7379,6 @@ msgstr "Posunout řezovou rovinu" msgid "Move drainage hole" msgstr "Posun odtokového otvoru" -#: src/slic3r/GUI/GLCanvas3D.cpp:3245 -msgid "Move Object" -msgstr "Posunutí Objektu" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 msgid "Move point" msgstr "Posunout bod" @@ -7892,6 +7468,14 @@ msgstr "Vynásobí kopie tímto číslem." msgid "N/A" msgstr "N/A" +#: src/slic3r/GUI/RammingChart.cpp:29 +msgid "NO RAMMING AT ALL" +msgstr "ŽÁDNÁ RAPIDNÍ EXTRUZE" + +#: src/slic3r/GUI/GUI_Preview.cpp:728 +msgid "NOTE:" +msgstr "POZNÁMKA:" + #: src/slic3r/GUI/GUI_ObjectList.cpp:297 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:139 msgid "Name" @@ -7925,6 +7509,10 @@ msgstr "Názvy přednastavení souvisejících s fyzickou tiskárnou" msgid "Nearest" msgstr "Nejbližší" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 +msgid "Negative Volume" +msgstr "Negativní Objem" + #: resources/data/hints.ini: [hint:Negative volume] msgid "" "Negative volume\n" @@ -7939,14 +7527,18 @@ msgstr "" "vytvářet snadno upravitelné otvory. Více informací se dozvíte v dokumentaci. " "(Vyžaduje režim Pokročilý nebo Expert.)" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 -msgid "Negative Volume" -msgstr "Negativní Objem" - #: src/slic3r/GUI/BonjourDialog.cpp:55 msgid "Network lookup" msgstr "Hledání v síti" +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +msgid "New Project" +msgstr "Nový Projekt" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +msgid "New Value" +msgstr "Nová hodnota" + #: src/slic3r/GUI/Preferences.cpp:744 msgid "New layout, access via settings button in the top menu" msgstr "Nové rozvržení, přístup přes tlačítko nastavení v horním menu" @@ -7960,10 +7552,6 @@ msgstr "K dispozici je nová předběžná verze %1%." msgid "New printer preset selected" msgstr "Zvoleno nové přednastavení tiskárny" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 -msgid "New Project" -msgstr "Nový Projekt" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:77 msgid "New project, clear plater" msgstr "Nový projekt, odstranit modely na podložce" @@ -7973,10 +7561,6 @@ msgstr "Nový projekt, odstranit modely na podložce" msgid "New release version %1% is available." msgstr "K dispozici je nová verze %1%." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 -msgid "New Value" -msgstr "Nová hodnota" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 #, c-format, boost-format msgid "New version of %s is available" @@ -8027,10 +7611,6 @@ msgstr "Pro aktuální model nelze vygenerovat žádnou podložku" msgid "No previously sliced file." msgstr "Žádné dříve slicované soubory." -#: src/slic3r/GUI/RammingChart.cpp:29 -msgid "NO RAMMING AT ALL" -msgstr "ŽÁDNÁ RAPIDNÍ EXTRUZE" - #: src/libslic3r/PrintConfig.cpp:2471 msgid "No sparse layers (EXPERIMENTAL)" msgstr "Bez řídkých vrstev (EXPERIMENTÁLNÍ)" @@ -8055,18 +7635,10 @@ msgstr "Žádné" msgid "Normal" msgstr "Normální" -#: src/slic3r/GUI/Plater.cpp:1428 -msgid "normal mode" -msgstr "normální režim" - #: src/slic3r/GUI/GCodeViewer.cpp:3754 msgid "Normal mode" msgstr "Normální režim" -#: src/libslic3r/miniz_extension.cpp:105 -msgid "not a ZIP archive" -msgstr "není ZIP archiv" - #: src/slic3r/GUI/BedShapeDialog.cpp:317 src/slic3r/GUI/BedShapeDialog.cpp:388 msgid "Not found:" msgstr "Nenalezeno:" @@ -8102,10 +7674,6 @@ msgstr[3] "" "Upozorňujeme, že tyto tiskárny budou po smazání vybraného přednastavení " "odstraněny." -#: src/slic3r/GUI/GUI_Preview.cpp:728 -msgid "NOTE:" -msgstr "POZNÁMKA:" - #: src/slic3r/GUI/Tab.cpp:2249 msgid "" "Note: All parameters from this group are moved to the Physical Printer " @@ -8147,14 +7715,14 @@ msgstr "Poznámka: Je vyžadován OctoPrint ve verzi alespoň 1.1.0." msgid "Note: Repetier version at least 0.90.0 is required." msgstr "Poznámka: Je vyžadována verze Repetier alespoň 0.90.0." -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1197 -msgid "Note: some shortcuts work in (non)editing mode only." -msgstr "Poznámka: některé zkratky nefungují v režimu editace." - #: src/slic3r/GUI/SavePresetDialog.cpp:137 msgid "Note: This preset will be replaced after saving" msgstr "Upozornění: Taoto přednastavení bude po uložení nahrazeno" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1197 +msgid "Note: some shortcuts work in (non)editing mode only." +msgstr "Poznámka: některé zkratky nefungují v režimu editace." + #: src/slic3r/GUI/Tab.cpp:1716 src/slic3r/GUI/Tab.cpp:1717 #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 @@ -8173,14 +7741,14 @@ msgstr "Oznámení" msgid "Notify about new releases" msgstr "Upozornění na nové verze" -#: src/slic3r/GUI/ConfigWizard.cpp:262 -msgid "nozzle" -msgstr "tryska" - #: src/slic3r/GUI/Tab.cpp:1984 msgid "Nozzle" msgstr "Tryska" +#: src/slic3r/GUI/ConfigWizard.cpp:1475 +msgid "Nozzle Diameter:" +msgstr "Průměr trysky:" + #: src/slic3r/GUI/ConfigWizard.cpp:1547 msgid "Nozzle and Bed Temperatures" msgstr "Teplota trysky a tiskové podložky" @@ -8190,10 +7758,6 @@ msgstr "Teplota trysky a tiskové podložky" msgid "Nozzle diameter" msgstr "Průměr trysky" -#: src/slic3r/GUI/ConfigWizard.cpp:1475 -msgid "Nozzle Diameter:" -msgstr "Průměr trysky:" - #: src/libslic3r/PrintConfig.cpp:2793 msgid "Nozzle temperature" msgstr "Teplota trysky" @@ -8283,13 +7847,9 @@ msgstr "" msgid "Number of tool changes" msgstr "Počet změn nástroje" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "object" -msgid_plural "objects" -msgstr[0] "objekt" -msgstr[1] "objektů" -msgstr[2] "objektů" -msgstr[3] "objektů" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 +msgid "Object Settings to modify" +msgstr "Změna nastavení objektu" #: src/slic3r/GUI/Tab.cpp:4709 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" @@ -8316,10 +7876,6 @@ msgstr "Objekt nebo Instanci" msgid "Object reordered" msgstr "Zěna pořadí objektů" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 -msgid "Object Settings to modify" -msgstr "Změna nastavení objektu" - #: src/slic3r/GUI/Plater.cpp:2536 #, c-format, boost-format msgid "" @@ -8355,10 +7911,6 @@ msgstr "" "extruderu, aby se ušetřil materiál, který by jinak skončil v čistící věži. " "Výsledkem budou objekty s náhodně mixovanými barvami." -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "objects" -msgstr "objekty" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:201 msgid "Objects List" msgstr "Seznam Objektů" @@ -8371,15 +7923,6 @@ msgstr "Octagram Spiral" msgid "OctoPrint version" msgstr "Verze OctoPrintu" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 -msgid "of a current Object" -msgstr "současného Objektu" - -#: src/slic3r/GUI/PrintHostDialogs.cpp:251 -msgctxt "OfFile" -msgid "Size" -msgstr "OfFile||Velikost" - #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:32 msgid "Offset" msgstr "Odsazení" @@ -8392,14 +7935,14 @@ msgstr "" "Odsazení límce od tištěného objektu. Odsazení se aplikuje po kompenzaci " "rozplácnutí první vrstvy." -#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 -msgid "Old regular layout with the tab bar" -msgstr "Původní rozložení s panelem karet" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 msgid "Old Value" msgstr "Stará hodnota" +#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 +msgid "Old regular layout with the tab bar" +msgstr "Původní rozložení s panelem karet" + #: src/slic3r/GUI/Preferences.cpp:210 msgid "" "On OSX there is always only one instance of app running by default. However " @@ -8482,14 +8025,6 @@ msgstr "Zvednout Z pouze pod" msgid "Only retract when crossing perimeters" msgstr "Provést retrakci pouze při přejíždění perimetrů" -#: src/slic3r/GUI/ConfigWizard.cpp:778 -msgid "" -"Only the following installed printers are compatible with the selected " -"filaments" -msgstr "" -"S vybraným filamentem jsou kompatibilní pouze následující nainstalované " -"tiskárny" - #: src/slic3r/GUI/ConfigWizard.cpp:779 msgid "" "Only the following installed printers are compatible with the selected SLA " @@ -8498,6 +8033,14 @@ msgstr "" "S vybranými SLA materiály jsou kompatibilní pouze následující nainstalované " "tiskárny" +#: src/slic3r/GUI/ConfigWizard.cpp:778 +msgid "" +"Only the following installed printers are compatible with the selected " +"filaments" +msgstr "" +"S vybraným filamentem jsou kompatibilní pouze následující nainstalované " +"tiskárny" + #: src/slic3r/GUI/Tab.cpp:1630 msgid "Ooze prevention" msgstr "Prevence odkapávání" @@ -8512,6 +8055,38 @@ msgstr "" msgid "Open &PrusaSlicer" msgstr "Otevřít &PrusaSlicer" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 +msgid "Open CA certificate file" +msgstr "Otevřít soubor s certifikátem CA" + +#: src/slic3r/GUI/HintNotification.cpp:1000 +msgid "Open Documentation in web browser." +msgstr "Otevřít dokumentaci ve webovém prohlížeči." + +#: src/slic3r/GUI/NotificationManager.cpp:664 +msgid "Open Folder." +msgstr "Otevřít složku." + +#: src/slic3r/Utils/Process.cpp:157 +msgid "Open G-code file:" +msgstr "Otevřít soubor G-code:" + +#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 +msgid "Open G-code viewer" +msgstr "Otevřít prohlížeč G-codu" + +#: src/slic3r/GUI/MainFrame.cpp:1413 +msgid "Open New Instance" +msgstr "Otevřít Novou Instanci" + +#: src/slic3r/GUI/HintNotification.cpp:908 +msgid "Open Preferences." +msgstr "Otevřít Nastavení." + +#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 +msgid "Open PrusaSlicer" +msgstr "Otevřít PrusaSlicer" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:205 src/slic3r/GUI/MainFrame.cpp:1518 msgid "Open a G-code file" msgstr "Otevřít G-code" @@ -8529,35 +8104,15 @@ msgstr "Otevřít soubor s projektem" msgid "Open as project" msgstr "Otevřít jako projekt" -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 -msgid "Open CA certificate file" -msgstr "Otevřít soubor s certifikátem CA" - #: src/slic3r/GUI/UpdateDialogs.cpp:59 src/slic3r/GUI/UpdateDialogs.cpp:133 #: src/slic3r/GUI/UpdateDialogs.cpp:191 msgid "Open changelog page" msgstr "Otevře stránku s changelogem" -#: src/slic3r/GUI/HintNotification.cpp:1000 -msgid "Open Documentation in web browser." -msgstr "Otevřít dokumentaci ve webovém prohlížeči." - #: src/slic3r/GUI/UpdateDialogs.cpp:65 msgid "Open download page" msgstr "Otevře stránku pro stažení programu" -#: src/slic3r/GUI/NotificationManager.cpp:664 -msgid "Open Folder." -msgstr "Otevřít složku." - -#: src/slic3r/Utils/Process.cpp:157 -msgid "Open G-code file:" -msgstr "Otevřít soubor G-code:" - -#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 -msgid "Open G-code viewer" -msgstr "Otevřít prohlížeč G-codu" - #: src/slic3r/GUI/GUI_App.cpp:3067 src/slic3r/GUI/GUI_App.cpp:3090 msgid "Open hyperlink in default browser?" msgstr "Otevřít hypertextový odkaz ve výchozím prohlížeči?" @@ -8570,36 +8125,24 @@ msgstr "Otevřít nový prohlížeč G-codu" msgid "Open new instance" msgstr "Otevřít novou instanci" -#: src/slic3r/GUI/MainFrame.cpp:1413 -msgid "Open New Instance" -msgstr "Otevřít Novou Instanci" - -#: src/slic3r/GUI/HintNotification.cpp:908 -msgid "Open Preferences." -msgstr "Otevřít Nastavení." - #: src/slic3r/GUI/KBShortcutsDialog.cpp:78 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater" msgstr "" "Otevřít projekt STL/OBJ/AMF/3MF s konfigurací, odstranit modely na podložce" -#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 -msgid "Open PrusaSlicer" -msgstr "Otevřít PrusaSlicer" - #: src/slic3r/GUI/MainFrame.cpp:1079 #, c-format, boost-format msgid "Open the %s website in your browser" msgstr "Otevřít webovou stránku %s v prohlížeči" -#: src/slic3r/GUI/MainFrame.cpp:1397 -msgid "Open the dialog to modify shape gallery" -msgstr "Otevřete dialogové okno pro úpravu galerie tvarů" - #: src/slic3r/GUI/MainFrame.cpp:1070 msgid "Open the Prusa3D drivers download page in your browser" msgstr "Otevřít stránku pro stahování Prusa 3D ovladačů ve vašem prohlížeči" +#: src/slic3r/GUI/MainFrame.cpp:1397 +msgid "Open the dialog to modify shape gallery" +msgstr "Otevřete dialogové okno pro úpravu galerie tvarů" + #: src/slic3r/GUI/MainFrame.cpp:1072 msgid "Open the software releases page in your browser" msgstr "Otevřít stránku s verzemi tohoto softwaru ve vašem prohlížeči" @@ -8624,6 +8167,10 @@ msgstr "" msgid "Operation already cancelling. Please wait few seconds." msgstr "Operace se ukončuje. Prosíme o chvíli strpení." +#: src/slic3r/GUI/Plater.cpp:1678 +msgid "Optimize Rotation" +msgstr "Optimalizovat Orientaci" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:23 msgid "Optimize object rotation for best surface quality." msgstr "" @@ -8646,10 +8193,6 @@ msgstr "" msgid "Optimize orientation" msgstr "Optimalizovat orientaci" -#: src/slic3r/GUI/Plater.cpp:1678 -msgid "Optimize Rotation" -msgstr "Optimalizovat Orientaci" - #: src/libslic3r/PrintConfig.cpp:373 msgid "" "Optimize travel moves in order to minimize the crossing of perimeters. This " @@ -8673,10 +8216,6 @@ msgstr "Volby pro podpěry a raft" msgid "Options:" msgstr "Možnosti:" -#: src/slic3r/GUI/DoubleSlider.cpp:1431 -msgid "or press \"+\" key" -msgstr "nebo stiskněte klávesu „+“" - #: src/slic3r/GUI/Preferences.cpp:399 msgid "Order object volumes by types" msgstr "Řazení manipulátorů objektu podle typu" @@ -8697,14 +8236,14 @@ msgstr "Počátek" msgid "Other" msgstr "Ostatní" -#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 -msgid "Other layers" -msgstr "Ostatní vrstvy" - #: src/slic3r/GUI/ConfigWizard.cpp:1322 msgid "Other Vendors" msgstr "Ostatní výrobci" +#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 +msgid "Other layers" +msgstr "Ostatní vrstvy" + #: src/libslic3r/PrintConfig.cpp:515 msgid "Outer and inner brim" msgstr "Vnější a vnitřní límec" @@ -8713,22 +8252,22 @@ msgstr "Vnější a vnitřní límec" msgid "Outer brim only" msgstr "Pouze vnější okraj" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 -msgid "Output file" -msgstr "Výstupní soubor" - #: src/libslic3r/PrintConfig.cpp:4436 msgid "Output File" msgstr "Výstupní soubor" +#: src/libslic3r/PrintConfig.cpp:4305 +msgid "Output Model Info" +msgstr "Info o výstupním modelu" + +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 +msgid "Output file" +msgstr "Výstupní soubor" + #: src/libslic3r/PrintConfig.cpp:1902 msgid "Output filename format" msgstr "Formát názvu výstupního souboru" -#: src/libslic3r/PrintConfig.cpp:4305 -msgid "Output Model Info" -msgstr "Info o výstupním modelu" - #: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4666 msgid "Output options" msgstr "Možnosti výstupu" @@ -8839,6 +8378,10 @@ msgstr "" "ve směru nebo proti směru hodinových ručiček stisknutím tlačítka Page Up nebo Page Down?" +#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 +msgid "Paint-on seam" +msgstr "Malování pozice švu" + #: resources/data/hints.ini: [hint:Paint-on seam] msgid "" "Paint-on seam\n" @@ -8851,9 +8394,10 @@ msgstr "" "počáteční/koncový bod každého perimetru? Vyzkoušejte funkci Malování " "pozice švu. (Vyžaduje režim Pokročilý nebo Expert.)" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 -msgid "Paint-on seam" -msgstr "Malování pozice švu" +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 +msgid "Paint-on supports" +msgstr "Malování podpěr" #: resources/data/hints.ini: [hint:Paint-on supports] msgid "" @@ -8867,11 +8411,6 @@ msgstr "" "nemají být podpěry? Vyzkoušejte Malování podpěr. (Vyžaduje režim " "Pokročilý nebo Expert.)" -#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 -msgid "Paint-on supports" -msgstr "Malování podpěr" - #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:674 #, boost-format msgid "Painted using: Extruder %1%" @@ -8905,10 +8444,6 @@ msgstr "" msgid "Paints only one facet." msgstr "Maluje pouze jeden facet." -#: src/slic3r/GUI/Field.cpp:193 -msgid "parameter name" -msgstr "název parametru" - #: src/slic3r/GUI/Field.cpp:269 src/slic3r/GUI/Field.cpp:343 msgid "Parameter validation" msgstr "Validace parametru" @@ -8929,14 +8464,14 @@ msgstr "" msgid "Part" msgstr "Část" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 -msgid "Part manipulation" -msgstr "Manipulace s částmi" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2481 msgid "Part Settings to modify" msgstr "Změna nastavení části" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 +msgid "Part manipulation" +msgstr "Manipulace s částmi" + #: src/libslic3r/PrintConfig.cpp:324 msgid "Password" msgstr "Heslo" @@ -8945,6 +8480,10 @@ msgstr "Heslo" msgid "Paste" msgstr "Vložit" +#: src/slic3r/GUI/Plater.cpp:6640 +msgid "Paste From Clipboard" +msgstr "Vložení ze schránky" + #: src/slic3r/GUI/MainFrame.cpp:1346 msgid "Paste clipboard" msgstr "Vložit ze schránky" @@ -8953,10 +8492,6 @@ msgstr "Vložit ze schránky" msgid "Paste from clipboard" msgstr "Vložit ze schránky" -#: src/slic3r/GUI/Plater.cpp:6640 -msgid "Paste From Clipboard" -msgstr "Vložení ze schránky" - #: src/libslic3r/PrintConfig.cpp:2697 msgid "Pattern" msgstr "Vzor" @@ -8987,16 +8522,16 @@ msgstr "Vzor použitý pro generování podpěr." msgid "Pause" msgstr "Pozastavení" -#: src/slic3r/GUI/DoubleSlider.cpp:1469 -#, boost-format -msgid "Pause print (\"%1%\")" -msgstr "Pozastavení tisku (\"%1%\")" - #: src/slic3r/GUI/Tab.cpp:2471 src/libslic3r/GCode.cpp:714 #: src/libslic3r/PrintConfig.cpp:2441 msgid "Pause Print G-code" msgstr "G-code pro pozastavení tisku" +#: src/slic3r/GUI/DoubleSlider.cpp:1469 +#, boost-format +msgid "Pause print (\"%1%\")" +msgstr "Pozastavení tisku (\"%1%\")" + #: src/libslic3r/PrintConfig.cpp:1558 msgid "Percent of a flow rate relative to object's normal layer height." msgstr "Procento průtoku vzhledem k normální výšce vrstvy objektu." @@ -9030,6 +8565,12 @@ msgstr "" "Rychlost vs. přesnost výpočtu. Nižší hodnoty mohou způsobit nežádoucí " "artefakty." +#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 +msgid "Performing desktop integration failed - Could not find executable." +msgstr "" +"Provedení integrace do systému se nezdařilo - Nepodařilo se najít " +"spustitelný soubor." + #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:232 msgid "" "Performing desktop integration failed - boost::filesystem::canonical did not " @@ -9047,12 +8588,6 @@ msgstr "" "Gcodeviewer. Odkaz na PrusaSlicer byl pravděpodobně na ploše úspěšně " "vytvořen." -#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 -msgid "Performing desktop integration failed - Could not find executable." -msgstr "" -"Provedení integrace do systému se nezdařilo - Nepodařilo se najít " -"spustitelný soubor." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:378 msgid "" "Performing desktop integration failed because the application directory was " @@ -9069,10 +8604,6 @@ msgstr "Perimetr" msgid "Perimeter extruder" msgstr "Extruder pro perimetry" -#: src/slic3r/GUI/PresetHints.cpp:171 -msgid "perimeters" -msgstr "perimetry" - #: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1955 #: src/libslic3r/PrintConfig.cpp:1969 src/libslic3r/PrintConfig.cpp:1979 msgid "Perimeters" @@ -9148,6 +8679,10 @@ msgstr "Šířka podpěrného hrotu" msgid "Place bearings in slots and resume printing" msgstr "Vložte ložiska do otvorů a pokračujte v tisku" +#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 +msgid "Place on face" +msgstr "Umístit plochou na podložku" + #: resources/data/hints.ini: [hint:Place on face] msgid "" "Place on face\n" @@ -9160,10 +8695,6 @@ msgstr "" "ležela na podložce? Vyberte funkci Place on face nebo stiskněte " "klávesu F." -#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 -msgid "Place on face" -msgstr "Umístit plochou na podložku" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:181 src/slic3r/GUI/MainFrame.cpp:284 #: src/slic3r/GUI/MainFrame.cpp:333 src/slic3r/GUI/MainFrame.cpp:445 #: src/slic3r/GUI/MainFrame.cpp:448 src/slic3r/GUI/MainFrame.cpp:470 @@ -9205,10 +8736,6 @@ msgstr "Pozice" msgid "Position (for multi-extruder printers)" msgstr "Pozice (pro tiskárny s více extrudery)" -#: src/libslic3r/PrintConfig.cpp:2215 -msgid "Position of perimeters starting points." -msgstr "Pozice začátku perimetrů." - #: src/libslic3r/PrintConfig.cpp:2968 msgid "Position X" msgstr "Pozice X" @@ -9217,6 +8744,10 @@ msgstr "Pozice X" msgid "Position Y" msgstr "Pozice Y" +#: src/libslic3r/PrintConfig.cpp:2215 +msgid "Position of perimeters starting points." +msgstr "Pozice začátku perimetrů." + #: src/slic3r/GUI/Tab.cpp:1763 msgid "Post processing scripts shall modify G-code file in place." msgstr "Post-processing skripty musí G-code upravit in place." @@ -9315,11 +8846,6 @@ msgstr "" msgid "Preset with name \"%1%\" already exists." msgstr "Přednastavení s názvem \"%1%\" již existuje." -#: src/slic3r/GUI/SavePresetDialog.cpp:221 -msgctxt "PresetName" -msgid "Copy" -msgstr "Kopie" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 msgid "" "Presets are different.\n" @@ -9382,10 +8908,6 @@ msgstr "Dříve slicovaný soubor (" msgid "Prime all printing extruders" msgstr "Příprava všech tiskových extruderů" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 -msgid "print" -msgstr "tisk" - #: src/slic3r/GUI/GCodeViewer.cpp:3506 src/slic3r/GUI/GCodeViewer.cpp:3541 msgid "Print" msgstr "Tisk" @@ -9394,14 +8916,6 @@ msgstr "Tisk" msgid "Print &Host Upload Queue" msgstr "Fronta na&hrávání do tiskového serveru" -#: src/libslic3r/PrintConfig.cpp:753 -msgid "" -"Print contour perimeters from the outermost one to the innermost one instead " -"of the default inverse order." -msgstr "" -"Tisk obrysových perimetrů od vnějších po vnitřní namísto opačného výchozího " -"pořadí." - #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Print Diameters" msgstr "Parametry extruderu" @@ -9410,6 +8924,23 @@ msgstr "Parametry extruderu" msgid "Print Host upload" msgstr "Nahrávání do tiskového serveru" +#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 +#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +msgid "Print Settings" +msgstr "Nastavení tisku" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 +msgid "Print Settings Tab" +msgstr "Panel Nastavení tisku" + +#: src/libslic3r/PrintConfig.cpp:753 +msgid "" +"Print contour perimeters from the outermost one to the innermost one instead " +"of the default inverse order." +msgstr "" +"Tisk obrysových perimetrů od vnějších po vnitřní namísto opačného výchozího " +"pořadí." + #: src/slic3r/GUI/KBShortcutsDialog.cpp:114 #: src/slic3r/GUI/PrintHostDialogs.cpp:217 msgid "Print host upload queue" @@ -9423,20 +8954,11 @@ msgstr "Režim tisku" msgid "Print pauses" msgstr "Pauzy tisku" -#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 -msgid "Print Settings" -msgstr "Nastavení tisku" - #: src/slic3r/GUI/GCodeViewer.cpp:3693 src/slic3r/GUI/GCodeViewer.cpp:3715 #: src/slic3r/GUI/GUI.cpp:337 src/slic3r/GUI/Plater.cpp:817 msgid "Print settings" msgstr "Nastavení tisku" -#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 -msgid "Print Settings Tab" -msgstr "Panel Nastavení tisku" - #: src/libslic3r/PrintConfig.cpp:3774 msgid "Print speed" msgstr "Rychlost tisku" @@ -9471,9 +8993,14 @@ msgstr "" msgid "Printer" msgstr "Tiskárna" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 -msgid "printer" -msgstr "tiskárna" +#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 +#: src/slic3r/GUI/Tab.hpp:490 +msgid "Printer Settings" +msgstr "Nastavení tiskárny" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 +msgid "Printer Settings Tab" +msgstr "Panel Nastavení tiskárny" #: src/libslic3r/PrintConfig.cpp:3215 src/libslic3r/PrintConfig.cpp:3216 msgid "Printer absolute correction" @@ -9483,10 +9010,6 @@ msgstr "Absolutní korekce tiskárny" msgid "Printer gamma correction" msgstr "Gamma korekce tiskárny" -#: src/slic3r/GUI/Tab.cpp:1375 -msgid "printer model" -msgstr "model tiskárny" - #: src/libslic3r/PrintConfig.cpp:2011 msgid "Printer notes" msgstr "Poznámky o tiskárně" @@ -9495,6 +9018,18 @@ msgstr "Poznámky o tiskárně" msgid "Printer preset names" msgstr "Názvy přednastavení tiskáren" +#: src/libslic3r/PrintConfig.cpp:3192 +msgid "Printer scaling X axis correction" +msgstr "Korekce měřítka v ose X" + +#: src/libslic3r/PrintConfig.cpp:3200 +msgid "Printer scaling Y axis correction" +msgstr "Korekce měřítka v ose Y" + +#: src/libslic3r/PrintConfig.cpp:3208 +msgid "Printer scaling Z axis correction" +msgstr "Korekce měřítka v ose Z" + #: src/libslic3r/PrintConfig.cpp:3183 src/libslic3r/PrintConfig.cpp:3184 #: src/libslic3r/PrintConfig.cpp:3185 msgid "Printer scaling correction" @@ -9512,27 +9047,6 @@ msgstr "Korekce měřítka v ose Y" msgid "Printer scaling correction in Z axis" msgstr "Korekce měřítka v ose Z" -#: src/libslic3r/PrintConfig.cpp:3192 -msgid "Printer scaling X axis correction" -msgstr "Korekce měřítka v ose X" - -#: src/libslic3r/PrintConfig.cpp:3200 -msgid "Printer scaling Y axis correction" -msgstr "Korekce měřítka v ose Y" - -#: src/libslic3r/PrintConfig.cpp:3208 -msgid "Printer scaling Z axis correction" -msgstr "Korekce měřítka v ose Z" - -#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 -msgid "Printer Settings" -msgstr "Nastavení tiskárny" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 -msgid "Printer Settings Tab" -msgstr "Panel Nastavení tiskárny" - #: src/libslic3r/PrintConfig.cpp:223 src/libslic3r/PrintConfig.cpp:224 msgid "Printer technology" msgstr "Technologie tisku" @@ -9624,6 +9138,11 @@ msgstr "Prusa tiskárny technologie FFF" msgid "Prusa MSLA Technology Printers" msgstr "Prusa tiskárny technologie MSLA" +#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 +msgid "PrusaSlicer GUI initialization failed" +msgstr "" +"Inicializace grafického uživatelského rozhraní PrusaSliceru se nezdařila" + #: src/slic3r/GUI/GUI_App.cpp:1330 #, boost-format msgid "" @@ -9655,11 +9174,6 @@ msgstr "PrusaSlicer detekoval úložiště SSL certifikátu v: %1%" msgid "PrusaSlicer error" msgstr "Chyba programu PrusaSlicer" -#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 -msgid "PrusaSlicer GUI initialization failed" -msgstr "" -"Inicializace grafického uživatelského rozhraní PrusaSliceru se nezdařila" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:84 #, boost-format msgid "PrusaSlicer has encountered a fatal error: \"%1%\"" @@ -10001,6 +9515,16 @@ msgstr "Obvyklý" msgid "Regular expression" msgstr "Regulární výraz" +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" +"Relativní adresování extruderu vyžaduje resetování polohy extruderu v každé " +"vrstvě, aby se zabránilo ztrátě přesnosti s plovoucí desetinnou čárkou. Do " +"layer_gcode přidejte \"G92 E0\"." + #: src/slic3r/GUI/Preferences.cpp:435 msgid "Release only" msgstr "Pouze stabilní verze" @@ -10009,6 +9533,11 @@ msgstr "Pouze stabilní verze" msgid "Reload all from disk" msgstr "Vše znovu načíst z disku" +#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 +#: src/slic3r/GUI/Plater.cpp:3548 +msgid "Reload from disk" +msgstr "Znovu načíst z disku" + #: resources/data/hints.ini: [hint:Reload from disk] msgid "" "Reload from disk\n" @@ -10022,11 +9551,6 @@ msgstr "" "model ve 3D zobrazení a zvolte možnost Znovu načíst z disku. Více informací " "najdete v dokumentaci." -#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 -msgid "Reload from disk" -msgstr "Znovu načíst z disku" - #: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 msgid "Reload from:" msgstr "Znovu načíst z:" @@ -10064,15 +9588,19 @@ msgstr "Zapamatovat moji volbu" msgid "Remember output directory" msgstr "Pamatovat si výstupní složku" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "remove" -msgstr "odebrat" - #: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/BedShapeDialog.cpp:362 #: src/slic3r/GUI/Tab.cpp:3734 msgid "Remove" msgstr "Odebrat" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 +msgid "Remove Instance of the selected object" +msgstr "Odebrat instanci vybraného objektu" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 +msgid "Remove Multi Material painting" +msgstr "Odstranění Multimateriálového malování" + #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:38 msgid "Remove all holes" msgstr "Odebrat všechny otvory" @@ -10098,18 +9626,10 @@ msgstr "Odebrat extruder ze seznamu" msgid "Remove instance" msgstr "Odebrat instanci" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 -msgid "Remove Instance of the selected object" -msgstr "Odebrat instanci vybraného objektu" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:160 msgid "Remove layer range" msgstr "Odstranit rozsah vrstev" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 -msgid "Remove Multi Material painting" -msgstr "Odstranění Multimateriálového malování" - #: src/slic3r/GUI/GUI_Factories.cpp:1087 msgid "Remove one instance of the selected object" msgstr "Odebere jednu instanci vybraného objektu" @@ -10241,11 +9761,11 @@ msgid "Repairing was canceled" msgstr "Oprava byla zrušena" #: src/slic3r/GUI/MainFrame.cpp:1285 -msgid "Repeat last quick slice" +msgid "Repeat Last Quick Slice" msgstr "Opakovat poslední rychlé slicování" #: src/slic3r/GUI/MainFrame.cpp:1285 -msgid "Repeat Last Quick Slice" +msgid "Repeat last quick slice" msgstr "Opakovat poslední rychlé slicování" #: src/slic3r/GUI/Plater.cpp:3432 @@ -10281,21 +9801,6 @@ msgstr "Nahlá&sit chybu" msgid "Report an issue on %s" msgstr "Nahlásit chybu v programu %s" -#: src/slic3r/Utils/PresetUpdater.cpp:815 -#, c-format, boost-format -msgid "requires max. %s" -msgstr "vyžaduje max. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:812 -#, c-format, boost-format -msgid "requires min. %s" -msgstr "vyžaduje min. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:808 -#, c-format, boost-format -msgid "requires min. %s and max. %s" -msgstr "vyžaduje min. %s a max. %s" - #: src/slic3r/GUI/FirmwareDialog.cpp:820 msgid "Rescan" msgstr "Skenovat" @@ -10304,6 +9809,14 @@ msgstr "Skenovat" msgid "Reset" msgstr "Výchozí" +#: src/slic3r/GUI/Plater.cpp:3003 +msgid "Reset Project" +msgstr "Resetovat Projekt" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 +msgid "Reset Rotation" +msgstr "Výchozí Natočení" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1225 msgid "Reset clipping plane" msgstr "Obnovit řezovou rovinu" @@ -10316,18 +9829,10 @@ msgstr "Obnovit řezovou rovinu" msgid "Reset direction" msgstr "Resetovat směr" -#: src/slic3r/GUI/Plater.cpp:3003 -msgid "Reset Project" -msgstr "Resetovat Projekt" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363 msgid "Reset rotation" msgstr "Výchozí natočení" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 -msgid "Reset Rotation" -msgstr "Výchozí Natočení" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:398 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:400 msgid "Reset scale" @@ -10339,14 +9844,14 @@ msgstr "Výchozí měřítko" msgid "Reset selection" msgstr "Resetovat výběr" -#: src/slic3r/GUI/GLCanvas3D.cpp:237 -msgid "Reset to base" -msgstr "Obnovit na výchozí" - #: src/slic3r/GUI/Tab.cpp:2825 msgid "Reset to Filament Color" msgstr "Obnovit na barvu filamentu" +#: src/slic3r/GUI/GLCanvas3D.cpp:237 +msgid "Reset to base" +msgstr "Obnovit na výchozí" + #: src/slic3r/GUI/GUI_App.cpp:2331 msgid "Restart application" msgstr "Restart aplikace" @@ -10368,13 +9873,6 @@ msgstr "Retrakce při změně vrstvy" msgid "Retraction" msgstr "Retrakce" -#: src/libslic3r/PrintConfig.cpp:2115 -msgid "" -"Retraction is not triggered when travel moves are shorter than this length." -msgstr "" -"Retrakce není spuštěna, pokud jsou rychloposuny pojezdu kratší než tato " -"délka." - #: src/libslic3r/PrintConfig.cpp:2136 msgid "Retraction Length" msgstr "Vzdálenost retrakce" @@ -10387,6 +9885,13 @@ msgstr "Vzdálenost retrakce (při změně extruderu)" msgid "Retraction Speed" msgstr "Rychlost retrakce" +#: src/libslic3r/PrintConfig.cpp:2115 +msgid "" +"Retraction is not triggered when travel moves are shorter than this length." +msgstr "" +"Retrakce není spuštěna, pokud jsou rychloposuny pojezdu kratší než tato " +"délka." + #: src/slic3r/GUI/Tab.cpp:2818 msgid "" "Retraction when tool is disabled (advanced settings for multi-extruder " @@ -10423,6 +9928,14 @@ msgstr "Zkontrolujte náhrady a případně je upravte." msgid "Right" msgstr "Zprava" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +msgid "Right Preset Value" +msgstr "Hodnota pravého přednastavení" + +#: src/slic3r/GUI/MainFrame.cpp:1129 +msgid "Right View" +msgstr "Pohled zprava" + #: src/slic3r/GUI/GUI_ObjectList.cpp:488 msgid "Right button click the icon to change the object printable property" msgstr "" @@ -10452,14 +9965,6 @@ msgstr "Pravé tlačítko myši" msgid "Right mouse button:" msgstr "Pravé tlačítko myši:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 -msgid "Right Preset Value" -msgstr "Hodnota pravého přednastavení" - -#: src/slic3r/GUI/MainFrame.cpp:1129 -msgid "Right View" -msgstr "Pohled zprava" - #: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:466 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:543 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562 @@ -10526,16 +10031,6 @@ msgstr "Spustit %s" msgid "Running post-processing scripts" msgstr "Vykonávají se postprodukční skripty" -#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 -#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 -#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 -#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 -#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 -#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 -#: src/libslic3r/PrintConfig.cpp:3349 -msgid "s" -msgstr "s" - #: src/slic3r/GUI/MainFrame.cpp:1231 src/slic3r/GUI/MainFrame.cpp:1580 msgid "S&end G-code" msgstr "Od&eslat G-code" @@ -10544,6 +10039,60 @@ msgstr "Od&eslat G-code" msgid "S&end to print" msgstr "Od&eslat do tiskárny" +#: src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Material Profiles Selection" +msgstr "Výběr SLA materiálových profilů" + +#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Materials" +msgstr "SLA Materiály" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 +msgid "SLA Support Points" +msgstr "SLA Podpěrné Body" + +#: src/slic3r/GUI/ConfigWizard.cpp:2102 +msgid "SLA Technology Printers" +msgstr "Tiskárny technologie SLA" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 +msgid "SLA gizmo keyboard shortcuts" +msgstr "Klávesové zkratky pro SLA gizma" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +msgid "SLA material" +msgstr "SLA materiál" + +#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 +msgid "SLA material type" +msgstr "Typ SLA materiálu" + +#: src/slic3r/GUI/ConfigWizard.cpp:752 +msgid "SLA materials" +msgstr "SLA materiály" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +msgid "SLA print" +msgstr "SLA tisk" + +#: src/libslic3r/PrintConfig.cpp:3382 +msgid "SLA print material notes" +msgstr "Poznámky pro SLA materiál" + +#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 +msgid "SLA print settings" +msgstr "Nastavení SLA tisku" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6369 +msgid "SLA supports outside the print area were detected." +msgstr "Byly zjištěny SLA podpěry mimo tiskovou oblast." + +#: src/slic3r/GUI/MainFrame.cpp:1661 +msgid "SVG" +msgstr "SVG" + #. TRN To be shown in Print Settings "Bottom contact Z distance". Have to be as short as possible #. TRN To be shown in Print Settings "Bottom interface layers". Have to be as short as possible #: src/libslic3r/PrintConfig.cpp:2576 src/libslic3r/PrintConfig.cpp:2661 @@ -10564,6 +10113,22 @@ msgstr "Uložit %s jako:" msgid "Save %s file as:" msgstr "Uložit %s soubor jako:" +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save G-code file as:" +msgstr "Uložit G-code jako:" + +#: src/slic3r/GUI/MainFrame.cpp:1736 +msgid "Save OBJ file (less prone to coordinate errors than STL) as:" +msgstr "Uložit soubor OBJ (méně náchylný na chyby souřadnic než STL) jako:" + +#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 +msgid "Save Project &as" +msgstr "Uložit Projekt j&ako" + +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save SL1 / SL1S file as:" +msgstr "Uložit SL1 / SL1S soubor jako:" + #: src/libslic3r/PrintConfig.cpp:4310 msgid "Save config file" msgstr "Uložit konfigurační soubor" @@ -10594,14 +10159,6 @@ msgstr "Uložit stávající projekt jako" msgid "Save file as:" msgstr "Uložit soubor jako:" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save G-code file as:" -msgstr "Uložit G-code jako:" - -#: src/slic3r/GUI/MainFrame.cpp:1736 -msgid "Save OBJ file (less prone to coordinate errors than STL) as:" -msgstr "Uložit soubor OBJ (méně náchylný na chyby souřadnic než STL) jako:" - #: src/slic3r/GUI/SavePresetDialog.cpp:191 #: src/slic3r/GUI/SavePresetDialog.cpp:197 msgid "Save preset" @@ -10615,10 +10172,6 @@ msgstr "Uložit balík přednastavení jako:" msgid "Save project" msgstr "Uložit projekt" -#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 -msgid "Save Project &as" -msgstr "Uložit Projekt j&ako" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:79 msgid "Save project (3mf)" msgstr "Uložit projekt (3mf)" @@ -10627,10 +10180,6 @@ msgstr "Uložit projekt (3mf)" msgid "Save project as (3mf)" msgstr "Uložit projekt jako (3mf)" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save SL1 / SL1S file as:" -msgstr "Uložit SL1 / SL1S soubor jako:" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:898 msgid "Save support points?" msgstr "Uložit podpěrné body?" @@ -10662,6 +10211,10 @@ msgstr "Ukládání meshe do 3MF kontejneru selhalo." msgid "Scale" msgstr "Měřítko" +#: src/slic3r/GUI/Selection.cpp:950 +msgid "Scale To Fit" +msgstr "Vyplnit tiskový objem" + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:523 msgid "Scale factors" msgstr "Měřítka" @@ -10676,10 +10229,6 @@ msgstr "" msgid "Scale to Fit" msgstr "Vyplnit tiskový objem" -#: src/slic3r/GUI/Selection.cpp:950 -msgid "Scale To Fit" -msgstr "Vyplnit tiskový objem" - #: src/libslic3r/PrintConfig.cpp:4405 msgid "Scale to fit the given volume." msgstr "Změnit velikost, aby se objekt vešel do zadaného tiskového prostoru." @@ -10768,13 +10317,39 @@ msgstr "Druhá barva" msgid "See Download page." msgstr "Viz stránka ke stažení." +#: src/slic3r/GUI/GUI_App.cpp:1219 +msgid "See Releases page." +msgstr "Viz stránka s releasy." + #: src/slic3r/GUI/NotificationManager.hpp:753 msgid "See more." msgstr "Více." -#: src/slic3r/GUI/GUI_App.cpp:1219 -msgid "See Releases page." -msgstr "Viz stránka s releasy." +#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 +msgid "Select Filament Settings Tab" +msgstr "Zobrazit panel Nastavení filamentu" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 +msgid "Select Plater Tab" +msgstr "Zobrazit panel Podložka" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 +msgid "Select Print Settings Tab" +msgstr "Zobrazit panel Nastavení tisku" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 +msgid "Select Printer Settings Tab" +msgstr "Zobrazit panel Nastavení tiskárny" + +#: src/slic3r/GUI/DoubleSlider.cpp:2532 +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/FirmwareDialog.cpp:813 msgid "Select a file" @@ -10812,26 +10387,10 @@ msgstr "Zvolte konfiguraci k načtení:" msgid "Select coordinate space, in which the transformation will be performed." msgstr "Vyberte souřadnicový prostor, ve kterém bude provedena transformace." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 -msgid "Select Filament Settings Tab" -msgstr "Zobrazit panel Nastavení filamentu" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 -msgid "Select Plater Tab" -msgstr "Zobrazit panel Podložka" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 msgid "Select presets to compare" msgstr "Zvolte přednastavení k porovnání" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 -msgid "Select Print Settings Tab" -msgstr "Zobrazit panel Nastavení tisku" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 -msgid "Select Printer Settings Tab" -msgstr "Zobrazit panel Nastavení tiskárny" - #: src/slic3r/GUI/GalleryDialog.cpp:76 msgid "Select shape from the gallery" msgstr "Vyberte tvar z galerie" @@ -10840,6 +10399,10 @@ msgstr "Vyberte tvar z galerie" msgid "Select showing settings" msgstr "Zvolte nastavení zobrazení" +#: src/slic3r/GUI/MainFrame.cpp:1726 +msgid "Select the STL file to repair:" +msgstr "Vyberte STL soubor k opravě:" + #: src/slic3r/GUI/GUI_App.cpp:2010 msgid "Select the language" msgstr "Výběr jazyka" @@ -10856,10 +10419,6 @@ msgstr "Vyberte tiskové profily, s nimiž je tento profil kompatibilní." msgid "Select the printers this profile is compatible with." msgstr "Vyberte tiskárny, s nimiž je tento profil kompatibilní." -#: src/slic3r/GUI/MainFrame.cpp:1726 -msgid "Select the STL file to repair:" -msgstr "Vyberte STL soubor k opravě:" - #: src/slic3r/GUI/Preferences.cpp:709 msgid "Select toolbar icon size in respect to the default one." msgstr "Vyberte velikost ikon na panelu nástrojů vzhledem k výchozí velikosti." @@ -10876,16 +10435,6 @@ msgstr "Vyberte, jaký typ podložky potřebujete" msgid "Select what kind of support do you need" msgstr "Vyberte typ podpěr, které potřebujete" -#: src/slic3r/GUI/DoubleSlider.cpp:2532 -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:168 msgid "Selection-Add" msgstr "Výběr - Přidání" @@ -10894,14 +10443,6 @@ msgstr "Výběr - Přidání" msgid "Selection-Add All" msgstr "Výběr - Označení všeho" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 -msgid "Selection-Add from list" -msgstr "Výběr - Přidání v seznamu" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6446 -msgid "Selection-Add from rectangle" -msgstr "Výběr - Přidání obdélníkovým výběrem" - #: src/slic3r/GUI/Selection.cpp:278 msgid "Selection-Add Instance" msgstr "Výběr - Přidání Instance" @@ -10910,6 +10451,14 @@ msgstr "Výběr - Přidání Instance" msgid "Selection-Add Object" msgstr "Výběr - Přidání Objektu" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 +msgid "Selection-Add from list" +msgstr "Výběr - Přidání v seznamu" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6446 +msgid "Selection-Add from rectangle" +msgstr "Výběr - Přidání obdélníkovým výběrem" + #: src/slic3r/GUI/Selection.cpp:209 msgid "Selection-Remove" msgstr "Výběr - Odebrání" @@ -10918,14 +10467,6 @@ msgstr "Výběr - Odebrání" msgid "Selection-Remove All" msgstr "Výběr - Zrušení" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 -msgid "Selection-Remove from list" -msgstr "Výběr - Odebrání v seznamu" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6461 -msgid "Selection-Remove from rectangle" -msgstr "Výběr - Odebrání obdélníkovým výběrem" - #: src/slic3r/GUI/Selection.cpp:297 msgid "Selection-Remove Instance" msgstr "Výběr - Odebrání Instance" @@ -10934,18 +10475,26 @@ msgstr "Výběr - Odebrání Instance" msgid "Selection-Remove Object" msgstr "Výběr - Odebrání Objektu" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 +msgid "Selection-Remove from list" +msgstr "Výběr - Odebrání v seznamu" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6461 +msgid "Selection-Remove from rectangle" +msgstr "Výběr - Odebrání obdélníkovým výběrem" + #: src/slic3r/GUI/MainFrame.cpp:1320 msgid "Selects all objects" msgstr "Vybrat všechny objekty" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 -msgid "Send G-code" -msgstr "Odeslat G-code" - #: src/slic3r/GUI/PrintHostDialogs.cpp:40 msgid "Send G-Code to printer host" msgstr "Odeslat G-Code do tiskového serveru" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +msgid "Send G-code" +msgstr "Odeslat G-code" + #: src/slic3r/GUI/SendSystemInfoDialog.cpp:550 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:618 msgid "Send system info" @@ -10995,6 +10544,46 @@ msgstr "Název služby" msgid "Set" msgstr "Nastavit" +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 +msgid "Set Mirror" +msgstr "Zrcadlení" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 +msgid "Set Orientation" +msgstr "Změna orientace" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 +msgid "Set Position" +msgstr "Nastavení pozice" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Printable" +msgstr "Zvolen příznak Tisknout objekt" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Printable Instance" +msgstr "Zvolen příznak Tisknout Instanci" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Printable group" +msgstr "Nastavení tisknutelné skupiny modelů" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 +msgid "Set Scale" +msgstr "Nastavení měřítka" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Unprintable" +msgstr "Odebrán příznak Tisknout objekt" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Unprintable Instance" +msgstr "Odebrán příznak Tisknout Instanci" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Unprintable group" +msgstr "Nastavení netisknutelné skupiny modelů" + #: src/slic3r/GUI/GUI_Factories.cpp:636 src/slic3r/GUI/GUI_Factories.cpp:648 msgid "Set as a Separated Object" msgstr "Změnit na samostatný objekt" @@ -11043,9 +10632,9 @@ msgstr "Nastavit levý ukazatel jako aktivní" msgid "Set lower thumb as active" msgstr "Nastavit spodní ukazatel jako aktivní" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 -msgid "Set Mirror" -msgstr "Zrcadlení" +#: src/slic3r/GUI/GUI_Factories.cpp:1090 +msgid "Set number of instances" +msgstr "Zadat počet instancí" #: resources/data/hints.ini: [hint:Set number of instances] msgid "" @@ -11057,35 +10646,11 @@ msgstr "" "Věděli jste, že můžete kliknout pravým tlačítkem myši na model a nastavit " "přesný počet instancí, místo abyste jej museli několikrát kopírovat?" -#: src/slic3r/GUI/GUI_Factories.cpp:1090 -msgid "Set number of instances" -msgstr "Zadat počet instancí" - #: src/slic3r/GUI/Plater.cpp:5573 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Nastavení počtu kopií na %d" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 -msgid "Set Orientation" -msgstr "Změna orientace" - -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 -msgid "Set Position" -msgstr "Nastavení pozice" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Printable" -msgstr "Zvolen příznak Tisknout objekt" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Printable group" -msgstr "Nastavení tisknutelné skupiny modelů" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Printable Instance" -msgstr "Zvolen příznak Tisknout Instanci" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:249 msgid "Set right thumb as active" msgstr "Nastavit pravý ukazatel jako aktivní" @@ -11094,10 +10659,6 @@ msgstr "Nastavit pravý ukazatel jako aktivní" msgid "Set ruler mode" msgstr "Nastavení režimu pravítka" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 -msgid "Set Scale" -msgstr "Nastavení měřítka" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:196 msgid "Set selected items as Printable/Unprintable" msgstr "Nastavení vybraných položek jako tisknuté/netisknuté" @@ -11257,18 +10818,6 @@ msgstr "" "maximální hloubku, které může extruder dosáhnout před kolizí s jinými, již " "vytištěnými, objekty." -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Unprintable" -msgstr "Odebrán příznak Tisknout objekt" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Unprintable group" -msgstr "Nastavení netisknutelné skupiny modelů" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Unprintable Instance" -msgstr "Odebrán příznak Tisknout Instanci" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:235 msgid "Set upper thumb as active" msgstr "Nastavit horní ukazatel jako aktivní" @@ -11292,6 +10841,10 @@ msgstr "Nastavení" msgid "Settings for height range" msgstr "Nastavení pro výškový rozsah" +#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 +msgid "Settings in non-modal window" +msgstr "Nastavení v nemodálním okně" + #: resources/data/hints.ini: [hint:Settings in non-modal window] msgid "" "Settings in non-modal window\n" @@ -11304,10 +10857,6 @@ msgstr "" "jedné obrazovce můžete mít otevřená nastavení a na druhé náhled G-codu. " "Přejděte do Nastavení a vyberte možnost Nastavení v nemodálním okně." -#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 -msgid "Settings in non-modal window" -msgstr "Nastavení v nemodálním okně" - #: src/slic3r/GUI/ConfigManipulation.cpp:167 msgid "Shall I adjust those settings for supports?" msgstr "Mám upravit tato nastavení pro podpěry?" @@ -11388,6 +10937,10 @@ msgstr "Otevřít adresář s &konfiguracemi" msgid "Show &Labels" msgstr "Zobrazit &Popisky" +#: src/slic3r/GUI/MainFrame.cpp:1097 +msgid "Show Tip of the Day" +msgstr "Ukázat Tip Dne" + #: src/slic3r/GUI/MainFrame.cpp:1092 src/slic3r/GUI/MainFrame.cpp:1095 msgid "Show about dialog" msgstr "Zobrazit okno o Slic3ru" @@ -11476,14 +11029,14 @@ msgstr "Zobrazit 3D náhled vrstev" msgid "Show the filament settings" msgstr "Zobrazit nastavení filamentu" -#: src/libslic3r/PrintConfig.cpp:4296 -msgid "Show the full list of print/G-code configuration options." -msgstr "Zobrazit kompletní seznam možností konfigurace tisku / G-codu." - #: src/libslic3r/PrintConfig.cpp:4301 msgid "Show the full list of SLA print configuration options." msgstr "Zobrazit kompletní seznam možností konfigurace SLA tisku." +#: src/libslic3r/PrintConfig.cpp:4296 +msgid "Show the full list of print/G-code configuration options." +msgstr "Zobrazit kompletní seznam možností konfigurace tisku / G-codu." + #: src/slic3r/GUI/MainFrame.cpp:1100 msgid "Show the list of the keyboard shortcuts" msgstr "Zobrazit seznam klávesových zkratek" @@ -11504,10 +11057,6 @@ msgstr "Zobrazit nastavení tiskárny" msgid "Show this help." msgstr "Zobrazí tuto nápovědu." -#: src/slic3r/GUI/MainFrame.cpp:1097 -msgid "Show Tip of the Day" -msgstr "Ukázat Tip Dne" - #: src/slic3r/GUI/MainFrame.cpp:1087 msgid "Show user configuration folder (datadir)" msgstr "Zobrazit uživatelský adresář konfigurace (datadir)" @@ -11546,14 +11095,14 @@ msgstr "Zobrazit/skrýt popisky objektů/instancí" msgid "Simple" msgstr "Jednoduchý" -#: src/slic3r/GUI/ConfigWizard.cpp:1279 -msgid "Simple mode" -msgstr "Jednoduchý režim" - #: src/slic3r/GUI/GUI_App.cpp:2237 msgid "Simple View Mode" msgstr "Jednoduchý režim" +#: src/slic3r/GUI/ConfigWizard.cpp:1279 +msgid "Simple mode" +msgstr "Jednoduchý režim" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:156 msgid "Simplification is currently only allowed when a single part is selected" msgstr "" @@ -11585,10 +11134,6 @@ msgstr "" msgid "Simplify model" msgstr "Zjednodušit model" -#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 -msgid "Single extruder MM setup" -msgstr "Nastavení jednoho extruderu MM" - #: src/libslic3r/PrintConfig.cpp:2459 msgid "Single Extruder Multi Material" msgstr "MultiMaterial tisk s jedním extrudérem" @@ -11605,6 +11150,10 @@ msgstr "" "Chcete nastavit průměry všech extruderových trysek podle průměru prvního " "extruderu?" +#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 +msgid "Single extruder MM setup" +msgstr "Nastavení jednoho extruderu MM" + #: src/slic3r/GUI/Tab.cpp:2734 msgid "Single extruder multimaterial parameters" msgstr "Parametry jednoho multi materiálového extruderu" @@ -11635,6 +11184,10 @@ msgstr "Rozměr obdélníkové tiskové podložky v ose X a Y." msgid "Skirt" msgstr "Obrys" +#: src/libslic3r/PrintConfig.cpp:2282 +msgid "Skirt Loops" +msgstr "Počet obrysových smyček" + #: src/slic3r/GUI/GUI_Factories.cpp:136 src/slic3r/GUI/Tab.cpp:1536 #: src/libslic3r/PrintConfig.cpp:494 src/libslic3r/PrintConfig.cpp:505 #: src/libslic3r/PrintConfig.cpp:521 @@ -11645,65 +11198,11 @@ msgstr "Obrys a límec" msgid "Skirt height" msgstr "Výška obrysu" -#: src/libslic3r/PrintConfig.cpp:2282 -msgid "Skirt Loops" -msgstr "Počet obrysových smyček" - #: src/slic3r/GUI/GUI_Preview.cpp:248 src/libslic3r/ExtrusionEntity.cpp:327 #: src/libslic3r/ExtrusionEntity.cpp:358 msgid "Skirt/Brim" msgstr "Obrys/Límec" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 -msgid "SLA gizmo keyboard shortcuts" -msgstr "Klávesové zkratky pro SLA gizma" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 -msgid "SLA material" -msgstr "SLA materiál" - -#: src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Material Profiles Selection" -msgstr "Výběr SLA materiálových profilů" - -#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 -msgid "SLA material type" -msgstr "Typ SLA materiálu" - -#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Materials" -msgstr "SLA Materiály" - -#: src/slic3r/GUI/ConfigWizard.cpp:752 -msgid "SLA materials" -msgstr "SLA materiály" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 -msgid "SLA print" -msgstr "SLA tisk" - -#: src/libslic3r/PrintConfig.cpp:3382 -msgid "SLA print material notes" -msgstr "Poznámky pro SLA materiál" - -#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 -msgid "SLA print settings" -msgstr "Nastavení SLA tisku" - -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 -msgid "SLA Support Points" -msgstr "SLA Podpěrné Body" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6369 -msgid "SLA supports outside the print area were detected." -msgstr "Byly zjištěny SLA podpěry mimo tiskovou oblast." - -#: src/slic3r/GUI/ConfigWizard.cpp:2102 -msgid "SLA Technology Printers" -msgstr "Tiskárny technologie SLA" - #: src/slic3r/GUI/GUI_Factories.cpp:461 msgid "Slab" msgstr "Deska" @@ -11798,6 +11297,14 @@ msgstr "Slicovaný objekt \"%1%\" vypadá jako logo nebo nápis" msgid "Slicing" msgstr "Slicování" +#: src/slic3r/GUI/MainFrame.cpp:1710 +msgid "Slicing Done!" +msgstr "Slicování dokončeno!" + +#: src/libslic3r/PrintConfig.cpp:2489 +msgid "Slicing Mode" +msgstr "Režim slicování" + #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:162 #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:204 msgid "Slicing complete" @@ -11807,10 +11314,6 @@ msgstr "Slicování dokončeno" msgid "Slicing done" msgstr "Slicování dokončeno" -#: src/slic3r/GUI/MainFrame.cpp:1710 -msgid "Slicing Done!" -msgstr "Slicování dokončeno!" - #: src/slic3r/GUI/NotificationManager.cpp:1113 msgid "Slicing finished." msgstr "Slicování dokončeno." @@ -11822,10 +11325,6 @@ msgstr "" "Slicování muselo být zastaveno kvůli vnitřní chybě: Nekonzistentní index " "řezů." -#: src/libslic3r/PrintConfig.cpp:2489 -msgid "Slicing Mode" -msgstr "Režim slicování" - #: src/libslic3r/SLAPrintSteps.cpp:47 msgid "Slicing model" msgstr "Slicuji model" @@ -11884,10 +11383,6 @@ msgstr "Přiléhavý" msgid "Software &Releases" msgstr "Vydané ve&rze" -#: src/slic3r/GUI/PresetHints.cpp:176 -msgid "solid infill" -msgstr "plná výplň" - #: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:322 #: src/libslic3r/ExtrusionEntity.cpp:348 src/libslic3r/PrintConfig.cpp:2342 #: src/libslic3r/PrintConfig.cpp:2354 @@ -11902,6 +11397,10 @@ msgstr "Plná výplň každou" msgid "Solid infill extruder" msgstr "Extruder pro plnou výplň" +#: src/libslic3r/PrintConfig.cpp:2313 +msgid "Solid infill threshold area" +msgstr "Prahová oblast s plnou výplní" + #: resources/data/hints.ini: [hint:Solid infill threshold area] msgid "" "Solid infill threshold area\n" @@ -11914,10 +11413,6 @@ msgstr "" "plnou výplní? Nastavit Prahovou oblast s plnou výplní. (Pouze v " "režimu Expert.)" -#: src/libslic3r/PrintConfig.cpp:2313 -msgid "Solid infill threshold area" -msgstr "Prahová oblast s plnou výplní" - #: src/slic3r/GUI/Tab.cpp:1470 src/libslic3r/PrintConfig.cpp:2367 msgid "Solid layers" msgstr "Plných vrstev" @@ -11930,17 +11425,6 @@ msgstr "Rozpustný materiál" msgid "Soluble material is most likely used for a soluble support." msgstr "Rozpustný materiál je převážně používán pro tisk rozpustných podpěr." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 -msgid "" -"Some fields are too long to fit. Right mouse click reveals the full text." -msgstr "" -"Některá pole jsou příliš dlouhá a nevejdou se. Kliknutím pravým tlačítkem " -"myši zobrazíte celý text." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some filaments were uninstalled." -msgstr "Některé filamenty byly odinstalovány." - #: src/libslic3r/PrintConfig.cpp:1321 msgid "" "Some G/M-code commands, including temperature control and others, are not " @@ -11953,6 +11437,25 @@ msgstr "" "kompatibilního výstupu. Příkazy typu \"No extrusion\" zabraňují PrusaSliceru " "zcela exportovat jakoukoliv hodnotu extruze." +#: src/slic3r/GUI/ConfigWizard.cpp:2696 +msgid "Some Printers were uninstalled." +msgstr "Některé tiskárny byly odinstalovány." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some SLA materials were uninstalled." +msgstr "Některé SLA materiály byly odinstalovány." + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +msgid "" +"Some fields are too long to fit. Right mouse click reveals the full text." +msgstr "" +"Některá pole jsou příliš dlouhá a nevejdou se. Kliknutím pravým tlačítkem " +"myši zobrazíte celý text." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some filaments were uninstalled." +msgstr "Některé filamenty byly odinstalovány." + #: src/slic3r/GUI/GLCanvas3D.cpp:6370 msgid "Some objects are not visible during editing." msgstr "Některé objekty nejsou během úprav viditelné." @@ -12001,14 +11504,6 @@ msgstr "" "Některé tiskárny nebo nastavení tiskárny mohou mít potíže s tiskem s " "proměnnou výškou vrstvy. Ve výchozím nastavení je zapnuto." -#: src/slic3r/GUI/ConfigWizard.cpp:2696 -msgid "Some Printers were uninstalled." -msgstr "Některé tiskárny byly odinstalovány." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some SLA materials were uninstalled." -msgstr "Některé SLA materiály byly odinstalovány." - #: src/slic3r/GUI/GLCanvas3D.cpp:4041 msgid "Spacing" msgstr "Vzdálenost" @@ -12170,14 +11665,14 @@ msgstr "Rychlost:" msgid "Sphere" msgstr "Koule" -#: src/libslic3r/PrintConfig.cpp:2381 -msgid "Spiral vase" -msgstr "Spirálová váza" - #: src/slic3r/GUI/ConfigManipulation.cpp:91 msgid "Spiral Vase" msgstr "Spirálová Váza" +#: src/libslic3r/PrintConfig.cpp:2381 +msgid "Spiral vase" +msgstr "Spirálová váza" + #: src/slic3r/GUI/GUI_Factories.cpp:944 src/slic3r/GUI/GUI_Factories.cpp:954 #: src/slic3r/GUI/GUI_Factories.cpp:975 src/libslic3r/PrintConfig.cpp:4400 msgid "Split" @@ -12199,22 +11694,22 @@ msgstr "Rozdělit vybraný objekt na jednotlivé objekty" msgid "Split the selected object into individual parts" msgstr "Rozdělit vybraný objekt na jednotlivé části" -#: src/slic3r/GUI/GLCanvas3D.cpp:4565 -msgid "Split to objects" -msgstr "Rozdělit na objekty" - #: src/slic3r/GUI/Plater.cpp:3095 msgid "Split to Objects" msgstr "Rozdělit na Objekty" -#: src/slic3r/GUI/GLCanvas3D.cpp:4575 -msgid "Split to parts" -msgstr "Rozdělit na části" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2008 msgid "Split to Parts" msgstr "Rozdělit na Části" +#: src/slic3r/GUI/GLCanvas3D.cpp:4565 +msgid "Split to objects" +msgstr "Rozdělit na objekty" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4575 +msgid "Split to parts" +msgstr "Rozdělit na části" + #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:66 #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:132 msgid "Split triangles" @@ -12240,6 +11735,12 @@ msgstr "Běžné" msgid "Stars" msgstr "Hvězdy" +#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 +#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 +#: src/libslic3r/PrintConfig.cpp:2415 +msgid "Start G-code" +msgstr "Začátek G-code" + #: src/slic3r/GUI/MainFrame.cpp:1142 msgid "Start a new project" msgstr "Vytvořit nový projekt" @@ -12248,12 +11749,6 @@ msgstr "Vytvořit nový projekt" msgid "Start at height" msgstr "Začít ve výšce" -#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 -#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 -#: src/libslic3r/PrintConfig.cpp:2415 -msgid "Start G-code" -msgstr "Začátek G-code" - #: src/slic3r/GUI/MainFrame.cpp:1293 msgid "Start new slicing process" msgstr "Zahájit nový slicovací proces" @@ -12308,10 +11803,6 @@ msgstr "Stav:" msgid "Stealth" msgstr "Tichý" -#: src/slic3r/GUI/Plater.cpp:1435 -msgid "stealth mode" -msgstr "tichý režim" - #: src/slic3r/GUI/GCodeViewer.cpp:3755 msgid "Stealth mode" msgstr "Tichý režim" @@ -12351,22 +11842,6 @@ msgstr "" "Odpojení proběhlo úspěšné. Zařízení %s(%s) lze nyní bezpečně odebrat z " "počítače." -#: src/slic3r/GUI/PresetHints.cpp:181 -msgid "support" -msgstr "podpěry" - -#: src/libslic3r/PrintConfig.cpp:3517 -msgid "Support base diameter" -msgstr "Průměr podpěrné základny" - -#: src/libslic3r/PrintConfig.cpp:3527 -msgid "Support base height" -msgstr "Výška podpěrné základny" - -#: src/libslic3r/PrintConfig.cpp:3536 -msgid "Support base safety distance" -msgstr "Bezpečná vzdálenost podpěrné základny" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Support Blocker" msgstr "Blokátor podpěr" @@ -12383,14 +11858,22 @@ msgstr "Vynucení podpěr" msgid "Support Generator" msgstr "Generátor Podpěr" +#: src/libslic3r/PrintConfig.cpp:3517 +msgid "Support base diameter" +msgstr "Průměr podpěrné základny" + +#: src/libslic3r/PrintConfig.cpp:3527 +msgid "Support base height" +msgstr "Výška podpěrné základny" + +#: src/libslic3r/PrintConfig.cpp:3536 +msgid "Support base safety distance" +msgstr "Bezpečná vzdálenost podpěrné základny" + #: src/slic3r/GUI/Tab.cpp:4599 msgid "Support head" msgstr "Hrot podpěry" -#: src/slic3r/GUI/PresetHints.cpp:183 -msgid "support interface" -msgstr "kontaktní vrstva podpěr" - #: src/slic3r/GUI/GUI_Factories.cpp:56 src/slic3r/GUI/GUI_Factories.cpp:131 #: src/slic3r/GUI/GUI_Preview.cpp:249 src/slic3r/GUI/Tab.cpp:1550 #: src/slic3r/GUI/Tab.cpp:1552 src/libslic3r/ExtrusionEntity.cpp:328 @@ -12476,10 +11959,6 @@ msgstr "Úprava podpěrných bodů" msgid "Supports" msgstr "Podpěry" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "supports and pad" -msgstr "podpěry a podložka" - #: src/libslic3r/PrintConfig.cpp:1596 msgid "Supports remaining times" msgstr "Podpora zbývajících tiskových časů" @@ -12512,10 +11991,6 @@ msgstr "" msgid "Suppress to open hyperlink in browser" msgstr "Potlačit otevírání hypertextových odkazů v prohlížeči" -#: src/slic3r/GUI/MainFrame.cpp:1661 -msgid "SVG" -msgstr "SVG" - #: src/slic3r/GUI/Mouse3DController.cpp:508 msgid "Swap Y/Z axes" msgstr "Zaměnit osy Y/Z" @@ -12537,10 +12012,6 @@ msgstr "Zaměnit za příkaz na Změnu barvy (%1%) pro:" msgid "Switch to 3D" msgstr "Přepnout do 3D" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 -msgid "Switch to editing mode" -msgstr "Přepnout do režimu editace" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:113 msgid "Switch to Preview" msgstr "Přepnout do náhledu" @@ -12549,6 +12020,10 @@ msgstr "Přepnout do náhledu" msgid "Switch to Settings" msgstr "Přepnout do Nastavení" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 +msgid "Switch to editing mode" +msgstr "Přepnout do režimu editace" + #: src/slic3r/GUI/wxExtensions.cpp:644 #, c-format, boost-format msgid "Switch to the %s mode" @@ -12589,10 +12064,6 @@ msgstr "" "\n" "Opravdu chcete pokračovat?" -#: src/slic3r/GUI/Tab.cpp:1413 -msgid "symbolic profile name" -msgstr "symbolické jméno profilu" - #: src/libslic3r/PrintConfig.cpp:2761 msgid "" "Synchronize support layers with the object print layers. This is useful with " @@ -12609,14 +12080,14 @@ msgstr "Synchronizovat s vrstvami objektu" msgid "System &Info" msgstr "&Informace o systému" -#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 -msgid "System info sent successfully. Thank you." -msgstr "Systémové informace byly úspěšně odeslány. Děkujeme." - #: src/slic3r/GUI/SysInfoDialog.cpp:84 msgid "System Information" msgstr "Systémové informace" +#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 +msgid "System info sent successfully. Thank you." +msgstr "Systémové informace byly úspěšně odeslány. Děkujeme." + #: src/slic3r/GUI/PresetComboBoxes.cpp:249 #: src/slic3r/GUI/PresetComboBoxes.cpp:287 #: src/slic3r/GUI/PresetComboBoxes.cpp:794 @@ -12700,6 +12171,143 @@ msgstr "" "Zařízení %s nebylo nalezeno. Pokud je zařízení připojeno, stiskněte tlačítko " "Reset vedle USB konektoru ..." +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 +msgid "" +"The SLA archive doesn't contain any presets. Please activate some SLA " +"printer preset first before importing that SLA archive." +msgstr "" +"SLA archiv neobsahuje žádné přednastavení. Před importem tohoto SLA archivu " +"nejprve aktivujte některé přednastavení SLA tiskárny." + +#: src/slic3r/GUI/ConfigManipulation.cpp:82 +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 "" +"Režim Spiral Vase vyžaduje:\n" +"- jeden perimetr\n" +"- žádné horní plné vrstvy\n" +"- 0% hustota výplně\n" +"- bez podpěrného materiálu\n" +"- aktivní volbu „Zajistit tloušťku svislých stěn“\n" +"- neaktivní volbu „Detekce tenkých stěn“" + +#: src/libslic3r/Print.cpp:469 +msgid "" +"The Spiral Vase option can only be used when printing single material " +"objects." +msgstr "" +"Možnost \"Spirálová váza\" lze použít pouze při tisku jedním materiálem." + +#: src/libslic3r/Print.cpp:494 +msgid "" +"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." +msgstr "" +"Čistíví Věž v současné době nepodporuje volumetric E (use_volumetric_e = 0)." + +#: src/slic3r/GUI/ConfigManipulation.cpp:121 +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 "" +"Čistící věž v současné době podporuje pouze nerozpustné podpěry\n" +"pokud jsou vytištěny s aktuálním extrudérem bez spuštění výměny nástroje.\n" +"(jak extruder pro tisk podpor tak extruder pro tisk kontaktních podpěr je " +"třeba nastavit na 0)." + +#: src/libslic3r/Print.cpp:598 +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)." +msgstr "" +"Čistící věž v současné době podporuje pouze nerozpustné podpěry\n" +"pokud jsou vytištěny s aktuálním extrudérem bez spuštění výměny nástroje.\n" +"(jak extruder pro tisk podpor tak extruder pro tisk kontaktních podpěr je " +"třeba nastavit na 0)." + +#: src/libslic3r/Print.cpp:496 +msgid "" +"The Wipe Tower is currently not supported for multimaterial sequential " +"prints." +msgstr "" +"Čistící věž není momentálně podporována pro multimateriálové sekvenční tisky." + +#: src/libslic3r/Print.cpp:488 +msgid "" +"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." +msgstr "" +"Čistící věž je v současné době možná pouze pro G-cody určené pro Marlin, " +"RepRap/Sprinter, RepRapFirmware a Repetier." + +#: src/libslic3r/Print.cpp:490 +msgid "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." +msgstr "" +"Čistící věž je v současné době možná pouze v případě relativního adresování " +"exruderu (use_relative_e_distances=1)." + +#: src/libslic3r/Print.cpp:519 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"over an equal number of raft layers" +msgstr "" +"Čistící věž pro více objektů je možná pouze v případě, že objekty mají " +"stejný počet raft vrstev" + +#: src/libslic3r/Print.cpp:522 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"with the same support_material_contact_distance" +msgstr "" +"Čistící věž pro více objektů je možná pouze v případě, že objekty mají " +"shodný parametr support_material_contact_distance" + +#: src/libslic3r/Print.cpp:524 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are sliced " +"equally." +msgstr "" +"Čistící věž je při více objektech možná pouze v případě, že objekty jsou " +"slicovány stejně." + +#: src/libslic3r/Print.cpp:517 +msgid "" +"The Wipe Tower is only supported for multiple objects if they have equal " +"layer heights" +msgstr "" +"Čistící věž je při více objektech možná pouze v případě, že objekty mají " +"všechny vrstvy stejné výšky" + +#: src/slic3r/GUI/Tab.cpp:3005 +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 "" +"Možnost Očistit není k dispozici při použití režimu retrakcí z firmwaru.\n" +"\n" +"Mám ji deaktivovat, aby bylo možné povolit retrakce z firmwaru?" + +#: src/libslic3r/Print.cpp:537 +msgid "" +"The Wipe tower is only supported if all objects have the same variable layer " +"height" +msgstr "" +"Čistící věž je podporována pouze v případě, že všechny objekty mají stejnou " +"variabilní výšku vrstvy" + #: src/slic3r/GUI/GUI_App.cpp:957 #, boost-format msgid "" @@ -12872,18 +12480,18 @@ msgstr "" "První vrstva bude v rovině XY zmenšena nakonfigurovanou hodnotou, která " "kompenzuje rozplácnutí první vrstvy." -#: src/slic3r/GUI/Plater.cpp:5717 -msgid "The following characters are not allowed by a FAT file system:" -msgstr "Následující znaky nejsou v souborovém systému FAT povoleny:" - -#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 -msgid "the following characters are not allowed:" -msgstr "následující znaky nejsou povolené:" - #: src/slic3r/GUI/ConfigWizard.cpp:2459 msgid "The following FFF printer models have no filament selected:" msgstr "Následující modely FFF tiskáren nemají vybraný filament:" +#: src/slic3r/GUI/ConfigWizard.cpp:2477 +msgid "The following SLA printer models have no materials selected:" +msgstr "Následující modely SLA tiskáren nemají vybrané žádné materiály:" + +#: src/slic3r/GUI/Plater.cpp:5717 +msgid "The following characters are not allowed by a FAT file system:" +msgstr "Následující znaky nejsou v souborovém systému FAT povoleny:" + #: src/slic3r/GUI/Tab.cpp:1842 #, c-format, boost-format msgid "" @@ -12949,14 +12557,6 @@ msgid "" msgstr "" "Následující klávesové zkratky jsou funkční při patřičném aktivním gizmu" -#: src/slic3r/GUI/ConfigWizard.cpp:2477 -msgid "The following SLA printer models have no materials selected:" -msgstr "Následující modely SLA tiskáren nemají vybrané žádné materiály:" - -#: src/slic3r/GUI/SavePresetDialog.cpp:110 -msgid "the following suffix is not allowed:" -msgstr "následující přípona není povolená:" - #: src/slic3r/GUI/GUI.cpp:327 msgid "The following values were substituted:" msgstr "Byly nahrazeny následující hodnoty:" @@ -13290,6 +12890,14 @@ msgstr "" "Vybraný projekt již není k dispozici.\n" "Chcete ho odstranit ze seznamu posledních projektů?" +#: src/slic3r/GUI/DoubleSlider.cpp:1408 +msgid "" +"The sequential print is on.\n" +"It's impossible to apply any custom G-code for objects printing sequentually." +msgstr "" +"Sekvenční tisk je zapnutý.\n" +"Pro objekty tisknuté sekvenčním tiskem nelze použít žádný vlastní G-code." + #: src/slic3r/GUI/DoubleSlider.cpp:1440 msgid "" "The sequential print is on.\n" @@ -13301,14 +12909,6 @@ msgstr "" "Není možné použít jakýkoliv vlastní G-kód pro objekty tisknuté sekvenčně.\n" "Během generování G-kódu nebude tento kód zpracován." -#: src/slic3r/GUI/DoubleSlider.cpp:1408 -msgid "" -"The sequential print is on.\n" -"It's impossible to apply any custom G-code for objects printing sequentually." -msgstr "" -"Sekvenční tisk je zapnutý.\n" -"Pro objekty tisknuté sekvenčním tiskem nelze použít žádný vlastní G-code." - #: src/slic3r/GUI/ConfigWizard.cpp:1287 msgid "The size of the object can be specified in inches" msgstr "Velikost objektu lze určit v palcích" @@ -13317,14 +12917,6 @@ msgstr "Velikost objektu lze určit v palcích" msgid "The size of the object is zero" msgstr "Velikost objektu je nulová" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 -msgid "" -"The SLA archive doesn't contain any presets. Please activate some SLA " -"printer preset first before importing that SLA archive." -msgstr "" -"SLA archiv neobsahuje žádné přednastavení. Před importem tohoto SLA archivu " -"nejprve aktivujte některé přednastavení SLA tiskárny." - #: src/libslic3r/PrintConfig.cpp:3671 msgid "" "The slope of the pad wall relative to the bed plane. 90 degrees means " @@ -13344,31 +12936,6 @@ msgstr "" msgid "The speed for retractions (it only applies to the extruder motor)." msgstr "Rychlost retrakce (toto nastavení platí pouze pro motor extruderu)." -#: src/slic3r/GUI/ConfigManipulation.cpp:82 -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 "" -"Režim Spiral Vase vyžaduje:\n" -"- jeden perimetr\n" -"- žádné horní plné vrstvy\n" -"- 0% hustota výplně\n" -"- bez podpěrného materiálu\n" -"- aktivní volbu „Zajistit tloušťku svislých stěn“\n" -"- neaktivní volbu „Detekce tenkých stěn“" - -#: src/libslic3r/Print.cpp:469 -msgid "" -"The Spiral Vase option can only be used when printing single material " -"objects." -msgstr "" -"Možnost \"Spirálová váza\" lze použít pouze při tisku jedním materiálem." - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:630 msgid "The supplied name is empty. It can't be saved." msgstr "Název je prázdný. Nelze uložit." @@ -13422,102 +12989,6 @@ msgstr "" "která určí shodnou vzdálenost mezi podpěry a horním/spodní povrchem objektu " "v ose Z." -#: src/slic3r/GUI/Tab.cpp:3005 -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 "" -"Možnost Očistit není k dispozici při použití režimu retrakcí z firmwaru.\n" -"\n" -"Mám ji deaktivovat, aby bylo možné povolit retrakce z firmwaru?" - -#: src/libslic3r/Print.cpp:494 -msgid "" -"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." -msgstr "" -"Čistíví Věž v současné době nepodporuje volumetric E (use_volumetric_e = 0)." - -#: src/slic3r/GUI/ConfigManipulation.cpp:121 -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 "" -"Čistící věž v současné době podporuje pouze nerozpustné podpěry\n" -"pokud jsou vytištěny s aktuálním extrudérem bez spuštění výměny nástroje.\n" -"(jak extruder pro tisk podpor tak extruder pro tisk kontaktních podpěr je " -"třeba nastavit na 0)." - -#: src/libslic3r/Print.cpp:598 -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)." -msgstr "" -"Čistící věž v současné době podporuje pouze nerozpustné podpěry\n" -"pokud jsou vytištěny s aktuálním extrudérem bez spuštění výměny nástroje.\n" -"(jak extruder pro tisk podpor tak extruder pro tisk kontaktních podpěr je " -"třeba nastavit na 0)." - -#: src/libslic3r/Print.cpp:496 -msgid "" -"The Wipe Tower is currently not supported for multimaterial sequential " -"prints." -msgstr "" -"Čistící věž není momentálně podporována pro multimateriálové sekvenční tisky." - -#: src/libslic3r/Print.cpp:488 -msgid "" -"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " -"RepRapFirmware and Repetier G-code flavors." -msgstr "" -"Čistící věž je v současné době možná pouze pro G-cody určené pro Marlin, " -"RepRap/Sprinter, RepRapFirmware a Repetier." - -#: src/libslic3r/Print.cpp:490 -msgid "" -"The Wipe Tower is currently only supported with the relative extruder " -"addressing (use_relative_e_distances=1)." -msgstr "" -"Čistící věž je v současné době možná pouze v případě relativního adresování " -"exruderu (use_relative_e_distances=1)." - -#: src/libslic3r/Print.cpp:519 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"over an equal number of raft layers" -msgstr "" -"Čistící věž pro více objektů je možná pouze v případě, že objekty mají " -"stejný počet raft vrstev" - -#: src/libslic3r/Print.cpp:522 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"with the same support_material_contact_distance" -msgstr "" -"Čistící věž pro více objektů je možná pouze v případě, že objekty mají " -"shodný parametr support_material_contact_distance" - -#: src/libslic3r/Print.cpp:524 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are sliced " -"equally." -msgstr "" -"Čistící věž je při více objektech možná pouze v případě, že objekty jsou " -"slicovány stejně." - -#: src/libslic3r/Print.cpp:517 -msgid "" -"The Wipe Tower is only supported for multiple objects if they have equal " -"layer heights" -msgstr "" -"Čistící věž je při více objektech možná pouze v případě, že objekty mají " -"všechny vrstvy stejné výšky" - #: src/libslic3r/Print.cpp:482 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " @@ -13526,14 +12997,6 @@ msgstr "" "Čistící věž je podporována pouze v případě, že všechny extrudery mají stejné " "průměry trysek a používají filamenty stejných průměrů." -#: src/libslic3r/Print.cpp:537 -msgid "" -"The Wipe tower is only supported if all objects have the same variable layer " -"height" -msgstr "" -"Čistící věž je podporována pouze v případě, že všechny objekty mají stejnou " -"variabilní výšku vrstvy" - #: src/slic3r/GUI/Plater.cpp:4096 msgid "There are active warnings concerning sliced models:" msgstr "Varování týkající se slicovaných modelů:" @@ -13585,6 +13048,18 @@ msgstr "Silné přemostění" msgid "This %s version: %s" msgstr "Tento %s verze: %s" +#: src/libslic3r/PrintConfig.cpp:2433 +msgid "This G-code will be used as a code for the color change" +msgstr "Tento G-code bude použit jako kód pro změnu barvy" + +#: src/libslic3r/PrintConfig.cpp:2442 +msgid "This G-code will be used as a code for the pause print" +msgstr "Tento G-code bude použit jako kód pro pozastavení tisku" + +#: src/libslic3r/PrintConfig.cpp:2451 +msgid "This G-code will be used as a custom code" +msgstr "Tento G-code bude použit jako vlastní kód" + #: src/slic3r/GUI/DoubleSlider.cpp:2087 src/slic3r/GUI/Tab.cpp:1322 msgid "" "This action is not revertible.\n" @@ -13846,18 +13321,6 @@ msgstr "" "Toto nastavení přemístí trysku při retrakci, aby se minimalizovalo možné " "vytékání materiálu." -#: src/libslic3r/PrintConfig.cpp:2433 -msgid "This G-code will be used as a code for the color change" -msgstr "Tento G-code bude použit jako kód pro změnu barvy" - -#: src/libslic3r/PrintConfig.cpp:2442 -msgid "This G-code will be used as a code for the pause print" -msgstr "Tento G-code bude použit jako kód pro pozastavení tisku" - -#: src/libslic3r/PrintConfig.cpp:2451 -msgid "This G-code will be used as a custom code" -msgstr "Tento G-code bude použit jako vlastní kód" - #: src/slic3r/GUI/Tab.cpp:1351 msgid "This is a default preset." msgstr "Toto je výchozí přednastavení." @@ -14269,10 +13732,6 @@ msgstr "" "s flexibilními materiály, které potřebují více času ke smrštění na původní " "rozměry." -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "to" -msgstr "do" - #: src/slic3r/GUI/Tab.cpp:1365 msgid "To do that please specify a new name for the preset." msgstr "" @@ -14308,10 +13767,6 @@ msgstr "" msgid "Toggle %c axis mirroring" msgstr "Přepnout zrcadlení podle osy %c" -#: src/libslic3r/miniz_extension.cpp:93 -msgid "too many files" -msgstr "příliš mnoho souborů" - #: src/libslic3r/SLAPrintSteps.cpp:426 msgid "Too many overlapping holes." msgstr "Příliš mnoho překrývajících se otvorů." @@ -14365,6 +13820,10 @@ msgstr "" "Nápověda pro tloušťku vrchní / spodní skořepiny: Není k dipozici z důvodu " "neplatné výšky vrstvy." +#: src/slic3r/GUI/MainFrame.cpp:1118 +msgid "Top View" +msgstr "Pohled svrchu" + #: src/libslic3r/PrintConfig.cpp:2548 msgid "Top contact Z distance" msgstr "Mezera nad podpěrami v ose Z" @@ -14386,10 +13845,6 @@ msgstr "Horní část je otevřená." msgid "Top shell is %1% mm thick for layer height %2% mm." msgstr "Tloušťka vrchní skořepiny je %1% mm při výšce vrstvy %2% mm." -#: src/slic3r/GUI/PresetHints.cpp:178 -msgid "top solid infill" -msgstr "vrchní plná výplň" - #: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:323 #: src/libslic3r/ExtrusionEntity.cpp:350 src/libslic3r/PrintConfig.cpp:2839 #: src/libslic3r/PrintConfig.cpp:2852 @@ -14400,10 +13855,6 @@ msgstr "Vrchní plné výplně" msgid "Top solid layers" msgstr "Vrchních plných vrstev" -#: src/slic3r/GUI/MainFrame.cpp:1118 -msgid "Top View" -msgstr "Pohled svrchu" - #: src/libslic3r/PrintConfig.cpp:1550 msgid "Topmost surface only" msgstr "Pouze nejvrchnější vrstva" @@ -14483,6 +13934,32 @@ msgstr "Typ tiskárny." msgid "Type:" msgstr "Typ:" +#: src/slic3r/GUI/Tab.cpp:4257 +msgid "UNLOCKED LOCK" +msgstr "ODEMČENÝ ZÁMEK" + +#: src/slic3r/GUI/Tab.cpp:4283 +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 "" +"Ikona ODEMKNUTÉHO ZÁMKU indikuje, že některá nastavení byla změněna a nejsou " +"shodná se systémovými (výchozími) hodnotami pro danou skupinu nastavení. " +"Klikněte pro reset všech nastavení aktuální skupiny nastavení na systémové " +"hodnoty." + +#: src/slic3r/GUI/Tab.cpp:4298 +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 "" +"Ikona ODEMKNUTÉHO ZÁMKU indikuje, že se hodnota změnila a není shodná se " +"systémovou (nebo výchozí) hodnotou.\n" +"Klikněte pro reset současné hodnoty na systémovou hodnotu." + #: src/libslic3r/SLAPrintSteps.cpp:441 msgid "Unable to drill the current configuration of holes into the model." msgstr "Nelze vyvrtat aktuální konfiguraci otvorů do modelu." @@ -14526,10 +14003,6 @@ msgstr "Nedefinovaná skupina" msgid "Undefined" msgstr "Nedefinováno" -#: src/libslic3r/miniz_extension.cpp:91 -msgid "undefined error" -msgstr "nedefinovaná chyba" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:294 msgid "Underflow" msgstr "Podtečení" @@ -14553,6 +14026,10 @@ msgstr[3] "%1$d Akcí Zpět" msgid "Undo / Redo is processing" msgstr "Zpět / Vpřed se zpracovává" +#: src/slic3r/GUI/GLCanvas3D.cpp:3916 +msgid "Undo History" +msgstr "Historie operací Zpět" + #: src/slic3r/GUI/NotificationManager.hpp:772 msgid "Undo desktop integration failed." msgstr "Zrušení integrace do systému se nepodařilo." @@ -14561,10 +14038,6 @@ msgstr "Zrušení integrace do systému se nepodařilo." msgid "Undo desktop integration was successful." msgstr "Zrušení integrace do systému proběhlo úspěšně." -#: src/slic3r/GUI/GLCanvas3D.cpp:3916 -msgid "Undo History" -msgstr "Historie operací Zpět" - #: resources/data/hints.ini: [hint:Undo/redo history] msgid "" "Undo/redo history\n" @@ -14575,10 +14048,6 @@ msgstr "" "Věděli jste, že můžete kliknutím pravým tlačítkem myši na šipky Zpět/" "Vpřed vrátit několik akcí najednou?" -#: src/libslic3r/miniz_extension.cpp:115 -msgid "unexpected decompressed size" -msgstr "neočekávaná dekomprimovaná velikost" - #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:28 #: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:317 msgid "Unknown" @@ -14595,10 +14064,6 @@ msgstr "Došlo k neznámé chybě" msgid "Unknown error occured during exporting G-code." msgstr "Během exportu G-codu došlo k neznámé chybě." -#: src/slic3r/GUI/WipeTowerDialog.cpp:308 -msgid "unloaded" -msgstr "vyjmuto" - #: src/libslic3r/PrintConfig.cpp:908 msgid "Unloading speed" msgstr "Rychlost vysunutí" @@ -14607,32 +14072,6 @@ msgstr "Rychlost vysunutí" msgid "Unloading speed at the start" msgstr "Počáteční rychlost vysouvání filamentu" -#: src/slic3r/GUI/Tab.cpp:4257 -msgid "UNLOCKED LOCK" -msgstr "ODEMČENÝ ZÁMEK" - -#: src/slic3r/GUI/Tab.cpp:4283 -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 "" -"Ikona ODEMKNUTÉHO ZÁMKU indikuje, že některá nastavení byla změněna a nejsou " -"shodná se systémovými (výchozími) hodnotami pro danou skupinu nastavení. " -"Klikněte pro reset všech nastavení aktuální skupiny nastavení na systémové " -"hodnoty." - -#: src/slic3r/GUI/Tab.cpp:4298 -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 "" -"Ikona ODEMKNUTÉHO ZÁMKU indikuje, že se hodnota změnila a není shodná se " -"systémovou (nebo výchozí) hodnotou.\n" -"Klikněte pro reset současné hodnoty na systémovou hodnotu." - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 msgid "Unsaved Changes" msgstr "Neuložené změny" @@ -14641,26 +14080,6 @@ msgstr "Neuložené změny" msgid "Unselect gizmo or clear selection" msgstr "Zrušit gizmo nebo zrušit výběr" -#: src/libslic3r/miniz_extension.cpp:119 -msgid "unsupported central directory size" -msgstr "nepodporovaná velikost centrálního adresáře" - -#: src/libslic3r/miniz_extension.cpp:99 -msgid "unsupported encryption" -msgstr "nepodporované šifrování" - -#: src/libslic3r/miniz_extension.cpp:101 -msgid "unsupported feature" -msgstr "nepodporovaná funkce" - -#: src/libslic3r/miniz_extension.cpp:97 -msgid "unsupported method" -msgstr "nepodporovaná metoda" - -#: src/libslic3r/miniz_extension.cpp:109 -msgid "unsupported multidisk archive" -msgstr "nepodporovaný multidisk archiv" - #: src/slic3r/GUI/OpenGLManager.cpp:265 msgid "Unsupported OpenGL version" msgstr "Nepodporovaná verze OpenGL" @@ -14674,10 +14093,6 @@ msgstr "Nepodporovaný výběr" msgid "Untitled" msgstr "Bez názvu" -#: src/slic3r/GUI/GCodeViewer.cpp:3176 -msgid "up to" -msgstr "až do" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 msgid "Update available" msgstr "Je dostupná aktualizace" @@ -14747,6 +14162,10 @@ msgstr "" "Pro modely letadel 3DLabPrint použijte \"Paritní vyplňování\". Použijte " "\"Uzavírání děr\" pro uzavření všech otvorů v modelu." +#: src/slic3r/GUI/Preferences.cpp:268 +msgid "Use Retina resolution for the 3D scene" +msgstr "Pro 3D scénu použít rozlišení Retina" + #: src/slic3r/GUI/DoubleSlider.cpp:1615 src/slic3r/GUI/GUI_Factories.cpp:787 msgid "Use another extruder" msgstr "Použít jiný extruder" @@ -14799,10 +14218,6 @@ msgstr "Perspektivní zobrazení scény" msgid "Use relative E distances" msgstr "Použít relativní E vzdálenosti" -#: src/slic3r/GUI/Preferences.cpp:268 -msgid "Use Retina resolution for the 3D scene" -msgstr "Pro 3D scénu použít rozlišení Retina" - #: src/slic3r/GUI/Preferences.cpp:507 msgid "Use system menu for application" msgstr "V PrusaSliceru používat systémové nabídky" @@ -14825,15 +14240,6 @@ msgstr "Toto nastavení použijte pro horizontální otočení vzoru." msgid "Use volumetric E" msgstr "Použít volumetrickou hodnotu E" -#: src/slic3r/GUI/DoubleSlider.cpp:1634 -msgid "used" -msgstr "použitý" - -#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 -#: src/slic3r/GUI/GCodeViewer.cpp:3562 -msgid "Used filament" -msgstr "Použito filamentu" - #: src/slic3r/GUI/Plater.cpp:296 src/slic3r/GUI/Plater.cpp:1376 msgid "Used Filament (g)" msgstr "Použito Filamentu (g)" @@ -14862,6 +14268,11 @@ msgstr "Použitý materiál (ml)" msgid "Used Material (unit)" msgstr "Použito materiálu (jednotka)" +#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 +#: src/slic3r/GUI/GCodeViewer.cpp:3562 +msgid "Used filament" +msgstr "Použito filamentu" + #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:25 src/libslic3r/PrintConfig.cpp:317 msgid "User" msgstr "Uživatel" @@ -14872,10 +14283,6 @@ msgstr "Uživatel" msgid "User presets" msgstr "Uživatelská přednastavení" -#: src/libslic3r/miniz_extension.cpp:149 -msgid "validation failed" -msgstr "validace selhala" - #: src/slic3r/GUI/ButtonsDescription.cpp:57 msgid "Value is the same as the system value" msgstr "Hodnota je shodná se systémovou hodnotou" @@ -14896,6 +14303,11 @@ msgstr "Hodnoty v tomto sloupci jsou pro Normální režim" msgid "Values in this column are for Stealth mode" msgstr "Hodnoty v tomto sloupci jsou pro Tichý režim" +#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 +msgid "Variable layer height" +msgstr "Variabilní výška vrstvy" + #: resources/data/hints.ini: [hint:Variable layer height] msgid "" "Variable layer height\n" @@ -14908,11 +14320,6 @@ msgstr "" "a vyhlazovat přechody mezi nimi? Vyzkoušejte nástroj Proměnná výška " "vrstvy. (Není k dispozici pro SLA tiskárny.)" -#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 -msgid "Variable layer height" -msgstr "Variabilní výška vrstvy" - #: src/slic3r/GUI/GLCanvas3D.cpp:1273 msgid "Variable layer height - Adaptive" msgstr "Variabilní výška vrstev - Adaptivní" @@ -14929,14 +14336,6 @@ msgstr "Variabilní výška vrstev - Reset" msgid "Variable layer height - Smooth all" msgstr "Variabilní výška vrstev - Vyhladit vše" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "variants" -msgstr "varianty" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 -msgid "vendor" -msgstr "výrobce" - #: src/slic3r/GUI/ConfigWizard.cpp:642 msgid "Vendor:" msgstr "Výrobce:" @@ -14950,18 +14349,14 @@ msgstr "Komentáře do G-code" msgid "Version" msgstr "Verze" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 -msgid "version" -msgstr "verze" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 +msgid "Vertical Slider" +msgstr "Vertikální posuvník" #: src/slic3r/GUI/Tab.cpp:1457 msgid "Vertical shells" msgstr "Svislé stěny" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 -msgid "Vertical Slider" -msgstr "Vertikální posuvník" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:218 #: src/slic3r/GUI/KBShortcutsDialog.cpp:222 msgid "Vertical slider - Move active thumb Down" @@ -15035,6 +14430,38 @@ msgstr "Objemový průtok (mm³/s)" msgid "Volumetric speed" msgstr "Objemová rychlost" +#: src/slic3r/GUI/NotificationManager.cpp:1459 +#: src/slic3r/GUI/NotificationManager.cpp:1486 +#: src/slic3r/GUI/NotificationManager.cpp:1494 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +msgid "WARNING:" +msgstr "VAROVÁNÍ:" + +#: src/slic3r/GUI/Tab.cpp:4264 +msgid "WHITE BULLET" +msgstr "BÍLÁ TEČKA" + +#: src/slic3r/GUI/Tab.cpp:4286 +msgid "WHITE BULLET icon indicates a non system (or non default) preset." +msgstr "" +"Ikona BÍLÉ TEČKY indikuje nesystémové (nebo jiné než výchozí) přednastavení." + +#: src/slic3r/GUI/Tab.cpp:4289 +msgid "" +"WHITE BULLET icon indicates that the settings are the same as in the last " +"saved preset for the current option group." +msgstr "" +"Ikona BÍLÉ TEČKY indikuje, že nastavení jsou shodná s naposledy uloženým " +"přednastavením pro danou skupinu nastavení." + +#: src/slic3r/GUI/Tab.cpp:4304 +msgid "" +"WHITE BULLET icon indicates that the value is the same as in the last saved " +"preset." +msgstr "" +"Ikona BÍLÉ TEČKY indikuje, že je hodnota shodná s naposledy uloženým " +"přednastavením." + #: src/libslic3r/PrintConfig.cpp:3740 msgid "Wall thickness" msgstr "Tloušťka stěny" @@ -15047,13 +14474,6 @@ msgstr "Tloušťka stěny" msgid "Warning" msgstr "Varování" -#: src/slic3r/GUI/NotificationManager.cpp:1459 -#: src/slic3r/GUI/NotificationManager.cpp:1486 -#: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 -msgid "WARNING:" -msgstr "VAROVÁNÍ:" - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:590 #, boost-format msgid "" @@ -15107,10 +14527,6 @@ msgstr "" "Je-li zaškrtnuto, při každém přetažení souboru s projektem do aplikace se " "zobrazí dialogové okno s výzvou k výběru akce, kterou se má soubor načíst." -#: src/slic3r/GUI/PresetHints.cpp:192 -msgid "when printing" -msgstr "při tisku" - #: src/libslic3r/PrintConfig.cpp:530 msgid "" "When printing multi-material objects, this settings will make Slic3r to clip " @@ -15200,31 +14616,6 @@ msgstr "" "Když je retrakce kompenzována po rychloposunu, extruder vytlačuje toto další " "množství filamentu. Toto nastavení je zřídkakdy potřeba." -#: src/slic3r/GUI/Tab.cpp:4264 -msgid "WHITE BULLET" -msgstr "BÍLÁ TEČKA" - -#: src/slic3r/GUI/Tab.cpp:4286 -msgid "WHITE BULLET icon indicates a non system (or non default) preset." -msgstr "" -"Ikona BÍLÉ TEČKY indikuje nesystémové (nebo jiné než výchozí) přednastavení." - -#: src/slic3r/GUI/Tab.cpp:4289 -msgid "" -"WHITE BULLET icon indicates that the settings are the same as in the last " -"saved preset for the current option group." -msgstr "" -"Ikona BÍLÉ TEČKY indikuje, že nastavení jsou shodná s naposledy uloženým " -"přednastavením pro danou skupinu nastavení." - -#: src/slic3r/GUI/Tab.cpp:4304 -msgid "" -"WHITE BULLET icon indicates that the value is the same as in the last saved " -"preset." -msgstr "" -"Ikona BÍLÉ TEČKY indikuje, že je hodnota shodná s naposledy uloženým " -"přednastavením." - #: src/slic3r/GUI/Tab.cpp:3999 msgid "Whole word" msgstr "Celé slovo" @@ -15268,6 +14659,11 @@ msgstr "" msgid "Wipe" msgstr "Čištění" +#: src/slic3r/GUI/ConfigManipulation.cpp:126 +#: src/slic3r/GUI/ConfigManipulation.cpp:146 +msgid "Wipe Tower" +msgstr "Čistící Věž" + #: src/libslic3r/PrintConfig.cpp:3013 msgid "Wipe into this object" msgstr "Vyčistit do tohoto objektu" @@ -15286,15 +14682,6 @@ msgstr "Možnosti čištění" msgid "Wipe tower" msgstr "Čistící věž" -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "wipe tower" -msgstr "čistící věž" - -#: src/slic3r/GUI/ConfigManipulation.cpp:126 -#: src/slic3r/GUI/ConfigManipulation.cpp:146 -msgid "Wipe Tower" -msgstr "Čistící Věž" - #: src/slic3r/GUI/WipeTowerDialog.cpp:173 msgid "Wipe tower - Purging volume adjustment" msgstr "Čistící věž - Úprava objemu čištění" @@ -15319,10 +14706,6 @@ msgstr "Úhel natočení čistící věže s ohledem na osu X." msgid "Wipe while retracting" msgstr "Očistit při retrakci" -#: src/slic3r/GUI/PresetHints.cpp:193 -msgid "with a volumetric rate" -msgstr "s objemovou rychlostí" - #: src/libslic3r/PrintConfig.cpp:2122 msgid "" "With bowden extruders, it may be wise to do some amount of quick retract " @@ -15372,10 +14755,6 @@ msgstr "" "\n" "Aktualizované balíčky nastavení:" -#: src/libslic3r/miniz_extension.cpp:151 -msgid "write calledback failed" -msgstr "zpětné volání se nezdařilo" - #: src/libslic3r/PrintConfig.cpp:4306 msgid "Write information about the model to the console." msgstr "Vypsat informace o modelu do konsole." @@ -15388,6 +14767,10 @@ msgstr "Chybné heslo" msgid "X coordinate of the left front corner of a wipe tower" msgstr "X souřadnice levého předního rohu čistící věže" +#: src/libslic3r/PrintConfig.cpp:3027 +msgid "XY Size Compensation" +msgstr "Kompenzace XY rozměrů" + #: src/libslic3r/PrintConfig.cpp:2517 msgid "XY separation between an object and its support" msgstr "XY vzdálenost mezi objektem a podpěrami" @@ -15400,10 +14783,6 @@ msgstr "" "XY vzdálenost mezi objektem a podpěrami. Pokud je vyjádřeno procenty " "(například 50%), bude vypočítána z šířky perimetru." -#: src/libslic3r/PrintConfig.cpp:3027 -msgid "XY Size Compensation" -msgstr "Kompenzace XY rozměrů" - #: src/libslic3r/PrintConfig.cpp:2976 msgid "Y coordinate of the left front corner of a wipe tower" msgstr "Y souřadnice levého předního rohu čistící věže" @@ -15462,6 +14841,10 @@ msgstr "" "Zde můžete zadat své osobní poznámky. Tento text bude přidán do komentáře " "záhlaví G code." +#: src/libslic3r/PrintConfig.cpp:3383 +msgid "You can put your notes regarding the SLA print material here." +msgstr "Zde můžete vkládat své poznámky týkající se tiskového materiálu SLA." + #: src/libslic3r/PrintConfig.cpp:874 msgid "You can put your notes regarding the filament here." msgstr "Zde můžete vložit poznámky týkající se filamentu." @@ -15470,10 +14853,6 @@ msgstr "Zde můžete vložit poznámky týkající se filamentu." msgid "You can put your notes regarding the printer here." msgstr "Zde můžete uvést poznámky týkající se tiskárny." -#: src/libslic3r/PrintConfig.cpp:3383 -msgid "You can put your notes regarding the SLA print material here." -msgstr "Zde můžete vkládat své poznámky týkající se tiskového materiálu SLA." - #: src/libslic3r/PrintConfig.cpp:637 msgid "" "You can set this to a positive value to disable fan at all during the first " @@ -15700,6 +15079,623 @@ msgstr "" "Pohled na označený objekt, nebo na všechny objekty ve scéně,\n" "pokud není vybraný žádný objekt" +#: src/slic3r/GUI/GCodeViewer.cpp:3182 +msgid "above" +msgstr "nad" + +#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 +msgid "active" +msgstr "aktivní" + +#: src/libslic3r/miniz_extension.cpp:121 +msgid "allocation failed" +msgstr "alokace selhala" + +#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 +msgid "approximate seconds" +msgstr "vteřin přibližně" + +#: src/libslic3r/miniz_extension.cpp:147 +msgid "archive is too large" +msgstr "archiv je moc velký" + +#: src/slic3r/GUI/MainFrame.cpp:655 +msgid "based on Slic3r" +msgstr "založený na Slic3r" + +#: src/libslic3r/miniz_extension.cpp:141 +msgid "buffer too small" +msgstr "buffer je příliš malý" + +#: src/slic3r/GUI/PresetHints.cpp:191 +msgid "by the print profile maximum" +msgstr "maximem pro profil tisku" + +#: src/libslic3r/miniz_extension.cpp:113 +msgid "compression failed" +msgstr "komprese se nezdařila" + +#: src/slic3r/GUI/DoubleSlider.cpp:1458 +msgid "continue" +msgstr "pokračovat" + +#: src/libslic3r/miniz_extension.cpp:111 +msgid "decompression failed or archive is corrupted" +msgstr "dekomprese selhala nebo je archiv poškozen" + +#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 +#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 +msgid "default" +msgstr "výchozí" + +#: src/slic3r/GUI/Tab.cpp:1400 +msgid "default SLA material profile" +msgstr "výchozí profil pro SLA materiál" + +#: src/slic3r/GUI/Tab.cpp:1404 +msgid "default SLA print profile" +msgstr "výchozí SLA tiskový profil" + +#: src/slic3r/GUI/GCodeViewer.cpp:3388 +msgid "default color" +msgstr "výchozí barva" + +#: src/slic3r/GUI/Tab.cpp:1386 +msgid "default filament profile" +msgstr "výchozí profil filamentu" + +#: src/slic3r/GUI/Tab.cpp:1383 +msgid "default print profile" +msgstr "výchozí tiskový profil" + +#: src/slic3r/GUI/Field.cpp:190 +msgid "default value" +msgstr "výchozí hodnota" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "delete" +msgstr "smazat" + +#: src/slic3r/GUI/Plater.cpp:3652 +msgid "differs from the original file" +msgstr "liší se od původního souboru" + +#: src/slic3r/GUI/Plater.cpp:5202 +msgid "does not contain valid gcode." +msgstr "neobsahuje platný G-code." + +#: src/slic3r/GUI/PresetHints.cpp:59 +#, boost-format +msgid "except for the first %1% layers." +msgstr "s výjimkou prvních %1% vrstev." + +#: src/slic3r/GUI/PresetHints.cpp:61 +msgid "except for the first layer." +msgstr "vyjma první vrstvy." + +#: src/slic3r/GUI/PresetHints.cpp:170 +msgid "external perimeters" +msgstr "vnější perimetry" + +#: src/libslic3r/miniz_extension.cpp:103 +msgid "failed finding central directory" +msgstr "selhalo nalezení kořenového adresáře" + +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +msgid "filament" +msgstr "filament" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 +msgid "filaments" +msgstr "filamenty" + +#: src/libslic3r/miniz_extension.cpp:131 +msgid "file close failed" +msgstr "zavření souboru selhalo" + +#: src/libslic3r/miniz_extension.cpp:125 +msgid "file create failed" +msgstr "vytvoření souboru selhalo" + +#: src/libslic3r/miniz_extension.cpp:145 +msgid "file not found" +msgstr "soubor nenalezen" + +#: src/libslic3r/miniz_extension.cpp:123 +msgid "file open failed" +msgstr "otevření souboru selhalo" + +#: src/libslic3r/miniz_extension.cpp:129 +msgid "file read failed" +msgstr "čtení souboru se nezdařilo" + +#: src/libslic3r/miniz_extension.cpp:133 +msgid "file seek failed" +msgstr "hledání souboru selhalo" + +#: src/libslic3r/miniz_extension.cpp:135 +msgid "file stat failed" +msgstr "soubor stat selhal" + +#: src/libslic3r/miniz_extension.cpp:95 +msgid "file too large" +msgstr "soubor je příliš velký" + +#: src/libslic3r/miniz_extension.cpp:127 +msgid "file write failed" +msgstr "zápis souboru se nezdařil" + +#: src/slic3r/GUI/PresetHints.cpp:188 +msgid "flow rate is maximized" +msgstr "průtok je maximalizován" + +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:4266 +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/GCodeViewer.cpp:3190 +msgid "from" +msgstr "z" + +#: src/slic3r/GUI/Tab.cpp:1412 +msgid "full profile name" +msgstr "celé jméno profilu" + +#: src/libslic3r/PrintConfig.cpp:1057 +msgid "g" +msgstr "g" + +#: src/libslic3r/PrintConfig.cpp:1006 +msgid "g/cm³" +msgstr "g/cm³" + +#: src/libslic3r/PrintConfig.cpp:3288 +msgid "g/ml" +msgstr "g/ml" + +#: src/slic3r/GUI/Plater.cpp:4107 +msgid "generated warnings" +msgstr "generovaná varování" + +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +msgid "in" +msgstr "in" + +#. TRN Description for "UNLOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4259 +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 "" +"indikuje, že některá nastavení byla změněna a nejsou shodná se systémovými " +"(výchozími) hodnotami pro danou skupinu nastavení.\n" +"Klikněte na ikonu ODEMKNUTÉHO ZÁMKU pro reset všech nastavení aktuální " +"skupiny nastavení na systémové (nebo výchozí) hodnoty." + +#. TRN Description for "LOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4255 +msgid "" +"indicates that the settings are the same as the system (or default) values " +"for the current option group" +msgstr "" +"indikuje, že nastavení jsou stejná jako systémové (výchozí) hodnoty pro " +"aktuální skupinu nastavení" + +#. TRN Description for "BACK ARROW" +#: src/slic3r/GUI/Tab.cpp:4271 +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í.\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/PresetHints.cpp:174 +msgid "infill" +msgstr "výplň" + +#: src/libslic3r/miniz_extension.cpp:143 +msgid "internal error" +msgstr "interní chyba" + +#: src/libslic3r/miniz_extension.cpp:139 +msgid "invalid filename" +msgstr "neplatný název souboru" + +#: src/libslic3r/miniz_extension.cpp:107 +msgid "invalid header or archive is corrupted" +msgstr "neplatná hlavička nebo je archiv poškozen" + +#: src/libslic3r/miniz_extension.cpp:137 +msgid "invalid parameter" +msgstr "neplatný parametr" + +#: src/slic3r/GUI/GUI_App.cpp:266 +msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." +msgstr "je založen na Slic3r od Alessandra Ranellucciho a RepRap komunity." + +#. TRN "Slic3r _is licensed under the_ License" +#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 +msgid "is licensed under the" +msgstr "je licencován pod" + +#: src/libslic3r/PrintConfig.cpp:3281 +msgid "kg" +msgstr "kg" + +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 +#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 +#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 +#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 +#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 +msgid "layers" +msgstr "vrstva(y)" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:309 +msgid "loaded" +msgstr "zaváděn" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 +msgid "max PrusaSlicer version" +msgstr "max PrusaSlicer verze" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 +msgid "min PrusaSlicer version" +msgstr "min PrusaSlicer verze" + +#: src/libslic3r/PrintConfig.cpp:3274 +msgid "ml" +msgstr "ml" + +#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 +#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 +#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 +#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 +#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 +#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 +#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 +#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 +#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 +#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 +#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 +#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 +#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 +#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 +#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 +#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 +#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 +#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 +#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 +#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 +#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 +#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 +#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 +#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 +#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 +#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 +#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 +#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 +#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 +#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 +#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 +#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 +#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 +#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 +#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 +#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 +#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 +#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 +#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 +#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 +#: src/libslic3r/PrintConfig.cpp:3767 +msgid "mm" +msgstr "mm" + +#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 +#: src/libslic3r/PrintConfig.cpp:2148 +msgid "mm (zero to disable)" +msgstr "mm (nula pro vypnutí)" + +#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 +#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 +#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 +#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 +#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 +#: src/libslic3r/PrintConfig.cpp:2845 +msgid "mm or %" +msgstr "mm nebo %" + +#: src/libslic3r/PrintConfig.cpp:385 +msgid "mm or % (zero to disable)" +msgstr "mm nebo % (nula pro deaktivaci)" + +#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 +#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 +#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 +#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 +#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 +#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 +#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 +#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 +#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 +#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 +#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 +msgid "mm/s" +msgstr "mm/s" + +#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 +#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 +#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 +#: src/libslic3r/PrintConfig.cpp:2859 +msgid "mm/s or %" +msgstr "mm/s nebo %" + +#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 +#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 +#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 +#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 +#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 +msgid "mm/s²" +msgstr "mm/s²" + +#: src/libslic3r/PrintConfig.cpp:2316 +msgid "mm²" +msgstr "mm²" + +#: src/libslic3r/PrintConfig.cpp:957 +msgid "mm³" +msgstr "mm³" + +#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 +#: src/libslic3r/PrintConfig.cpp:1782 +msgid "mm³/s" +msgstr "mm³/s" + +#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 +msgid "mm³/s²" +msgstr "mm³/s²" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "model" +msgstr "model" + +#: src/slic3r/GUI/GUI_App.cpp:2159 +msgid "modified" +msgstr "upraveno" + +#: src/libslic3r/PrintConfig.cpp:3295 +msgid "money/bottle" +msgstr "cena/láhev" + +#: src/libslic3r/PrintConfig.cpp:1047 +msgid "money/kg" +msgstr "cena/kg" + +#: src/slic3r/GUI/Plater.cpp:1428 +msgid "normal mode" +msgstr "normální režim" + +#: src/libslic3r/miniz_extension.cpp:105 +msgid "not a ZIP archive" +msgstr "není ZIP archiv" + +#: src/slic3r/GUI/ConfigWizard.cpp:262 +msgid "nozzle" +msgstr "tryska" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "object" +msgid_plural "objects" +msgstr[0] "objekt" +msgstr[1] "objektů" +msgstr[2] "objektů" +msgstr[3] "objektů" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "objects" +msgstr "objekty" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 +msgid "of a current Object" +msgstr "současného Objektu" + +#: src/slic3r/GUI/DoubleSlider.cpp:1431 +msgid "or press \"+\" key" +msgstr "nebo stiskněte klávesu „+“" + +#: src/slic3r/GUI/Field.cpp:193 +msgid "parameter name" +msgstr "název parametru" + +#: src/slic3r/GUI/PresetHints.cpp:171 +msgid "perimeters" +msgstr "perimetry" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +msgid "print" +msgstr "tisk" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +msgid "printer" +msgstr "tiskárna" + +#: src/slic3r/GUI/Tab.cpp:1375 +msgid "printer model" +msgstr "model tiskárny" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "remove" +msgstr "odebrat" + +#: src/slic3r/Utils/PresetUpdater.cpp:815 +#, c-format, boost-format +msgid "requires max. %s" +msgstr "vyžaduje max. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:812 +#, c-format, boost-format +msgid "requires min. %s" +msgstr "vyžaduje min. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:808 +#, c-format, boost-format +msgid "requires min. %s and max. %s" +msgstr "vyžaduje min. %s a max. %s" + +#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 +#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 +#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 +#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 +#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 +#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 +#: src/libslic3r/PrintConfig.cpp:3349 +msgid "s" +msgstr "s" + +#: src/slic3r/GUI/PresetHints.cpp:176 +msgid "solid infill" +msgstr "plná výplň" + +#: src/slic3r/GUI/Plater.cpp:1435 +msgid "stealth mode" +msgstr "tichý režim" + +#: src/slic3r/GUI/PresetHints.cpp:181 +msgid "support" +msgstr "podpěry" + +#: src/slic3r/GUI/PresetHints.cpp:183 +msgid "support interface" +msgstr "kontaktní vrstva podpěr" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "supports and pad" +msgstr "podpěry a podložka" + +#: src/slic3r/GUI/Tab.cpp:1413 +msgid "symbolic profile name" +msgstr "symbolické jméno profilu" + +#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 +msgid "the following characters are not allowed:" +msgstr "následující znaky nejsou povolené:" + +#: src/slic3r/GUI/SavePresetDialog.cpp:110 +msgid "the following suffix is not allowed:" +msgstr "následující přípona není povolená:" + +#: src/slic3r/GUI/GCodeViewer.cpp:3190 +msgid "to" +msgstr "do" + +#: src/libslic3r/miniz_extension.cpp:93 +msgid "too many files" +msgstr "příliš mnoho souborů" + +#: src/slic3r/GUI/PresetHints.cpp:178 +msgid "top solid infill" +msgstr "vrchní plná výplň" + +#: src/libslic3r/miniz_extension.cpp:91 +msgid "undefined error" +msgstr "nedefinovaná chyba" + +#: src/libslic3r/miniz_extension.cpp:115 +msgid "unexpected decompressed size" +msgstr "neočekávaná dekomprimovaná velikost" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:308 +msgid "unloaded" +msgstr "vyjmuto" + +#: src/libslic3r/miniz_extension.cpp:119 +msgid "unsupported central directory size" +msgstr "nepodporovaná velikost centrálního adresáře" + +#: src/libslic3r/miniz_extension.cpp:99 +msgid "unsupported encryption" +msgstr "nepodporované šifrování" + +#: src/libslic3r/miniz_extension.cpp:101 +msgid "unsupported feature" +msgstr "nepodporovaná funkce" + +#: src/libslic3r/miniz_extension.cpp:97 +msgid "unsupported method" +msgstr "nepodporovaná metoda" + +#: src/libslic3r/miniz_extension.cpp:109 +msgid "unsupported multidisk archive" +msgstr "nepodporovaný multidisk archiv" + +#: src/slic3r/GUI/GCodeViewer.cpp:3176 +msgid "up to" +msgstr "až do" + +#: src/slic3r/GUI/DoubleSlider.cpp:1634 +msgid "used" +msgstr "použitý" + +#: src/libslic3r/miniz_extension.cpp:149 +msgid "validation failed" +msgstr "validace selhala" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "variants" +msgstr "varianty" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 +msgid "vendor" +msgstr "výrobce" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 +msgid "version" +msgstr "verze" + +#: src/slic3r/GUI/PresetHints.cpp:192 +msgid "when printing" +msgstr "při tisku" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "wipe tower" +msgstr "čistící věž" + +#: src/slic3r/GUI/PresetHints.cpp:193 +msgid "with a volumetric rate" +msgstr "s objemovou rychlostí" + +#: src/libslic3r/miniz_extension.cpp:151 +msgid "write calledback failed" +msgstr "zpětné volání se nezdařilo" + #: src/libslic3r/PrintConfig.cpp:456 src/libslic3r/PrintConfig.cpp:1075 #: src/libslic3r/PrintConfig.cpp:2232 src/libslic3r/PrintConfig.cpp:2242 #: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2774 @@ -16857,6 +16853,10 @@ msgstr "AddToPropertyCollection zavolána bez platného zapisovače" msgid "Adding book %s" msgstr "Přidávám knihu %s" +#: ../src/common/preferencescmn.cpp:43 +msgid "Advanced" +msgstr "Pokročilé" + #: ../src/richtext/richtextliststylepage.cpp:435 msgid "After a paragraph:" msgstr "Za odstavcem:" @@ -17123,6 +17123,10 @@ msgstr "Okraj" msgid "Borders" msgstr "Okraje" +#: ../src/richtext/richtextsizepage.cpp:288 ../src/common/stockitem.cpp:144 +msgid "Bottom" +msgstr "Dolů" + #: ../src/generic/prntdlgg.cpp:893 msgid "Bottom margin (mm):" msgstr "Dolní okraj (mm):" @@ -17923,6 +17927,10 @@ msgstr "Zkopírováno do schránky: \"%s\"" msgid "Copies:" msgstr "Kopie:" +#: ../src/common/stockitem.cpp:150 ../src/stc/stc_i18n.cpp:18 +msgid "Copy" +msgstr "Kopírovat" + #: ../src/common/stockitem.cpp:258 msgid "Copy selection" msgstr "Kopírovat výběr" diff --git a/resources/localization/de/PrusaSlicer.mo b/resources/localization/de/PrusaSlicer.mo index 796dbe27b..1e2275b75 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 5c87133ee..79a01fac8 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: Phrase (phrase.com)\n" +"X-Generator: Prusalator\n" #: src/slic3r/GUI/Tab.cpp:4707 #, boost-format @@ -17,6 +17,22 @@ msgstr "" "ist.\n" "Um \"%1%\" zu aktivieren, schalten Sie bitte \"%2%\" aus." +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" +"In before_layer_gcode wurde \"G92 E0\" gefunden, was mit der absoluten " +"Extruder-Adressierung nicht kompatibel ist." + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" +"Im layer_gcode wurde \"G92 E0\" gefunden, was mit der absoluten Extruder-" +"Adressierung nicht kompatibel ist." + #: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:1087 #: src/libslic3r/PrintConfig.cpp:1559 src/libslic3r/PrintConfig.cpp:1751 #: src/libslic3r/PrintConfig.cpp:1814 src/libslic3r/PrintConfig.cpp:2065 @@ -109,6 +125,12 @@ msgid_plural "%1% (%2$d shells)" msgstr[0] "%1% (%2$d Wand)" msgstr[1] "%1% (%2$d Wände)" +#. TRN Remove/Delete +#: src/slic3r/GUI/Tab.cpp:3736 +#, boost-format +msgid "%1% Preset" +msgstr "%1% Voreinstellung" + #: src/slic3r/GUI/ConfigWizard.cpp:752 #, boost-format msgid "" @@ -118,12 +140,6 @@ msgstr "" "%1%, die mit * markiert sind, sind nicht mit einigen " "installierten Druckern kompatibel." -#. TRN Remove/Delete -#: src/slic3r/GUI/Tab.cpp:3736 -#, boost-format -msgid "%1% Preset" -msgstr "%1% Voreinstellung" - #: src/slic3r/GUI/GUI.cpp:317 #, boost-format msgid "%1% was substituted with %2%" @@ -185,6 +201,16 @@ msgstr "%s - BREAKING CHANGE" msgid "%s - Drop project file" msgstr "%s - Drop Projektdatei" +#: src/slic3r/GUI/ConfigWizard.cpp:550 +#, c-format, boost-format +msgid "%s Family" +msgstr "%s Familie" + +#: src/slic3r/GUI/GUI_App.cpp:2245 +#, c-format, boost-format +msgid "%s View Mode" +msgstr "%s Anzeigemodus" + #: src/slic3r/GUI/UpdateDialogs.cpp:213 #, c-format, boost-format msgid "%s configuration is incompatible" @@ -200,11 +226,6 @@ msgstr "%s akzeptiert keine Prozentangaben" msgid "%s error" msgstr "%s Fehler" -#: src/slic3r/GUI/ConfigWizard.cpp:550 -#, c-format, boost-format -msgid "%s Family" -msgstr "%s Familie" - #: src/slic3r/GUI/MsgDialog.cpp:233 #, c-format, boost-format msgid "%s has a warning" @@ -215,6 +236,18 @@ msgstr "%s hat eine Warnmeldung" msgid "%s has encountered an error" msgstr "%s ist auf einen Fehler gestoßen" +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 +#, c-format, boost-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 ist auf einen Fehler gestoßen. Es wurde wahrscheinlich dadurch " +"verursacht, dass der Speicher knapp wird. Wenn Sie sicher sind, dass Sie " +"genügend RAM auf Ihrem System haben, kann dies auch ein Programmfehler sein, " +"und wir würden uns freuen, wenn Sie ihn melden würden." + #: src/slic3r/GUI/GUI_App.cpp:698 #, c-format, boost-format msgid "" @@ -231,18 +264,6 @@ msgstr "" "\n" "Die Anwendung wird nun beendet." -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 -#, c-format, boost-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 ist auf einen Fehler gestoßen. Es wurde wahrscheinlich dadurch " -"verursacht, dass der Speicher knapp wird. Wenn Sie sicher sind, dass Sie " -"genügend RAM auf Ihrem System haben, kann dies auch ein Programmfehler sein, " -"und wir würden uns freuen, wenn Sie ihn melden würden." - #: src/slic3r/GUI/UpdateDialogs.cpp:304 #, c-format, boost-format msgid "%s has no configuration updates available." @@ -292,11 +313,6 @@ msgstr "" "einzurichten sowie auszuwählen, ob Einstellungen automatisch aktualisiert " "werden dürfen." -#: src/slic3r/GUI/GUI_App.cpp:2245 -#, c-format, boost-format -msgid "%s View Mode" -msgstr "%s Anzeigemodus" - #: src/slic3r/GUI/MsgDialog.cpp:232 #, c-format, boost-format msgid "%s warning" @@ -451,22 +467,14 @@ msgstr "&Fenster" msgid "(All)" msgstr "(Alles)" -#: src/slic3r/GUI/Plater.cpp:1401 -msgid "(including spool)" -msgstr "(einschließlich Spule)" - -#: src/libslic3r/PrintConfig.cpp:1985 -msgid "(minimum)" -msgstr "(Minimum)" +#: src/slic3r/GUI/MainFrame.cpp:1293 +msgid "(Re)Slice No&w" +msgstr "(Re)Slice jet&zt" #: src/slic3r/GUI/KBShortcutsDialog.cpp:81 msgid "(Re)slice" msgstr "(Re)Slice" -#: src/slic3r/GUI/MainFrame.cpp:1293 -msgid "(Re)Slice No&w" -msgstr "(Re)Slice jet&zt" - #: src/libslic3r/GCode.cpp:573 msgid "(Some lines not shown)" msgstr "(Einige Zeilen nicht gezeigt)" @@ -475,6 +483,14 @@ msgstr "(Einige Zeilen nicht gezeigt)" msgid "(Unknown)" msgstr "(Unbekannt)" +#: src/slic3r/GUI/Plater.cpp:1401 +msgid "(including spool)" +msgstr "(einschließlich Spule)" + +#: src/libslic3r/PrintConfig.cpp:1985 +msgid "(minimum)" +msgstr "(Minimum)" + #: src/slic3r/GUI/MainFrame.cpp:1625 msgid ") not found." msgstr ") nicht gefunden." @@ -535,10 +551,6 @@ msgstr "3 (schwer)" msgid "3&D" msgstr "3&D" -#: src/slic3r/GUI/Plater.cpp:4438 -msgid "3D editor view" -msgstr "3D Editiermodus" - #: src/libslic3r/PrintConfig.cpp:1153 msgid "3D Honeycomb" msgstr "3D Bienenwabe" @@ -547,6 +559,10 @@ msgstr "3D Bienenwabe" msgid "3D Mouse disconnected." msgstr "3D-Maus nicht angeschlossen." +#: src/slic3r/GUI/Plater.cpp:4438 +msgid "3D editor view" +msgstr "3D Editiermodus" + #: src/slic3r/GUI/Mouse3DController.cpp:453 msgid "3Dconnexion settings" msgstr "3Dconnexion Einstellungen" @@ -587,10 +603,6 @@ msgstr "" "Es wird eine Kopie der aktuellen Systemvoreinstellung erstellt, die von der " "Systemvoreinstellung gelöst wird." -#: src/slic3r/GUI/ConfigWizard.cpp:2717 -msgid "A new filament was installed and it will be activated." -msgstr "Es wurde ein neues Filament installiert, das nun aktiviert wird." - #: src/slic3r/GUI/ConfigWizard.cpp:2691 msgid "A new Printer was installed and it will be activated." msgstr "A new Printer was installed and it will be activated." @@ -599,6 +611,10 @@ msgstr "A new Printer was installed and it will be activated." msgid "A new SLA material was installed and it will be activated." msgstr "Ein neues SLA-Material wurde installiert und wird nun aktiviert." +#: src/slic3r/GUI/ConfigWizard.cpp:2717 +msgid "A new filament was installed and it will be activated." +msgstr "Es wurde ein neues Filament installiert, das nun aktiviert wird." + #: src/slic3r/GUI/ConfigWizard.cpp:2596 msgid "A new vendor was installed and one of its printers will be activated" msgid_plural "" @@ -635,6 +651,14 @@ msgstr "" msgid "A toolpath outside the print area was detected." msgstr "Es wurde ein Werkzeugweg außerhalb des Druckbereichs erkannt." +#: src/libslic3r/PrintConfig.cpp:291 +msgid "API Key / Password" +msgstr "API Key / Kennwort" + +#: src/libslic3r/PrintConfig.cpp:351 +msgid "API key" +msgstr "API Key" + #: src/slic3r/Config/Snapshot.cpp:601 msgid "Abort" msgstr "Abbruch" @@ -644,10 +668,6 @@ msgstr "Abbruch" msgid "About %s" msgstr "Über %s" -#: src/slic3r/GUI/GCodeViewer.cpp:3182 -msgid "above" -msgstr "über" - #: src/libslic3r/PrintConfig.cpp:2161 msgid "Above Z" msgstr "Über Z" @@ -680,10 +700,6 @@ msgstr "Aktivieren" msgid "Active" msgstr "Aktiv" -#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 -msgid "active" -msgstr "aktiv" - #: src/slic3r/GUI/GLCanvas3D.cpp:248 msgid "Adaptive" msgstr "Adaptiv" @@ -715,6 +731,60 @@ msgstr "" "\"%1%\" als nächste Voreinstellung für den physischen Drucker \"%2%\" " "hinzufügen" +#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 +msgid "Add Generic Subobject" +msgstr "Generische Subobjekt hinzufügen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 +msgid "Add Height Range" +msgstr "Höhenbereich hinzufügen" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 +msgid "Add Instance of the selected object" +msgstr "Kopie des gewählten Objektes hinzufügen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 +msgid "Add Layers" +msgstr "Schichten hinzufügen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 +msgid "Add Settings Bundle for Height range" +msgstr "Höhenbreich Einstellungsbündel hinzufügen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 +msgid "Add Settings Bundle for Object" +msgstr "Objekt Einstellungsbündel hinzufügen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 +msgid "Add Settings Bundle for Sub-object" +msgstr "Subobjekt Einstellungsbündel hinzufügen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 +msgid "Add Settings for Layers" +msgstr "Schichten Einstellungen hinzufügen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 +msgid "Add Settings for Object" +msgstr "Objekt Einstellungen hinzufügen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 +msgid "Add Settings for Sub-object" +msgstr "Subobjekt Einstellungen hinzufügen" + +#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 +msgid "Add Shape" +msgstr "Form hinzufügen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shape from Gallery" +msgstr "Form aus Galerie hinzufügen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shapes from Gallery" +msgstr "Formen aus Galerie hinzufügen" + #: src/libslic3r/PrintConfig.cpp:3607 msgid "Add a pad underneath the supported model" msgstr "Fügt eine Grundschicht unter das gestützte Modell" @@ -785,33 +855,15 @@ msgstr "Extruderwechsel hinzufügen - Linksklick" msgid "Add extruder to sequence" msgstr "Extruder zur Sequenz hinzufügen" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 -msgid "Add Generic Subobject" -msgstr "Generische Subobjekt hinzufügen" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 -msgid "Add Height Range" -msgstr "Höhenbereich hinzufügen" - #: src/slic3r/GUI/GLCanvas3D.cpp:4541 src/slic3r/GUI/GUI_Factories.cpp:1084 #: src/slic3r/GUI/GUI_Factories.cpp:1108 src/slic3r/GUI/GUI_Factories.cpp:1119 msgid "Add instance" msgstr "Kopie hinzufügen" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 -msgid "Add Instance of the selected object" -msgstr "Kopie des gewählten Objektes hinzufügen" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:164 msgid "Add layer range" msgstr "Schichtbereich hinzufügen" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 -msgid "Add Layers" -msgstr "Schichten hinzufügen" - #: src/slic3r/GUI/GUI_Factories.cpp:162 msgid "Add modifier" msgstr "Modifizierer hinzufügen" @@ -871,42 +923,6 @@ msgstr "Ausgewählte Form(en) zum Bett hinzufügen" msgid "Add settings" msgstr "Einstellungen hinzufügen" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 -msgid "Add Settings Bundle for Height range" -msgstr "Höhenbreich Einstellungsbündel hinzufügen" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 -msgid "Add Settings Bundle for Object" -msgstr "Objekt Einstellungsbündel hinzufügen" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 -msgid "Add Settings Bundle for Sub-object" -msgstr "Subobjekt Einstellungsbündel hinzufügen" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 -msgid "Add Settings for Layers" -msgstr "Schichten Einstellungen hinzufügen" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 -msgid "Add Settings for Object" -msgstr "Objekt Einstellungen hinzufügen" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 -msgid "Add Settings for Sub-object" -msgstr "Subobjekt Einstellungen hinzufügen" - -#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 -msgid "Add Shape" -msgstr "Form hinzufügen" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shape from Gallery" -msgstr "Form aus Galerie hinzufügen" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shapes from Gallery" -msgstr "Formen aus Galerie hinzufügen" - #: src/libslic3r/PrintConfig.cpp:686 msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " @@ -962,14 +978,14 @@ msgstr "Voreinstellungen hinzufügen/entfernen" msgid "Add/Remove printers" msgstr "Drucker hinzufügen/entfernen" -#: src/slic3r/GUI/Tab.cpp:1369 -msgid "Additional information:" -msgstr "Weitere Informationen:" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:63 msgid "Additional Settings" msgstr "Zusätzliche Einstellungen" +#: src/slic3r/GUI/Tab.cpp:1369 +msgid "Additional information:" +msgstr "Weitere Informationen:" + #: src/slic3r/GUI/ConfigWizard.cpp:1236 msgid "" "Additionally a backup snapshot of the whole configuration is created before " @@ -982,26 +998,19 @@ msgstr "" msgid "Address" msgstr "Adresse" -#: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 -#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 -#: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4661 -#: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 -#: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 -#: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 -#: src/libslic3r/PrintConfig.cpp:2490 src/libslic3r/PrintConfig.cpp:3028 -#: src/libslic3r/PrintConfig.cpp:3224 +#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 +msgctxt "Mode" msgid "Advanced" -msgstr "Erweiterte Einstellungen" - -#: src/slic3r/GUI/ConfigWizard.cpp:1280 -msgid "Advanced mode" -msgstr "Fortgeschrittener Modus" +msgstr "Erweitert" #: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Advanced View Mode" msgstr "Erweiterter Anzeigemodus" +#: src/slic3r/GUI/ConfigWizard.cpp:1280 +msgid "Advanced mode" +msgstr "Fortgeschrittener Modus" + #: src/slic3r/GUI/FirmwareDialog.cpp:851 msgid "Advanced: Output log" msgstr "Fortgeschritten: Ausgabeprotokoll" @@ -1026,14 +1035,14 @@ msgstr "" msgid "After layer change G-code" msgstr "G-Code am Schichtende" -#: src/libslic3r/PrintConfig.cpp:4322 -msgid "Align the model to the given point." -msgstr "Das Modell auf den angegebenen Punkt ausrichten." - #: src/libslic3r/PrintConfig.cpp:4321 msgid "Align XY" msgstr "Ausrichten von XY" +#: src/libslic3r/PrintConfig.cpp:4322 +msgid "Align the model to the given point." +msgstr "Das Modell auf den angegebenen Punkt ausrichten." + #: src/libslic3r/PrintConfig.cpp:2223 msgid "Aligned" msgstr "Ausgerichtet" @@ -1097,10 +1106,6 @@ msgstr "Alle Benutzervoreinstellungen werden gelöscht." msgid "All walls" msgstr "Alle Wände" -#: src/libslic3r/miniz_extension.cpp:121 -msgid "allocation failed" -msgstr "Allokation fehlgeschlagen" - #: src/slic3r/GUI/Preferences.cpp:208 src/slic3r/GUI/Preferences.cpp:212 msgid "Allow just a single PrusaSlicer instance" msgstr "Nur eine einzige PrusaSlicer-Instanz zulassen" @@ -1195,6 +1200,10 @@ msgstr "" "Ein Objekt verfügt über benutzerdefinierte Stützverstärker, die nicht " "verwendet werden, weil Stützen deaktiviert sind." +#: src/slic3r/GUI/GLCanvas3D.cpp:6367 +msgid "An object outside the print area was detected." +msgstr "Es wurde ein Objekt außerhalb des Druckbereichs erkannt." + #: src/slic3r/GUI/GLCanvas3D.cpp:6372 msgid "" "An object outside the print area was detected.\n" @@ -1203,10 +1212,6 @@ msgstr "" "Es wurde ein Objekt außerhalb des Druckbereichs erkannt.\n" "Das Problem lösen, um mit dem Slicen fortzufahren." -#: src/slic3r/GUI/GLCanvas3D.cpp:6367 -msgid "An object outside the print area was detected." -msgstr "Es wurde ein Objekt außerhalb des Druckbereichs erkannt." - #: src/slic3r/GUI/Jobs/PlaterJob.cpp:13 msgid "An unexpected error occured" msgstr "Unerwarteter Fehler aufgetreten" @@ -1227,14 +1232,6 @@ msgstr "" "Alle Änderungen sollten als neue Voreinstellungen gespeichert werden, die " "von diesem vererbt wurden." -#: src/libslic3r/PrintConfig.cpp:351 -msgid "API key" -msgstr "API Key" - -#: src/libslic3r/PrintConfig.cpp:291 -msgid "API Key / Password" -msgstr "API Key / Kennwort" - #: src/slic3r/GUI/GUI_App.cpp:2232 msgid "Application preferences" msgstr "Anwendungseinstellungen" @@ -1257,18 +1254,10 @@ msgstr "Farbwechsel automatisch anwenden" msgid "Apply to all the remaining small objects being loaded." msgstr "Anwenden auf alle verbleibenden kleinen Objekte, die geladen werden." -#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 -msgid "approximate seconds" -msgstr "ungefähre Sekunden" - #: src/libslic3r/PrintConfig.cpp:709 src/libslic3r/PrintConfig.cpp:1156 msgid "Archimedean Chords" msgstr "Archimedische Bögen" -#: src/libslic3r/miniz_extension.cpp:147 -msgid "archive is too large" -msgstr "Archiv ist zu groß" - #: src/slic3r/GUI/Tab.cpp:3731 #, boost-format msgid "Are you sure you want to %1% the selected preset?" @@ -1300,6 +1289,10 @@ msgstr "" msgid "Are you sure you want to delete \"%1%\" printer?" msgstr "Sind Sie sicher, dass Sie den Drucker \"%1%\" löschen möchten?" +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "Sind Sie sicher, dass Sie alle Ersetzungen löschen möchten?" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1132 msgid "Are you sure you want to do it?" msgstr "Sind Sie sicher, dass Sie es tun wollen?" @@ -1555,14 +1548,22 @@ msgstr "Verhalten bei unbekannten Konfigurationswerten" msgid "Balanced" msgstr "Balanziert" -#: src/slic3r/GUI/MainFrame.cpp:655 -msgid "based on Slic3r" -msgstr "basiert auf Slic3r" - #: src/slic3r/GUI/Tab.cpp:1989 msgid "Bed" msgstr "Druckbett" +#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape" +msgstr "Druckbettprofil" + +#: src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape and Size" +msgstr "Druckbettform und -größe" + +#: src/slic3r/GUI/ConfigWizard.cpp:1581 +msgid "Bed Temperature:" +msgstr "Druckbetttemperatur:" + #: src/libslic3r/PrintConfig.cpp:241 msgid "Bed custom model" msgstr "Druckbett individuelles Modell" @@ -1579,18 +1580,10 @@ msgstr "Bettfüllen abgebrochen." msgid "Bed filling done." msgstr "Bett füllen abgeschlossen." -#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape" -msgstr "Druckbettprofil" - #: src/libslic3r/PrintConfig.cpp:231 msgid "Bed shape" msgstr "Druckbettkontur" -#: src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape and Size" -msgstr "Druckbettform und -größe" - #: src/libslic3r/PrintConfig.cpp:396 msgid "Bed temperature" msgstr "Druckbetttemperatur" @@ -1604,10 +1597,6 @@ msgstr "" "Wert auf null, um die Befehle zur Steuerung der Betttemperatur im Output zu " "deaktivieren." -#: src/slic3r/GUI/ConfigWizard.cpp:1581 -msgid "Bed Temperature:" -msgstr "Druckbetttemperatur:" - #: src/slic3r/GUI/Tab.cpp:2422 src/libslic3r/GCode.cpp:709 #: src/libslic3r/PrintConfig.cpp:402 msgid "Before layer change G-code" @@ -1617,14 +1606,14 @@ msgstr "G-Code vor dem Schichtwechsel" msgid "Before roll back" msgstr "Vor dem Zurückwechseln" -#: src/slic3r/GUI/Plater.cpp:579 -msgid "Below object" -msgstr "Unter dem Objekt" - #: src/libslic3r/PrintConfig.cpp:2170 msgid "Below Z" msgstr "Unter Z" +#: src/slic3r/GUI/Plater.cpp:579 +msgid "Below object" +msgstr "Unter dem Objekt" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:21 msgid "Best surface quality" msgstr "Beste Oberflächenqualität" @@ -1663,13 +1652,14 @@ msgstr "Flaschenvolumen" msgid "Bottle weight" msgstr "Flaschengewicht" -#. 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:1121 src/libslic3r/PrintConfig.cpp:423 -#: src/libslic3r/PrintConfig.cpp:432 +#: src/slic3r/GUI/OptionsGroup.cpp:352 +msgctxt "Layers" msgid "Bottom" -msgstr "Unten" +msgstr "Boden" + +#: src/slic3r/GUI/MainFrame.cpp:1121 +msgid "Bottom View" +msgstr "Ansicht von unten" #: src/libslic3r/PrintConfig.cpp:2566 msgid "Bottom contact Z distance" @@ -1696,10 +1686,6 @@ msgstr "Die Bodenschale ist %1% mm stark für eine Schichthöhe von %2% mm." msgid "Bottom solid layers" msgstr "Massive Basisschichten" -#: src/slic3r/GUI/MainFrame.cpp:1121 -msgid "Bottom View" -msgstr "Ansicht von unten" - #: src/slic3r/GUI/GUI_Factories.cpp:461 src/slic3r/GUI/GUI_Factories.cpp:501 #: src/slic3r/GUI/GUI_Factories.cpp:505 msgid "Box" @@ -1798,10 +1784,6 @@ msgstr "Pinselgröße" msgid "Bucket fill" msgstr "Eimerfüllung" -#: src/libslic3r/miniz_extension.cpp:141 -msgid "buffer too small" -msgstr "Puffer zu klein" - #: src/slic3r/GUI/GUI_App.cpp:1660 msgid "" "But since this version of PrusaSlicer we don't show this information in " @@ -1827,18 +1809,30 @@ msgstr "" "Hinweis: Dieser Name kann später über die Einstellungen für physische " "Drucker geändert werden." -#: src/slic3r/GUI/PresetHints.cpp:191 -msgid "by the print profile maximum" -msgstr "mit dem Maximum des Druckerprofils" +#: src/slic3r/GUI/NotificationManager.cpp:890 +msgid "CANCELED" +msgstr "ABGEBROCHEN" + +#: src/slic3r/GUI/NotificationManager.cpp:895 +msgid "COMPLETED" +msgstr "ABGESCHLOSSEN" + +#: src/libslic3r/miniz_extension.cpp:117 +msgid "CRC-32 check failed" +msgstr "CRC-32 Check fehlgeschlagen" + +#: src/slic3r/Utils/Http.cpp:91 +msgid "" +"CURL init has failed. PrusaSlicer will be unable to establish network " +"connections. See logs for additional details." +msgstr "" +"CURL Init ist fehlgeschlagen. PrusaSlicer ist nicht in der Lage, " +"Netzwerkverbindungen herzustellen. Siehe Protokolle für weitere Details." #: src/slic3r/GUI/Preferences.cpp:314 msgid "Camera" msgstr "Kamera" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 -msgid "Camera view" -msgstr "Kameraansicht" - #: resources/data/hints.ini: [hint:Camera Views] msgid "" "Camera Views\n" @@ -1849,6 +1843,10 @@ msgstr "" "Wussten Sie, dass Sie mit den Zifferntasten 0-6 schnell zwischen " "vordefinierten Kamerawinkeln wechseln können?" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 +msgid "Camera view" +msgstr "Kameraansicht" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:322 msgid "Can't apply when proccess preview." msgstr "Kann nicht angewendet werden, wenn die Vorschau bearbeitet wird." @@ -1871,10 +1869,6 @@ msgstr "Abbruch ausgewählt" msgid "Cancel upload" msgstr "Upload abgebrochen" -#: src/slic3r/GUI/NotificationManager.cpp:890 -msgid "CANCELED" -msgstr "ABGEBROCHEN" - #: src/slic3r/GUI/PrintHostDialogs.cpp:375 msgid "Cancelled" msgstr "Abgebrochen" @@ -1978,30 +1972,10 @@ msgstr "Zertifikatsdatei (*.crt, *.pem)|*.crt;*.pem|alle Dateien|*.*" msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"" msgstr "\"%1%\" in \"%2%\" für den physischen Drucker \"%3%\" ändern." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 -msgid "Change camera type (perspective, orthographic)" -msgstr "Ändern des Kameratyps (perspektivisch, orthografisch)" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 -msgid "Change drainage hole diameter" -msgstr "Durchmesser des Drainagelochs ändern" - -#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 -msgid "Change extruder" -msgstr "Wechsel Extruder" - #: src/slic3r/GUI/GUI_ObjectList.cpp:616 msgid "Change Extruder" msgstr "Wechsel Extruder" -#: src/slic3r/GUI/DoubleSlider.cpp:1613 -msgid "Change extruder (N/A)" -msgstr "Extruder wechseln (nv)" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:722 -msgid "Change extruder color" -msgstr "Extruderfarbe ändern" - #: src/slic3r/GUI/GUI_ObjectList.cpp:4267 msgid "Change Extruders" msgstr "Wechsel Extruder" @@ -2015,6 +1989,26 @@ msgstr "Ändere Option %s" msgid "Change Part Type" msgstr "Teil Typ ändern" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 +msgid "Change camera type (perspective, orthographic)" +msgstr "Ändern des Kameratyps (perspektivisch, orthografisch)" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 +msgid "Change drainage hole diameter" +msgstr "Durchmesser des Drainagelochs ändern" + +#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 +msgid "Change extruder" +msgstr "Wechsel Extruder" + +#: src/slic3r/GUI/DoubleSlider.cpp:1613 +msgid "Change extruder (N/A)" +msgstr "Extruder wechseln (nv)" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:722 +msgid "Change extruder color" +msgstr "Extruderfarbe ändern" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:702 msgid "Change point head diameter" msgstr "Ändern des Stützpunkt-Kopfdurchmessers" @@ -2051,6 +2045,10 @@ msgstr "" "Das Ändern einiger Optionen führt zu einem Neustart der Anwendung.\n" "Sie verlieren dann den Inhalt der Plattform." +#: src/slic3r/GUI/GUI_App.cpp:2219 +msgid "Check for Configuration Updates" +msgstr "Nach Konfigurationsaktualisierungen suchen" + #: src/slic3r/GUI/ConfigWizard.cpp:1214 msgid "Check for application updates" msgstr "Nach Updates suchen" @@ -2059,9 +2057,9 @@ msgstr "Nach Updates suchen" msgid "Check for configuration updates" msgstr "Suche nach Konfigurationsaktualisierungen" -#: src/slic3r/GUI/GUI_App.cpp:2219 -msgid "Check for Configuration Updates" -msgstr "Nach Konfigurationsaktualisierungen suchen" +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 +msgid "Choose SLA archive:" +msgstr "SLA Archiv wählen:" #: src/slic3r/GUI/BedShapeDialog.cpp:552 msgid "Choose a file to import bed texture from (PNG/SVG):" @@ -2085,6 +2083,10 @@ msgstr "" "Wählen Sie eine STL-Datei aus, aus der Sie die Druckbettform importieren " "möchten:" +#: src/slic3r/GUI/GalleryDialog.cpp:453 +msgid "Choose one PNG file:" +msgstr "Choose one PNG file:" + #: src/slic3r/GUI/GUI_App.cpp:1836 msgid "Choose one file (3MF/AMF):" msgstr "Wählen Sie eine Datei (3MF/AMF):" @@ -2101,14 +2103,6 @@ msgstr "Wählen Sie eine oder mehrere Dateien (STL, OBJ):" msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Wählen Sie eine oder mehrere Dateien (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GalleryDialog.cpp:453 -msgid "Choose one PNG file:" -msgstr "Choose one PNG file:" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 -msgid "Choose SLA archive:" -msgstr "SLA Archiv wählen:" - #: src/slic3r/GUI/ConfigWizard.cpp:1361 msgid "Choose the type of firmware used by your printer." msgstr "Wählen Sie den Typ der von Ihrem Drucker verwendeten Firmware." @@ -2123,10 +2117,6 @@ msgstr "Kreis" msgid "Circular" msgstr "Kreisförmig" -#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 -msgid "Clear all" -msgstr "Alles löschen" - #: src/slic3r/GUI/Preferences.cpp:295 msgid "Clear Undo / Redo stack on new project" msgstr "Undo/Redo-Stapel bei neuem Projekt löschen" @@ -2138,6 +2128,10 @@ msgstr "" "Undo / Redo-Stapel bei neuem Projekt oder beim Laden eines bestehenden " "Projekts löschen." +#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 +msgid "Clear all" +msgstr "Alles löschen" + #: src/slic3r/GUI/GLCanvas3D.cpp:4689 src/slic3r/GUI/GLCanvas3D.cpp:4728 msgid "Click right mouse button to open/close History" msgstr "" @@ -2193,11 +2187,6 @@ msgstr "Schließen" msgid "Close holes" msgstr "Löcher schließen" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 -#: src/libslic3r/PrintConfig.cpp:3759 -msgid "Closing distance" -msgstr "Schliessabstand" - #: src/slic3r/GUI/MainFrame.cpp:232 msgid "Closing PrusaSlicer while some presets are modified." msgstr "" @@ -2207,6 +2196,11 @@ msgstr "" msgid "Closing PrusaSlicer. Current project is modified." msgstr "PrusaSlicer schließen. Das aktuelle Projekt wurde geändert." +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 +#: src/libslic3r/PrintConfig.cpp:3759 +msgid "Closing distance" +msgstr "Schliessabstand" + #: src/libslic3r/PrintConfig.cpp:2667 msgid "Closing radius" msgstr "Schließradius" @@ -2223,6 +2217,15 @@ msgstr "Seitenleiste zu-/ausklappen" msgid "Color" msgstr "Farbe" +#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 +msgid "Color Change G-code" +msgstr "G-Code für Farbwechsel" + +#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 +#: src/slic3r/GUI/GUI_Preview.cpp:957 +msgid "Color Print" +msgstr "Color Print" + #: src/slic3r/GUI/GCodeViewer.cpp:3487 src/slic3r/GUI/GCodeViewer.cpp:3543 msgid "Color change" msgstr "Farbwechsel" @@ -2237,10 +2240,6 @@ msgstr "Farbwechsel (\"%1%\")" msgid "Color change (\"%1%\") for Extruder %2%" msgstr "Farbwechsel (\"%1%\") für Extruder %2%" -#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 -msgid "Color Change G-code" -msgstr "G-Code für Farbwechsel" - #: src/libslic3r/PrintConfig.cpp:2432 msgid "Color change G-code" msgstr "G-Code für Farbwechsel" @@ -2249,11 +2248,6 @@ msgstr "G-Code für Farbwechsel" msgid "Color changes" msgstr "Farbwechsel" -#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 -#: src/slic3r/GUI/GUI_Preview.cpp:957 -msgid "Color Print" -msgstr "Color Print" - #: src/libslic3r/PrintConfig.cpp:537 msgid "Colorprint height" msgstr "Colorprint Höhe" @@ -2288,12 +2282,12 @@ msgid "Comment:" msgstr "Kommentar:" #: src/slic3r/GUI/MainFrame.cpp:1417 -msgid "Compare presets" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +msgid "Compare Presets" msgstr "Voreinstellungen vergleichen" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 -msgid "Compare Presets" +msgid "Compare presets" msgstr "Voreinstellungen vergleichen" #: src/slic3r/GUI/Tab.cpp:216 @@ -2328,14 +2322,6 @@ msgstr "Objekte nacheinander drucken" msgid "Completed" msgstr "Fertig" -#: src/slic3r/GUI/NotificationManager.cpp:895 -msgid "COMPLETED" -msgstr "ABGESCHLOSSEN" - -#: src/libslic3r/miniz_extension.cpp:113 -msgid "compression failed" -msgstr "Komprimierung fehlgeschlagen" - #: src/libslic3r/PrintConfig.cpp:707 src/libslic3r/PrintConfig.cpp:1151 #: src/libslic3r/PrintConfig.cpp:2722 msgid "Concentric" @@ -2353,6 +2339,24 @@ msgstr "&Konfigurations-Assistent" msgid "Configuration Assistant" msgstr "Konfigurations-Assistent" +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 +msgid "Configuration Snapshots" +msgstr "Konfigurations-Momentaufnahmen" + +#: src/slic3r/Utils/PresetUpdater.cpp:777 +msgid "" +"Configuration Updates causes a lost of preset modification.\n" +"So, check unsaved changes and save them if necessary." +msgstr "" +"Bei einer Konfigurationsaktualisierung gehen voreingestellte Änderungen " +"verloren.\n" +"Überprüfen Sie daher nicht gespeicherte Änderungen und speichern Sie sie " +"gegebenenfalls." + +#: src/slic3r/GUI/ConfigWizard.cpp:3039 +msgid "Configuration Wizard" +msgstr "Konfigurations-Assistent" + #: src/slic3r/GUI/GUI.cpp:355 msgid "" "Configuration bundle was loaded, however some configuration values were not " @@ -2395,10 +2399,6 @@ msgstr "" "Konfigurations-Schnappschüsse können Sie Schnappschüsse anzeigen und " "zwischen ihnen hin und her wechseln." -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 -msgid "Configuration Snapshots" -msgstr "Konfigurations-Momentaufnahmen" - #: src/slic3r/GUI/UpdateDialogs.cpp:94 src/slic3r/GUI/UpdateDialogs.cpp:261 msgid "Configuration update" msgstr "Konfigurationsupdate" @@ -2415,20 +2415,6 @@ msgstr "Konfigurationsupdate ist verfügbar." msgid "Configuration updates" msgstr "Konfigurationsupdates" -#: src/slic3r/Utils/PresetUpdater.cpp:777 -msgid "" -"Configuration Updates causes a lost of preset modification.\n" -"So, check unsaved changes and save them if necessary." -msgstr "" -"Bei einer Konfigurationsaktualisierung gehen voreingestellte Änderungen " -"verloren.\n" -"Überprüfen Sie daher nicht gespeicherte Änderungen und speichern Sie sie " -"gegebenenfalls." - -#: src/slic3r/GUI/ConfigWizard.cpp:3039 -msgid "Configuration Wizard" -msgstr "Konfigurations-Assistent" - #: src/slic3r/GUI/FirmwareDialog.cpp:916 msgid "Confirmation" msgstr "Bestätigung" @@ -2501,12 +2487,6 @@ msgstr "" msgid "Connection to OctoPrint works correctly." msgstr "Verbindung zu OctoPrint funktioniert einwandfrei." -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 -msgid "Connection to printers connected via the print host failed." -msgstr "" -"Die Verbindung zu Druckern, die über den Druck-Host angeschlossen sind, ist " -"fehlgeschlagen." - #: src/slic3r/Utils/OctoPrint.cpp:292 msgid "Connection to Prusa SL1 / SL1S works correctly." msgstr "Verbindung zum Prusa SL1 / SL1S funktioniert einwandfrei." @@ -2519,9 +2499,11 @@ msgstr "Die Verbindung zu PrusaLink funktioniert einwandfrei." msgid "Connection to Repetier works correctly." msgstr "Die Verbindung zu Repetier funktioniert korrekt." -#: src/slic3r/GUI/DoubleSlider.cpp:1458 -msgid "continue" -msgstr "weiter" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 +msgid "Connection to printers connected via the print host failed." +msgstr "" +"Die Verbindung zu Druckern, die über den Druck-Host angeschlossen sind, ist " +"fehlgeschlagen." #: src/slic3r/Config/Snapshot.cpp:601 msgid "Continue" @@ -2605,25 +2587,26 @@ msgstr "Position des Kühlschlauchs" msgid "Copies of the selected object" msgstr "Kopien des ausgewählten Objekts" -#: src/slic3r/GUI/GLCanvas3D.cpp:4520 +#: src/slic3r/GUI/SavePresetDialog.cpp:221 +msgctxt "PresetName" msgid "Copy" msgstr "Kopieren" +#: src/slic3r/GUI/AboutDialog.cpp:308 +msgid "Copy Version Info" +msgstr "Versionsinfo kopieren" + #: src/slic3r/GUI/MainFrame.cpp:1343 msgid "Copy selection to clipboard" msgstr "Auswahl in Zwischenablage kopieren" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 -msgid "Copy to clipboard" -msgstr "Zu Zwischenablage kopieren" - #: src/slic3r/GUI/SysInfoDialog.cpp:169 msgid "Copy to Clipboard" msgstr "Zu Zwischenablage kopieren" -#: src/slic3r/GUI/AboutDialog.cpp:308 -msgid "Copy Version Info" -msgstr "Versionsinfo kopieren" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 +msgid "Copy to clipboard" +msgstr "Zu Zwischenablage kopieren" #: src/slic3r/Utils/PresetUpdater.cpp:61 #, boost-format @@ -2780,10 +2763,6 @@ msgstr "" "endgültige Druckauflösung verringern, daher ist es ratsam, den Wert relativ " "niedrig zu halten." -#: src/libslic3r/miniz_extension.cpp:117 -msgid "CRC-32 check failed" -msgstr "CRC-32 Check fehlgeschlagen" - #: src/libslic3r/PrintConfig.cpp:3682 msgid "Create pad around object and ignore the support elevation" msgstr "" @@ -2827,14 +2806,6 @@ msgstr "Strg + Mausrad" msgid "Cubic" msgstr "Kubisch" -#: src/slic3r/Utils/Http.cpp:91 -msgid "" -"CURL init has failed. PrusaSlicer will be unable to establish network " -"connections. See logs for additional details." -msgstr "" -"CURL Init ist fehlgeschlagen. PrusaSlicer ist nicht in der Lage, " -"Netzwerkverbindungen herzustellen. Siehe Protokolle für weitere Details." - #: src/slic3r/GUI/wxExtensions.cpp:645 #, c-format, boost-format msgid "Current mode is %s" @@ -2953,10 +2924,6 @@ msgstr "Todeszone:" msgid "Decimate ratio" msgstr "Dezimierungsverhältnis" -#: src/libslic3r/miniz_extension.cpp:111 -msgid "decompression failed or archive is corrupted" -msgstr "Entpacken fehlgeschlagen oder Archiv defekt" - #: src/slic3r/GUI/Plater.cpp:5517 msgid "Decrease Instances" msgstr "Kopien verringern" @@ -2967,16 +2934,9 @@ msgstr "Kopien verringern" msgid "Default" msgstr "Standard" -#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 -#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 -msgid "default" -msgstr "Standard" +#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 +msgid "Default SLA material profile" +msgstr "Standard-SLA-Materialprofil" #: src/libslic3r/PrintConfig.cpp:1072 msgid "" @@ -2992,18 +2952,10 @@ msgstr "" msgid "Default color" msgstr "Standardfarbe" -#: src/slic3r/GUI/GCodeViewer.cpp:3388 -msgid "default color" -msgstr "Standardfarbe" - #: src/libslic3r/PrintConfig.cpp:837 msgid "Default extrusion width" msgstr "Standardextrusionsbreite" -#: src/slic3r/GUI/Tab.cpp:1386 -msgid "default filament profile" -msgstr "Standard-Filamentprofil" - #: src/libslic3r/PrintConfig.cpp:622 msgid "Default filament profile" msgstr "Standard-Filamentprofil" @@ -3017,10 +2969,6 @@ msgstr "" "Standard-Filamentprofil, das dem aktuellen Druckerprofil zugeordnet ist. Bei " "Auswahl des aktuellen Druckerprofils wird dieses Filamentprofil aktiviert." -#: src/slic3r/GUI/Tab.cpp:1383 -msgid "default print profile" -msgstr "Standard-Druckprofil" - #: src/libslic3r/PrintConfig.cpp:629 msgid "Default print profile" msgstr "Standard-Druckprofil" @@ -3035,22 +2983,6 @@ msgstr "" "Standarddruckprofil, das dem aktuellen Druckerprofil zugeordnet ist. Bei " "Auswahl des aktuellen Druckerprofils wird dieses Druckprofil aktiviert." -#: src/slic3r/GUI/Tab.cpp:1400 -msgid "default SLA material profile" -msgstr "Standard-SLA-Materialprofil" - -#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 -msgid "Default SLA material profile" -msgstr "Standard-SLA-Materialprofil" - -#: src/slic3r/GUI/Tab.cpp:1404 -msgid "default SLA print profile" -msgstr "Standard-SLA-Druckprofil" - -#: src/slic3r/GUI/Field.cpp:190 -msgid "default value" -msgstr "Standardwert" - #: src/slic3r/GUI/ConfigWizard.cpp:1177 msgid "Define a custom printer profile" msgstr "Benutzerdefiniertes Druckerprofil definieren" @@ -3071,10 +3003,6 @@ msgstr "" msgid "Delay after unloading" msgstr "Verzögerung nach dem Entladen" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "delete" -msgstr "löschen" - #: src/slic3r/GUI/GalleryDialog.cpp:118 src/slic3r/GUI/GalleryDialog.cpp:508 #: src/slic3r/GUI/GLCanvas3D.cpp:4480 src/slic3r/GUI/GUI_Factories.cpp:444 #: src/slic3r/GUI/Tab.cpp:3734 @@ -3085,11 +3013,6 @@ msgstr "Löschen" msgid "Delete &All" msgstr "&Alles löschen" -#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 -msgid "Delete all" -msgstr "Alle löschen" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1901 msgid "Delete All Instances from Object" msgstr "Alle Kopien des Objektes löschen" @@ -3098,22 +3021,6 @@ msgstr "Alle Kopien des Objektes löschen" msgid "Delete All Objects" msgstr "Alle Objekte löschen" -#: src/slic3r/GUI/DoubleSlider.cpp:2012 -msgid "Delete color change" -msgstr "Farbwechsel löschen" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 -msgid "Delete color change marker for current layer" -msgstr "Löscht einen Farbwechselmarker der aktuellen Schicht" - -#: src/slic3r/GUI/DoubleSlider.cpp:2015 -msgid "Delete custom G-code" -msgstr "Benutzerdefinierten G-Code löschen" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 -msgid "Delete drainage hole" -msgstr "Drainageloch entfernen" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1917 msgid "Delete Height Range" msgstr "Höhenbereich löschen" @@ -3126,33 +3033,15 @@ msgstr "Kopie löschen" msgid "Delete Object" msgstr "Objekt löschen" -#: src/slic3r/GUI/GalleryDialog.cpp:118 -msgid "Delete one or more custom shape. You can't delete system shapes" -msgstr "" -"Löschen Sie eine oder mehrere benutzerdefinierte Formen. Sie können keine " -"Systemformen löschen" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:105 #, c-format, boost-format msgid "Delete Option %s" msgstr "Lösche Option %s" -#: src/slic3r/GUI/DoubleSlider.cpp:2014 -msgid "Delete pause print" -msgstr "Druckpause löschen" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:733 -msgid "Delete physical printer" -msgstr "Physischen Drucker löschen" - #: src/slic3r/GUI/PresetComboBoxes.cpp:340 msgid "Delete Physical Printer" msgstr "Physischen Drucker löschen" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 -msgid "Delete selected" -msgstr "Löschen ausgewählt" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2934 msgid "Delete Selected" msgstr "Löschen ausgewählt" @@ -3173,6 +3062,45 @@ msgstr "Einstellungen löschen" msgid "Delete Subobject" msgstr "Subobjekt löschen" +#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 +#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 +msgid "Delete all" +msgstr "Alle löschen" + +#: src/slic3r/GUI/DoubleSlider.cpp:2012 +msgid "Delete color change" +msgstr "Farbwechsel löschen" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 +msgid "Delete color change marker for current layer" +msgstr "Löscht einen Farbwechselmarker der aktuellen Schicht" + +#: src/slic3r/GUI/DoubleSlider.cpp:2015 +msgid "Delete custom G-code" +msgstr "Benutzerdefinierten G-Code löschen" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 +msgid "Delete drainage hole" +msgstr "Drainageloch entfernen" + +#: src/slic3r/GUI/GalleryDialog.cpp:118 +msgid "Delete one or more custom shape. You can't delete system shapes" +msgstr "" +"Löschen Sie eine oder mehrere benutzerdefinierte Formen. Sie können keine " +"Systemformen löschen" + +#: src/slic3r/GUI/DoubleSlider.cpp:2014 +msgid "Delete pause print" +msgstr "Druckpause löschen" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:733 +msgid "Delete physical printer" +msgstr "Physischen Drucker löschen" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 +msgid "Delete selected" +msgstr "Löschen ausgewählt" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:522 msgid "Delete support point" msgstr "Stützpunkt löschen" @@ -3249,10 +3177,6 @@ msgstr "Alle Objekte abwählen" msgid "Desktop Integration" msgstr "Desktop Integration" -#: src/slic3r/GUI/NotificationManager.hpp:768 -msgid "Desktop integration failed." -msgstr "Desktop Integration fehlgeschlagen." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:466 msgid "" "Desktop Integration sets this binary to be searchable by the system.\n" @@ -3264,6 +3188,10 @@ msgstr "" "\n" "Drücken Sie auf \"Ausführen\", um fortzufahren." +#: src/slic3r/GUI/NotificationManager.hpp:768 +msgid "Desktop integration failed." +msgstr "Desktop Integration fehlgeschlagen." + #: src/slic3r/GUI/NotificationManager.hpp:766 msgid "Desktop integration was successful." msgstr "Desktop Integration war erfolgreich." @@ -3358,10 +3286,6 @@ msgstr "" "Modell in der 3D-Ansicht, wählen Sie Schichten und Umfänge und passen Sie " "die Werte im rechten Fenster an. Lesen Sie mehr in der Dokumentation." -#: src/slic3r/GUI/Plater.cpp:3652 -msgid "differs from the original file" -msgstr "weicht von der Originaldatei ab" - #: src/libslic3r/PrintConfig.cpp:2231 msgid "Direction" msgstr "Richtung" @@ -3535,18 +3459,14 @@ msgstr "Möchten Sie die Änderungen in \"%1%\" speichern?" msgid "Do you want to save your manually edited support points?" msgstr "Möchten Sie Ihre manuell bearbeiteten Stützpunkte speichern?" -#: src/slic3r/GUI/ConfigWizard.cpp:2463 -msgid "Do you want to select default filaments for these FFF printer models?" -msgstr "Möchten Sie Standardfilamente für diese FFF-Druckermodelle auswählen?" - #: src/slic3r/GUI/ConfigWizard.cpp:2481 msgid "Do you want to select default SLA materials for these printer models?" msgstr "" "Möchten Sie Standard-SLA-Materialien für diese Druckermodelle auswählen?" -#: src/slic3r/GUI/Plater.cpp:5202 -msgid "does not contain valid gcode." -msgstr "enthält keinen gültigen G-Code." +#: src/slic3r/GUI/ConfigWizard.cpp:2463 +msgid "Do you want to select default filaments for these FFF printer models?" +msgstr "Möchten Sie Standardfilamente für diese FFF-Druckermodelle auswählen?" #: src/libslic3r/PrintConfig.cpp:4353 msgid "Don't arrange" @@ -3642,10 +3562,37 @@ msgstr "Dynamisch" msgid "E&xport" msgstr "E&xport" +#: src/slic3r/GUI/NotificationManager.cpp:885 +msgid "ERROR" +msgstr "FEHLER" + +#: src/slic3r/GUI/NotificationManager.cpp:1447 +#: src/slic3r/GUI/NotificationManager.cpp:1454 +#: src/slic3r/GUI/NotificationManager.cpp:1470 +#: src/slic3r/GUI/NotificationManager.cpp:1476 +#: src/slic3r/GUI/NotificationManager.cpp:1547 +msgid "ERROR:" +msgstr "FEHLER:" + +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 +msgid "" +"ERROR: Please close all manipulators available from the left toolbar first" +msgstr "" +"FEHLER: Bitte schließen Sie zuerst alle in der linken Symbolleiste " +"verfügbaren Manipulatoren" + +#: src/slic3r/GUI/Jobs/Job.cpp:111 +msgid "ERROR: not enough resources to execute a new job." +msgstr "FEHLER: Nicht genügend Ressourcen, um einen neuen Job auszuführen." + #: src/slic3r/GUI/ImGuiWrapper.cpp:527 msgid "Edit" msgstr "Bearbeiten" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 +msgid "Edit Height Range" +msgstr "Höhenbereich bearbeiten" + #: src/slic3r/GUI/DoubleSlider.cpp:2004 msgid "Edit color" msgstr "Farbe bearbeiten" @@ -3659,10 +3606,6 @@ msgstr "" msgid "Edit custom G-code" msgstr "Benutzerdefinierten G-Code bearbeiten" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 -msgid "Edit Height Range" -msgstr "Höhenbereich bearbeiten" - #: src/slic3r/GUI/DoubleSlider.cpp:2005 msgid "Edit pause print message" msgstr "Druckpausen-Mitteilung bearbeiten" @@ -3695,10 +3638,6 @@ msgstr "Eigen Vektorisierung unterstützt:" msgid "Ejec&t SD Card / Flash Drive" msgstr "SD-Kar&te/Flash-Laufwerk auswerfen" -#: src/slic3r/GUI/NotificationManager.cpp:701 -msgid "Eject drive" -msgstr "Laufwerk auswerfen" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:91 msgid "Eject SD card / Flash drive" msgstr "SD-Karte/Flash-Laufwerk auswerfen" @@ -3709,6 +3648,10 @@ msgstr "" "SD-Karte / Flash-Laufwerk auswerfen, nachdem der G-Code dorthin exportiert " "wurde." +#: src/slic3r/GUI/NotificationManager.cpp:701 +msgid "Eject drive" +msgstr "Laufwerk auswerfen" + #: src/slic3r/GUI/Plater.cpp:2202 #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." @@ -4016,9 +3959,9 @@ msgstr "" msgid "Error" msgstr "Fehler" -#: src/slic3r/GUI/NotificationManager.cpp:885 -msgid "ERROR" -msgstr "FEHLER" +#: src/slic3r/GUI/PrintHostDialogs.cpp:253 +msgid "Error Message" +msgstr "Fehlermeldung" #: src/slic3r/GUI/FirmwareDialog.cpp:650 #, c-format, boost-format @@ -4037,10 +3980,6 @@ msgstr "Fehler während Ersatz" msgid "Error loading shaders" msgstr "Fehler beim Laden von Shadern" -#: src/slic3r/GUI/PrintHostDialogs.cpp:253 -msgid "Error Message" -msgstr "Fehlermeldung" - #: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " @@ -4080,30 +4019,11 @@ msgstr "Fehler!" msgid "Error! Invalid model" msgstr "Fehler! Ungültiges Modell" -#: src/slic3r/GUI/NotificationManager.cpp:1447 -#: src/slic3r/GUI/NotificationManager.cpp:1454 -#: src/slic3r/GUI/NotificationManager.cpp:1470 -#: src/slic3r/GUI/NotificationManager.cpp:1476 -#: src/slic3r/GUI/NotificationManager.cpp:1547 -msgid "ERROR:" -msgstr "FEHLER:" - #: src/slic3r/GUI/FirmwareDialog.cpp:652 #, c-format, boost-format msgid "Error: %s" msgstr "Fehler: %s" -#: src/slic3r/GUI/Jobs/Job.cpp:111 -msgid "ERROR: not enough resources to execute a new job." -msgstr "FEHLER: Nicht genügend Ressourcen, um einen neuen Job auszuführen." - -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 -msgid "" -"ERROR: Please close all manipulators available from the left toolbar first" -msgstr "" -"FEHLER: Bitte schließen Sie zuerst alle in der linken Symbolleiste " -"verfügbaren Manipulatoren" - #: src/slic3r/GUI/Plater.cpp:301 src/slic3r/GUI/Plater.cpp:1339 #: src/slic3r/GUI/Plater.cpp:1426 msgid "Estimated printing time" @@ -4125,15 +4045,6 @@ msgstr "Ereignis" msgid "Everywhere" msgstr "Überall" -#: src/slic3r/GUI/PresetHints.cpp:59 -#, boost-format -msgid "except for the first %1% layers." -msgstr "außer für die ersten %1% Schichten." - -#: src/slic3r/GUI/PresetHints.cpp:61 -msgid "except for the first layer." -msgstr "außer für die erste Schicht." - #: src/libslic3r/Print.cpp:575 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" @@ -4183,14 +4094,14 @@ msgstr "" msgid "Expert" msgstr "Experte" -#: src/slic3r/GUI/ConfigWizard.cpp:1281 -msgid "Expert mode" -msgstr "Expertenmodus" - #: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Expert View Mode" msgstr "Experten Anzeigemodus" +#: src/slic3r/GUI/ConfigWizard.cpp:1281 +msgid "Expert mode" +msgstr "Expertenmodus" + #: src/slic3r/GUI/Plater.cpp:6492 msgid "Export" msgstr "Export" @@ -4211,6 +4122,63 @@ msgstr "Werkzeugwege als OBJ expor&tieren" msgid "Export 3MF" msgstr "Export 3MF" +#: src/libslic3r/PrintConfig.cpp:4261 +msgid "Export AMF" +msgstr "Exportiere AMF" + +#: src/slic3r/GUI/Plater.cpp:2853 +msgid "Export AMF file:" +msgstr "Exportiere AMF Datei:" + +#: src/slic3r/GUI/MainFrame.cpp:1257 +msgid "Export Config &Bundle" +msgstr "Konfigurationssa&mlung exportieren" + +#: src/slic3r/GUI/MainFrame.cpp:1260 +msgid "Export Config Bundle With Physical Printers" +msgstr "Konfigurations-Bundle mit physischen Druckern exportieren" + +#: src/slic3r/GUI/NotificationManager.cpp:1113 +msgid "Export G-Code." +msgstr "G-Code exportieren." + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 +#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +msgid "Export G-code" +msgstr "Export G-Code" + +#: src/slic3r/GUI/MainFrame.cpp:1235 +msgid "Export G-code to SD Card / Flash Drive" +msgstr "G-Code auf SD-Karte/Flash-Laufwerk exportieren" + +#: src/libslic3r/PrintConfig.cpp:4238 +msgid "Export OBJ" +msgstr "Exportiere OBJ" + +#: src/slic3r/GUI/Plater.cpp:2865 +msgid "Export OBJ file:" +msgstr "Exportiere OBJ Datei:" + +#: src/slic3r/GUI/MainFrame.cpp:1239 +msgid "Export Plate as &STL" +msgstr "Exportiere die Plattenbelegung als &STL" + +#: src/slic3r/GUI/MainFrame.cpp:1242 +msgid "Export Plate as STL &Including Supports" +msgstr "Exportiere Plattenbelegung als STL einschließlich Stützen" + +#: src/libslic3r/PrintConfig.cpp:4250 +msgid "Export SLA" +msgstr "Exportiere SLA" + +#: src/libslic3r/PrintConfig.cpp:4266 +msgid "Export STL" +msgstr "Exportiere STL" + +#: src/slic3r/GUI/Plater.cpp:2846 +msgid "Export STL file:" +msgstr "Exportiere STL Datei:" + #: src/slic3r/GUI/MainFrame.cpp:1260 msgid "Export all presets including physical printers to file" msgstr "" @@ -4221,14 +4189,6 @@ msgstr "" msgid "Export all presets to file" msgstr "Exportiere alle Voreinstellungen in eine Datei" -#: src/libslic3r/PrintConfig.cpp:4261 -msgid "Export AMF" -msgstr "Exportiere AMF" - -#: src/slic3r/GUI/Plater.cpp:2853 -msgid "Export AMF file:" -msgstr "Exportiere AMF Datei:" - #: src/slic3r/GUI/GUI_Factories.cpp:715 msgid "Export as STL" msgstr "Exportiere als STL" @@ -4237,14 +4197,6 @@ msgstr "Exportiere als STL" msgid "Export config" msgstr "Konfiguration exportieren" -#: src/slic3r/GUI/MainFrame.cpp:1257 -msgid "Export Config &Bundle" -msgstr "Konfigurationssa&mlung exportieren" - -#: src/slic3r/GUI/MainFrame.cpp:1260 -msgid "Export Config Bundle With Physical Printers" -msgstr "Konfigurations-Bundle mit physischen Druckern exportieren" - #: src/slic3r/GUI/MainFrame.cpp:1254 msgid "Export current configuration to file" msgstr "Exportiere die aktuelle Konfiguration in eine Datei" @@ -4273,55 +4225,14 @@ msgstr "" "Exportieren Sie die vollständigen Pfadnamen der Modelle und Teilequellen in " "3mf- und amf-Dateien" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 -msgid "Export G-code" -msgstr "Export G-Code" - -#: src/slic3r/GUI/MainFrame.cpp:1235 -msgid "Export G-code to SD Card / Flash Drive" -msgstr "G-Code auf SD-Karte/Flash-Laufwerk exportieren" - -#: src/slic3r/GUI/NotificationManager.cpp:1113 -msgid "Export G-Code." -msgstr "G-Code exportieren." - -#: src/libslic3r/PrintConfig.cpp:4238 -msgid "Export OBJ" -msgstr "Exportiere OBJ" - -#: src/slic3r/GUI/Plater.cpp:2865 -msgid "Export OBJ file:" -msgstr "Exportiere OBJ Datei:" - #: src/slic3r/Utils/FixModelByWin10.cpp:379 msgid "Export of a temporary 3mf file failed" msgstr "Export einer temporären 3MF Datei fehlgeschlagen" -#: src/slic3r/GUI/MainFrame.cpp:1239 -msgid "Export Plate as &STL" -msgstr "Exportiere die Plattenbelegung als &STL" - -#: src/slic3r/GUI/MainFrame.cpp:1242 -msgid "Export Plate as STL &Including Supports" -msgstr "Exportiere Plattenbelegung als STL einschließlich Stützen" - -#: src/libslic3r/PrintConfig.cpp:4250 -msgid "Export SLA" -msgstr "Exportiere SLA" - #: src/slic3r/GUI/Preferences.cpp:148 msgid "Export sources full pathnames to 3mf and amf" msgstr "Vollständige Pfadnamen der Quellen in 3mf und amf exportieren" -#: src/libslic3r/PrintConfig.cpp:4266 -msgid "Export STL" -msgstr "Exportiere STL" - -#: src/slic3r/GUI/Plater.cpp:2846 -msgid "Export STL file:" -msgstr "Exportiere STL Datei:" - #: src/libslic3r/PrintConfig.cpp:4257 msgid "Export the model(s) as 3MF." msgstr "Exportiert das/die Modell(e) als 3MF Datei." @@ -4350,6 +4261,10 @@ msgstr "Werkzeugweg als OBJ exportieren" msgid "Export." msgstr "Export." +#: src/libslic3r/Print.cpp:863 +msgid "Exporting G-code" +msgstr "Exportiere G-Code" + #: src/slic3r/GUI/MainFrame.cpp:1809 msgid "Exporting configuration bundle" msgstr "Konfigurationsbündel exportieren" @@ -4358,10 +4273,6 @@ msgstr "Konfigurationsbündel exportieren" msgid "Exporting finished." msgstr "Exportieren beendet." -#: src/libslic3r/Print.cpp:863 -msgid "Exporting G-code" -msgstr "Exportiere G-Code" - #: src/slic3r/Utils/FixModelByWin10.cpp:221 #: src/slic3r/Utils/FixModelByWin10.cpp:362 msgid "Exporting source model" @@ -4388,10 +4299,6 @@ msgstr "Belichtungszeit" msgid "External perimeter" msgstr "Außenkontur" -#: src/slic3r/GUI/PresetHints.cpp:170 -msgid "external perimeters" -msgstr "Außenkonturen" - #: src/libslic3r/PrintConfig.cpp:727 src/libslic3r/PrintConfig.cpp:739 msgid "External perimeters" msgstr "Außenkonturen" @@ -4437,6 +4344,10 @@ msgstr "Extruder %d" msgid "Extruder (tool) is changed to Extruder \"%1%\"" msgstr "Extruder (Werkzeug) ist geändert auf Extruder \"%1%\"" +#: src/libslic3r/PrintConfig.cpp:804 +msgid "Extruder Color" +msgstr "Extruder Farbe" + #: src/slic3r/GUI/WipeTowerDialog.cpp:300 msgid "Extruder changed to" msgstr "Extruder geändert auf" @@ -4445,10 +4356,6 @@ msgstr "Extruder geändert auf" msgid "Extruder clearance" msgstr "Extruder Freiraum" -#: src/libslic3r/PrintConfig.cpp:804 -msgid "Extruder Color" -msgstr "Extruder Farbe" - #: src/libslic3r/PrintConfig.cpp:811 msgid "Extruder offset" msgstr "Extruder Offset" @@ -4470,22 +4377,10 @@ msgstr "Extruder Anzahl" msgid "Extrusion" msgstr "Extrusion" -#: src/libslic3r/PrintConfig.cpp:821 -msgid "Extrusion axis" -msgstr "Extrusionsachse" - -#: src/libslic3r/PrintConfig.cpp:827 -msgid "Extrusion multiplier" -msgstr "Extrusionsfaktor" - #: src/slic3r/GUI/ConfigWizard.cpp:1567 msgid "Extrusion Temperature:" msgstr "Extrusionstemperatur:" -#: src/slic3r/GUI/Tab.cpp:1650 -msgid "Extrusion width" -msgstr "Extrusionbreite" - #: src/slic3r/GUI/GUI_Factories.cpp:134 src/libslic3r/PrintConfig.cpp:728 #: src/libslic3r/PrintConfig.cpp:838 src/libslic3r/PrintConfig.cpp:1195 #: src/libslic3r/PrintConfig.cpp:1455 src/libslic3r/PrintConfig.cpp:1956 @@ -4494,6 +4389,22 @@ msgstr "Extrusionbreite" msgid "Extrusion Width" msgstr "Extrusionsbreite" +#: src/libslic3r/PrintConfig.cpp:821 +msgid "Extrusion axis" +msgstr "Extrusionsachse" + +#: src/libslic3r/PrintConfig.cpp:827 +msgid "Extrusion multiplier" +msgstr "Extrusionsfaktor" + +#: src/slic3r/GUI/Tab.cpp:1650 +msgid "Extrusion width" +msgstr "Extrusionbreite" + +#: src/slic3r/GUI/ConfigWizard.cpp:2097 +msgid "FFF Technology Printers" +msgstr "FFF Technologie Drucker" + #: src/slic3r/GUI/Plater.cpp:213 msgid "Facets" msgstr "Flächen" @@ -4502,10 +4413,6 @@ msgstr "Flächen" msgid "Faded layers" msgstr "Ausblendende Schichten" -#: src/libslic3r/miniz_extension.cpp:103 -msgid "failed finding central directory" -msgstr "Zentrales Verzeichnis nicht gefunden" - #: src/slic3r/GUI/Plater.cpp:2516 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." @@ -4530,6 +4437,10 @@ msgstr "Konfigurations-Snapshot konnte nicht aktiviert werden." msgid "Failed to drill some holes into the model" msgstr "Das Bohren einiger Löcher in das Modell ist fehlgeschlagen" +#: src/slic3r/GUI/GCodeViewer.cpp:3296 +msgid "Fan Speed (%)" +msgstr "Lüftergeschwindigkeit (%)" + #: src/slic3r/GUI/Tab.cpp:2007 msgid "Fan settings" msgstr "Lüfter Einstellungen" @@ -4538,10 +4449,6 @@ msgstr "Lüfter Einstellungen" msgid "Fan speed" msgstr "Lüftergeschwindigkeit" -#: src/slic3r/GUI/GCodeViewer.cpp:3296 -msgid "Fan Speed (%)" -msgstr "Lüftergeschwindigkeit (%)" - #: src/slic3r/GUI/PresetHints.cpp:55 #, boost-format msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%." @@ -4599,19 +4506,41 @@ msgstr "Merkmalstyp" msgid "Feature types" msgstr "Merkmalstypen" -#: src/slic3r/GUI/ConfigWizard.cpp:2097 -msgid "FFF Technology Printers" -msgstr "FFF Technologie Drucker" - #: src/slic3r/GUI/GCodeViewer.cpp:3696 src/slic3r/GUI/GCodeViewer.cpp:3722 #: src/slic3r/GUI/GUI.cpp:339 src/slic3r/GUI/Plater.cpp:818 #: src/slic3r/GUI/Tab.cpp:1962 src/slic3r/GUI/Tab.cpp:1963 msgid "Filament" msgstr "Filament" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 -msgid "filament" -msgstr "Filament" +#: src/slic3r/GUI/ConfigWizard.cpp:1489 +msgid "Filament Diameter:" +msgstr "Filamentdurchmesser:" + +#: src/libslic3r/GCode.cpp:725 +msgid "Filament End G-code" +msgstr "Filament Ende G-code" + +#: src/slic3r/GUI/Tab.cpp:1861 +msgid "Filament Overrides" +msgstr "Filament Übersteuerung" + +#: src/slic3r/GUI/ConfigWizard.cpp:2912 +msgid "Filament Profiles Selection" +msgstr "Filament Profile Auswahl" + +#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 +#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 +#: src/slic3r/GUI/Tab.hpp:448 +msgid "Filament Settings" +msgstr "Filamenteinstellungen" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 +msgid "Filament Settings Tab" +msgstr "Filamenteinstellungsreiter" + +#: src/libslic3r/GCode.cpp:718 +msgid "Filament Start G-code" +msgstr "Filament Start G-code" #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Filament and Nozzle Diameters" @@ -4622,14 +4551,6 @@ msgstr "Filament- und Düsendurchmesser" msgid "Filament at extruder %1%" msgstr "Filament auf Extruder %1%" -#: src/slic3r/GUI/ConfigWizard.cpp:1489 -msgid "Filament Diameter:" -msgstr "Filamentdurchmesser:" - -#: src/libslic3r/GCode.cpp:725 -msgid "Filament End G-code" -msgstr "Filament Ende G-code" - #: src/libslic3r/PrintConfig.cpp:936 msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " @@ -4646,36 +4567,14 @@ msgstr "Filament Ladezeit" msgid "Filament notes" msgstr "Filament Bemerkungen" -#: src/slic3r/GUI/Tab.cpp:1861 -msgid "Filament Overrides" -msgstr "Filament Übersteuerung" - #: src/libslic3r/PrintConfig.cpp:1920 msgid "Filament parking position" msgstr "Filament Parkposition" -#: src/slic3r/GUI/ConfigWizard.cpp:2912 -msgid "Filament Profiles Selection" -msgstr "Filament Profile Auswahl" - #: src/slic3r/GUI/Tab.cpp:2024 msgid "Filament properties" msgstr "Filament Eigenschaften" -#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 -#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 -msgid "Filament Settings" -msgstr "Filamenteinstellungen" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 -msgid "Filament Settings Tab" -msgstr "Filamenteinstellungsreiter" - -#: src/libslic3r/GCode.cpp:718 -msgid "Filament Start G-code" -msgstr "Filament Start G-code" - #: src/libslic3r/PrintConfig.cpp:1011 msgid "Filament type" msgstr "Filament Typ" @@ -4684,58 +4583,18 @@ msgstr "Filament Typ" msgid "Filament unload time" msgstr "Filament Entladezeit" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 -msgid "filaments" -msgstr "Filamente" - #: src/slic3r/GUI/ConfigWizard.cpp:752 src/slic3r/GUI/ConfigWizard.cpp:2043 #: src/slic3r/GUI/ConfigWizard.cpp:2912 msgid "Filaments" msgstr "Filamente" -#: src/libslic3r/miniz_extension.cpp:131 -msgid "file close failed" -msgstr "Dateischließen fehlgeschlagen" - -#: src/libslic3r/miniz_extension.cpp:125 -msgid "file create failed" -msgstr "Dateierzeugen fehlgeschlagen" - -#: src/slic3r/GUI/Plater.cpp:3529 -msgid "File for the replace wasn't selected" -msgstr "Datei zum Ersetzen wurde nicht ausgewählt" - #: src/slic3r/GUI/MainFrame.cpp:1626 msgid "File Not Found" msgstr "Datei nicht gefunden" -#: src/libslic3r/miniz_extension.cpp:145 -msgid "file not found" -msgstr "Datei nicht gefunden" - -#: src/libslic3r/miniz_extension.cpp:123 -msgid "file open failed" -msgstr "Öffnen der Datei fehlgeschlagen" - -#: src/libslic3r/miniz_extension.cpp:129 -msgid "file read failed" -msgstr "Dateilesen fehlgeschlagen" - -#: src/libslic3r/miniz_extension.cpp:133 -msgid "file seek failed" -msgstr "Dateizugriff fehlgeschlagen" - -#: src/libslic3r/miniz_extension.cpp:135 -msgid "file stat failed" -msgstr "Zugriff auf Dateieigenschaften fehlgeschlagen" - -#: src/libslic3r/miniz_extension.cpp:95 -msgid "file too large" -msgstr "Datei zu groß" - -#: src/libslic3r/miniz_extension.cpp:127 -msgid "file write failed" -msgstr "Schreiben der Datei fehlgeschlagen" +#: src/slic3r/GUI/Plater.cpp:3529 +msgid "File for the replace wasn't selected" +msgstr "Datei zum Ersetzen wurde nicht ausgewählt" #: src/slic3r/GUI/PrintHostDialogs.cpp:252 msgid "Filename" @@ -4817,14 +4676,6 @@ msgstr "Fertig" msgid "Firmware" msgstr "Firmware" -#: src/slic3r/GUI/FirmwareDialog.cpp:787 -msgid "Firmware flasher" -msgstr "Firmware Flasher" - -#: src/slic3r/GUI/FirmwareDialog.cpp:812 -msgid "Firmware image:" -msgstr "Firmware Image:" - #: src/slic3r/GUI/Tab.cpp:3007 msgid "Firmware Retraction" msgstr "Firmware Einzug" @@ -4833,6 +4684,14 @@ msgstr "Firmware Einzug" msgid "Firmware Type" msgstr "Firmware Typ" +#: src/slic3r/GUI/FirmwareDialog.cpp:787 +msgid "Firmware flasher" +msgstr "Firmware Flasher" + +#: src/slic3r/GUI/FirmwareDialog.cpp:812 +msgid "Firmware image:" +msgstr "Firmware Image:" + #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:116 msgid "First color" msgstr "Erste Farbe" @@ -4943,10 +4802,6 @@ msgstr "Fluss" msgid "Flow rate" msgstr "Flussrate" -#: src/slic3r/GUI/PresetHints.cpp:188 -msgid "flow rate is maximized" -msgstr "die Durchflussmenge ist am Maximum" - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:670 #, boost-format msgid "" @@ -5016,16 +4871,6 @@ msgstr "" msgid "For support enforcers only" msgstr "Nur für Stützverstärker" -#. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4266 -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:142 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -5080,10 +4925,6 @@ msgstr "Reservierte Schlüsselwörter gefunden in" msgid "From" msgstr "Von" -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "from" -msgstr "von" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1949 msgid "From Object List You can't delete the last solid part from object." msgstr "" @@ -5102,10 +4943,6 @@ msgstr "Frontalansicht" msgid "Full fan speed at layer" msgstr "Volle Lüfterdrehzahl auf Schicht" -#: src/slic3r/GUI/Tab.cpp:1412 -msgid "full profile name" -msgstr "vollständiger Profilname" - #: src/slic3r/GUI/MainFrame.cpp:1435 msgid "Fullscreen" msgstr "Vollbild" @@ -5120,6 +4957,12 @@ msgstr "" "Wussten Sie, dass Sie PrusaSlicer in den Vollbildmodus schalten können? " "Verwenden Sie die Tastenkombination F11." +#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 +#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 +#: src/libslic3r/PrintConfig.cpp:1286 +msgid "Fuzzy Skin" +msgstr "Fuzzy Skin" + #: resources/data/hints.ini: [hint:Fuzzy skin] msgid "" "Fuzzy skin\n" @@ -5133,12 +4976,6 @@ msgstr "" "können auch Modifizierer verwenden, um Fuzzy-Skin nur auf einen Teil Ihres " "Modells anzuwenden." -#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 -#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 -#: src/libslic3r/PrintConfig.cpp:1286 -msgid "Fuzzy Skin" -msgstr "Fuzzy Skin" - #: src/slic3r/GUI/Tab.cpp:1500 msgid "Fuzzy skin (experimental)" msgstr "Fuzzy skin (experimentell)" @@ -5155,10 +4992,6 @@ msgstr "Fuzzy Skin Stärke" msgid "Fuzzy skin type." msgstr "Fuzzy Skin Typ." -#: src/libslic3r/PrintConfig.cpp:1057 -msgid "g" -msgstr "g" - #: src/slic3r/GUI/MainFrame.cpp:1661 msgid "G-code" msgstr "G-Code" @@ -5201,13 +5034,13 @@ msgstr "G-Code-Miniaturbilder" msgid "G-code viewer" msgstr "G-Code-Viewer" -#: src/libslic3r/PrintConfig.cpp:1006 -msgid "g/cm³" -msgstr "g/cm³" +#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 +msgid "GNU Affero General Public License, version 3" +msgstr "GNU Affero General Public License, Version 3" -#: src/libslic3r/PrintConfig.cpp:3288 -msgid "g/ml" -msgstr "g/ml" +#: src/slic3r/GUI/Preferences.cpp:343 +msgid "GUI" +msgstr "GUI" #: src/slic3r/GUI/GUI_Factories.cpp:471 msgid "Gallery" @@ -5261,10 +5094,6 @@ msgstr "Stützen generieren" msgid "Generate supports for the models" msgstr "Erzeugt Stützen für die Modelle" -#: src/slic3r/GUI/Plater.cpp:4107 -msgid "generated warnings" -msgstr "erzeugte Warnungen" - #: src/libslic3r/Print.cpp:867 msgid "Generating G-code" msgstr "Generiere G-Code" @@ -5309,10 +5138,6 @@ msgstr "Erzeuge den Vertex-Puffer" msgid "Generic" msgstr "Generisch" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 -msgid "Gizmo cut" -msgstr "Gizmo Schnitt" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:155 msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM Aufmal-Naht" @@ -5321,14 +5146,6 @@ msgstr "Gizmo FDM Aufmal-Naht" msgid "Gizmo FDM paint-on supports" msgstr "Gizmo FDM Aufmal-Stützen" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 -msgid "Gizmo move" -msgstr "Gizmo Bewegung" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 -msgid "Gizmo move: Press to snap by 1mm" -msgstr "Gizmo Bewegung: Drücken um um 1 mm zu Rasten" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:156 msgid "Gizmo Multi Material painting" msgstr "Gizmo Multi Material Bemalung" @@ -5337,6 +5154,26 @@ msgstr "Gizmo Multi Material Bemalung" msgid "Gizmo Place face on bed" msgstr "Gizmo auf Fläche platzieren" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 +msgid "Gizmo SLA hollow" +msgstr "Gizmo SLA Aushöhlung" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 +msgid "Gizmo SLA support points" +msgstr "Gizmo SLA Stützpunkte" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 +msgid "Gizmo cut" +msgstr "Gizmo Schnitt" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 +msgid "Gizmo move" +msgstr "Gizmo Bewegung" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 +msgid "Gizmo move: Press to snap by 1mm" +msgstr "Gizmo Bewegung: Drücken um um 1 mm zu Rasten" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:149 msgid "Gizmo rotate" msgstr "Gizmo Rotieren" @@ -5369,14 +5206,6 @@ msgstr "Gizmo Skalieren: Drücken, um um 5% zu rasten" msgid "Gizmo scale: Scale selection to fit print volume" msgstr "Gizmo Skalieren: Auswahl skalieren, um in das Druckvolumen zu passen" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 -msgid "Gizmo SLA hollow" -msgstr "Gizmo SLA Aushöhlung" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 -msgid "Gizmo SLA support points" -msgstr "Gizmo SLA Stützpunkte" - #: src/slic3r/GUI/GLCanvas3D.cpp:2557 #: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:560 msgid "Gizmo-Move" @@ -5399,10 +5228,6 @@ msgstr "Gizmo Skalierung" msgid "Gizmos" msgstr "Gizmos" -#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 -msgid "GNU Affero General Public License, version 3" -msgstr "GNU Affero General Public License, Version 3" - #: src/slic3r/GUI/ConfigWizard.cpp:1486 msgid "" "Good precision is required, so use a caliper and do multiple measurements " @@ -5424,14 +5249,36 @@ msgstr "Gruppe" msgid "Group manipulation" msgstr "Gruppenbearbeitung" -#: src/slic3r/GUI/Preferences.cpp:343 -msgid "GUI" -msgstr "GUI" - #: src/libslic3r/PrintConfig.cpp:1154 msgid "Gyroid" msgstr "Gyroid" +#: src/libslic3r/PrintConfig.cpp:352 +msgid "HTTP digest" +msgstr "HTTP Digest" + +#: src/slic3r/Utils/Repetier.cpp:246 +#, boost-format +msgid "" +"HTTP status: %1%\n" +"Message body: \"%2%\"" +msgstr "" +"HTTP-Status: %1%\n" +"Nachrichtentext: \"%2%\"" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 +#: src/libslic3r/PrintConfig.cpp:307 +msgid "HTTPS CA File" +msgstr "HTTPS CA Datei" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" +"HTTPS-CA-Datei ist optional. Sie wird nur benötigt, wenn Sie HTTPS mit einem " +"selbstsignierten Zertifikat verwenden." + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:39 msgid "Head diameter" msgstr "Kopfdurchmesser" @@ -5605,14 +5452,14 @@ msgstr "Änderung der Aushöhlungsparameter" msgid "Honeycomb" msgstr "Bienenwabe" -#: src/slic3r/GUI/Tab.cpp:1469 -msgid "Horizontal shells" -msgstr "Horizontale Konturhüllen" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:254 msgid "Horizontal Slider" msgstr "Horizontaler Schieberegler" +#: src/slic3r/GUI/Tab.cpp:1469 +msgid "Horizontal shells" +msgstr "Horizontale Konturhüllen" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:219 #: src/slic3r/GUI/KBShortcutsDialog.cpp:223 msgid "Horizontal slider - Move active thumb Left" @@ -5677,40 +5524,14 @@ msgstr "Wie man Grenzen anwendet" msgid "How to apply the Machine Limits" msgstr "Wie man Maschinengrenzen anwendet" -#: src/libslic3r/PrintConfig.cpp:352 -msgid "HTTP digest" -msgstr "HTTP Digest" - -#: src/slic3r/Utils/Repetier.cpp:246 -#, boost-format -msgid "" -"HTTP status: %1%\n" -"Message body: \"%2%\"" -msgstr "" -"HTTP-Status: %1%\n" -"Nachrichtentext: \"%2%\"" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 -#: src/libslic3r/PrintConfig.cpp:307 -msgid "HTTPS CA File" -msgstr "HTTPS CA Datei" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." -msgstr "" -"HTTPS-CA-Datei ist optional. Sie wird nur benötigt, wenn Sie HTTPS mit einem " -"selbstsignierten Zertifikat verwenden." +#: src/slic3r/GUI/PrintHostDialogs.cpp:247 +msgid "ID" +msgstr "ID" #: src/slic3r/GUI/Preferences.cpp:694 msgid "Icon size in a respect to the default size" msgstr "Symbolgröße in Bezug auf die Standardgröße" -#: src/slic3r/GUI/PrintHostDialogs.cpp:247 -msgid "ID" -msgstr "ID" - #: src/libslic3r/PrintConfig.cpp:2511 msgid "" "If checked, supports will be generated automatically based on the overhang " @@ -5748,6 +5569,46 @@ msgstr "" "Speicherort heruntergeladen. Wenn eine neue Voreinstellungsversion verfügbar " "wird, wird sie beim Programmstart angeboten." +#: src/slic3r/GUI/Preferences.cpp:289 +msgid "If enabled, PrusaSlicer will be open at the position it was closed" +msgstr "" +"Wenn diese Option aktiviert ist, wird PrusaSlicer an der Position geöffnet, " +"an der er geschlossen wurde." + +#: src/slic3r/GUI/Preferences.cpp:384 +msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." +msgstr "" +"Wenn diese Option aktiviert ist, wird PrusaSlicer keine Hyperlinks in Ihrem " +"Browser öffnen." + +#: src/slic3r/GUI/Preferences.cpp:410 +msgid "" +"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " +"will be used." +msgstr "" +"Wenn diese Option aktiviert ist, werden die Registerkarten für die " +"Einstellungen als Menüpunkte platziert. Wenn deaktiviert, wird die alte " +"Benutzeroberfläche verwendet." + +#: src/slic3r/GUI/Preferences.cpp:177 +msgid "" +"If enabled, Slic3r 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 "" +"Wenn aktiviert, lädt Slic3r Updates der eingebauten Systemvoreinstellungen " +"im Hintergrund herunter. Diese Updates werden in einen separaten temporären " +"Speicherort heruntergeladen. Wenn eine neue Voreinstellungsversion verfügbar " +"wird, wird sie beim Programmstart angeboten." + +#: src/slic3r/GUI/Preferences.cpp:498 +msgid "" +"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." +msgstr "" +"Wenn aktiviert, verwendet die Benutzeroberfläche die Farben des dunklen " +"Modus. Wenn deaktiviert, wird die alte Benutzeroberfläche verwendet." + #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:174 msgid "If enabled, a repetition of the next random color will be allowed." msgstr "" @@ -5761,6 +5622,15 @@ msgstr "" "Wenn aktiviert, werden alle Druckextruder zu Beginn des Druckvorgangs an der " "Vorderkante des Druckbetts geprimt." +#: src/slic3r/GUI/Preferences.cpp:150 +msgid "" +"If enabled, allows the Reload from disk command to automatically find and " +"load the files when invoked." +msgstr "" +"Wenn diese Option aktiviert ist, ermöglicht der Befehl \"Von Festplatte neu " +"laden\" das automatische Suchen und Laden der Dateien, wenn er aufgerufen " +"wird." + #: src/slic3r/GUI/ConfigWizard.cpp:1250 msgid "" "If enabled, allows the Reload from disk command to automatically find and " @@ -5774,15 +5644,6 @@ msgstr "" "Wenn nicht aktiviert, fordert der Befehl Von der Festplatte neu laden jede " "Datei über ein Dialogfeld zum Öffnen von Dateien zur Auswahl auf." -#: src/slic3r/GUI/Preferences.cpp:150 -msgid "" -"If enabled, allows the Reload from disk command to automatically find and " -"load the files when invoked." -msgstr "" -"Wenn diese Option aktiviert ist, ermöglicht der Befehl \"Von Festplatte neu " -"laden\" das automatische Suchen und Laden der Dateien, wenn er aufgerufen " -"wird." - #: src/slic3r/GUI/Preferences.cpp:509 msgid "" "If enabled, application will use the standard Windows system menu,\n" @@ -5817,18 +5678,6 @@ msgstr "" "Schieberegler in der Vorschau vorgenommenen Änderungen auf den gesamten G-" "Code angewendet." -#: src/slic3r/GUI/Preferences.cpp:289 -msgid "If enabled, PrusaSlicer will be open at the position it was closed" -msgstr "" -"Wenn diese Option aktiviert ist, wird PrusaSlicer an der Position geöffnet, " -"an der er geschlossen wurde." - -#: src/slic3r/GUI/Preferences.cpp:384 -msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." -msgstr "" -"Wenn diese Option aktiviert ist, wird PrusaSlicer keine Hyperlinks in Ihrem " -"Browser öffnen." - #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:166 msgid "If enabled, random sequence of the selected extruders will be used." msgstr "" @@ -5844,6 +5693,14 @@ msgstr "" msgid "If enabled, reverses the direction of zoom with mouse wheel" msgstr "Wenn aktiviert, wird die Richtung des Zooms mit dem Mausrad umgekehrt" +#: src/slic3r/GUI/Preferences.cpp:260 +msgid "" +"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." +"gcode files." +msgstr "" +"Wenn aktiviert, legt PrusaSlicer G-Code-Viewer als Standardanwendung zum " +"Öffnen von .gcode-Dateien fest." + #: src/slic3r/GUI/Preferences.cpp:159 msgid "If enabled, sets PrusaSlicer as default application to open .3mf files." msgstr "" @@ -5856,35 +5713,6 @@ msgstr "" "Wenn aktiviert, legt PrusaSlicer als Standardanwendung zum Öffnen von .stl-" "Dateien fest." -#: src/slic3r/GUI/Preferences.cpp:260 -msgid "" -"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." -"gcode files." -msgstr "" -"Wenn aktiviert, legt PrusaSlicer G-Code-Viewer als Standardanwendung zum " -"Öffnen von .gcode-Dateien fest." - -#: src/slic3r/GUI/Preferences.cpp:410 -msgid "" -"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " -"will be used." -msgstr "" -"Wenn diese Option aktiviert ist, werden die Registerkarten für die " -"Einstellungen als Menüpunkte platziert. Wenn deaktiviert, wird die alte " -"Benutzeroberfläche verwendet." - -#: src/slic3r/GUI/Preferences.cpp:177 -msgid "" -"If enabled, Slic3r 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 "" -"Wenn aktiviert, lädt Slic3r Updates der eingebauten Systemvoreinstellungen " -"im Hintergrund herunter. Diese Updates werden in einen separaten temporären " -"Speicherort heruntergeladen. Wenn eine neue Voreinstellungsversion verfügbar " -"wird, wird sie beim Programmstart angeboten." - #: src/slic3r/GUI/Preferences.cpp:270 msgid "" "If enabled, the 3D scene will be rendered in Retina resolution. If you are " @@ -5942,13 +5770,6 @@ msgstr "" "Extruder nach unten, um den Reinigungsturm zu drucken. Der Benutzer ist " "dafür verantwortlich, dass es nicht zu einer Kollision mit dem Druck kommt." -#: src/slic3r/GUI/Preferences.cpp:498 -msgid "" -"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." -msgstr "" -"Wenn aktiviert, verwendet die Benutzeroberfläche die Farben des dunklen " -"Modus. Wenn deaktiviert, wird die alte Benutzeroberfläche verwendet." - #: src/slic3r/GUI/Preferences.cpp:328 msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" @@ -6059,15 +5880,6 @@ msgstr "" "die Geschwindigkeit des Druckvorgangs verringert, um die Zeitdauer auf " "diesen Wert zu verlängern." -#: src/libslic3r/PrintConfig.cpp:852 -msgid "" -"If this is enabled, fan will never be disabled and will be kept running at " -"least at its minimum speed. Useful for PLA, harmful for ABS." -msgstr "" -"Wenn diese Option aktiviert ist, wird der Lüfter niemals deaktiviert und " -"läuft mindestens mit seiner Minimaldrehzahl weiter. Sinnvoll für PLA, " -"ungeignet für ABS." - #: src/slic3r/GUI/Preferences.cpp:131 msgid "" "If this is enabled, Slic3r will auto-center objects around the print bed " @@ -6093,6 +5905,15 @@ msgstr "" "Ausgabeverzeichnis anstelle des Verzeichnisses, in dem sich die " "Eingabedateien befinden." +#: src/libslic3r/PrintConfig.cpp:852 +msgid "" +"If this is enabled, fan will never be disabled and will be kept running at " +"least at its minimum speed. Useful for PLA, harmful for ABS." +msgstr "" +"Wenn diese Option aktiviert ist, wird der Lüfter niemals deaktiviert und " +"läuft mindestens mit seiner Minimaldrehzahl weiter. Sinnvoll für PLA, " +"ungeignet für ABS." + #: src/slic3r/GUI/Preferences.cpp:214 msgid "" "If this is enabled, when starting PrusaSlicer and another instance of the " @@ -6232,26 +6053,6 @@ msgstr "Importiere Konfiguration von &Projekt" msgid "Import Config from ini/amf/3mf/gcode" msgstr "Konfiguration aus ini/amf/3mf/gcode importieren" -#: src/slic3r/GUI/Plater.cpp:5265 -msgid "Import config only" -msgstr "Nur Konfiguration importieren" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 -msgid "Import file" -msgstr "Datei importieren" - -#: src/slic3r/GUI/Plater.cpp:5264 -msgid "Import geometry only" -msgstr "Nur Geometrie importieren" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 -msgid "Import model and profile" -msgstr "Modell und Profil importieren" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 -msgid "Import model only" -msgstr "Nur Modell importieren" - #: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 msgid "Import Object" msgstr "Objekt importieren" @@ -6260,14 +6061,6 @@ msgstr "Objekt importieren" msgid "Import Objects" msgstr "Objekte importieren" -#: src/slic3r/Utils/FixModelByWin10.cpp:395 -msgid "Import of the repaired 3mf file failed" -msgstr "Import einer reparierten 3MF Datei fehlgeschlagen" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 -msgid "Import profile only" -msgstr "Nur Profil importieren" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Import SL1 / SL1S Archive" msgstr "Import SL1 / SL1S Archiv" @@ -6289,6 +6082,38 @@ msgid "Import STL/OBJ/AMF/3MF without config, keep plater" msgstr "" "Importiere STL/OBJ/AMF/3MF mit Konfigurationsdaten, Druckplatte beibehalten" +#: src/slic3r/GUI/Plater.cpp:5265 +msgid "Import config only" +msgstr "Nur Konfiguration importieren" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 +msgid "Import file" +msgstr "Datei importieren" + +#: src/slic3r/GUI/Plater.cpp:5264 +msgid "Import geometry only" +msgstr "Nur Geometrie importieren" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 +msgid "Import model and profile" +msgstr "Modell und Profil importieren" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 +msgid "Import model only" +msgstr "Nur Modell importieren" + +#: src/slic3r/Utils/FixModelByWin10.cpp:395 +msgid "Import of the repaired 3mf file failed" +msgstr "Import einer reparierten 3MF Datei fehlgeschlagen" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 +msgid "Import profile only" +msgstr "Nur Profil importieren" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 +msgid "Importing SLA archive" +msgstr "Importiere SLA-Archiv" + #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:164 msgid "Importing canceled." msgstr "Importieren abgebrochen." @@ -6297,18 +6122,6 @@ msgstr "Importieren abgebrochen." msgid "Importing done." msgstr "Importieren abgeschlossen." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 -msgid "Importing SLA archive" -msgstr "Importiere SLA-Archiv" - -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -msgid "in" -msgstr "in" - #: src/libslic3r/GCode.cpp:764 msgid "In the custom G-code were found reserved keywords:" msgstr "" @@ -6345,42 +6158,6 @@ msgstr "Kopien erhöhen" msgid "Increase/decrease edit area" msgstr "Bearbeitungsbereich vergrößern/verkleinern" -#. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4259 -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 "" -"zeigt an, dass einige Einstellungen geändert wurden und nicht mit den " -"System- (oder Standard-) Werten für die aktuelle Optionsgruppe " -"übereinstimmen.\n" -"Klicken Sie auf das Symbol GEÖFFNETES SCHLOSS, um alle Einstellungen für die " -"aktuelle Optionsgruppe auf die System- (oder Standard-) Werte zurückzusetzen." - -#. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4255 -msgid "" -"indicates that the settings are the same as the system (or default) values " -"for the current option group" -msgstr "" -"zeigt an, dass die Einstellungen mit den System- (oder Standard-) Werten für " -"die aktuelle Optionsgruppe übereinstimmen" - -#. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4271 -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" -"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:199 #: src/slic3r/GUI/GUI_Factories.cpp:55 src/slic3r/GUI/GUI_Factories.cpp:128 #: src/slic3r/GUI/Plater.cpp:460 src/slic3r/GUI/Tab.cpp:1506 @@ -6394,10 +6171,6 @@ msgstr "" msgid "Infill" msgstr "Infill" -#: src/slic3r/GUI/PresetHints.cpp:174 -msgid "infill" -msgstr "Infill" - #: src/libslic3r/PrintConfig.cpp:1467 msgid "Infill before perimeters" msgstr "Infill vor Kontur" @@ -6443,6 +6216,11 @@ msgstr "Anfangsschichthöhe" msgid "Inner brim only" msgstr "Nur innerer Rand" +#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 +#: src/slic3r/GUI/Field.cpp:1575 +msgid "Input value is out of range" +msgstr "Der Eingabewert ist nicht im gültigen Bereich" + #: src/slic3r/GUI/Field.cpp:266 #, c-format, boost-format msgid "" @@ -6452,11 +6230,6 @@ msgstr "" "Eingabewert liegt außerhalb des Bereichs\n" "Sind Sie sicher, dass %s ein korrekter Wert ist und Sie fortfahren möchten?" -#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 -#: src/slic3r/GUI/Field.cpp:1575 -msgid "Input value is out of range" -msgstr "Der Eingabewert ist nicht im gültigen Bereich" - #: resources/data/hints.ini: [hint:Insert Custom G-code] msgid "" "Insert Custom G-code\n" @@ -6531,10 +6304,6 @@ msgstr "Schnittstellenmuster Abstand" msgid "Interface shells" msgstr "Schnittstellenshells" -#: src/libslic3r/miniz_extension.cpp:143 -msgid "internal error" -msgstr "interner Fehler" - #: src/slic3r/GUI/GUI_App.cpp:713 #, boost-format msgid "Internal error: %1%" @@ -6545,6 +6314,10 @@ msgstr "Interner Fehler: %1%" msgid "Internal infill" msgstr "Internes Infill" +#: src/slic3r/GUI/ConfigManipulation.cpp:329 +msgid "Invalid Head penetration" +msgstr "Ungültige Eindringtiefe des Stützkopfes" + #: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 msgid "Invalid data" msgstr "Ungültige Daten" @@ -6554,18 +6327,6 @@ msgstr "Ungültige Daten" msgid "Invalid file format." msgstr "Ungültiges Dateiformat." -#: src/libslic3r/miniz_extension.cpp:139 -msgid "invalid filename" -msgstr "ungültiger Dateiname" - -#: src/slic3r/GUI/ConfigManipulation.cpp:329 -msgid "Invalid Head penetration" -msgstr "Ungültige Eindringtiefe des Stützkopfes" - -#: src/libslic3r/miniz_extension.cpp:107 -msgid "invalid header or archive is corrupted" -msgstr "ungültiger Dateiheader oder Archiv ist beschädigt" - #: src/slic3r/GUI/Field.cpp:397 #, boost-format msgid "" @@ -6581,14 +6342,19 @@ msgstr "" msgid "Invalid numeric input." msgstr "Ungültige numerische Eingabe." -#: src/libslic3r/miniz_extension.cpp:137 -msgid "invalid parameter" -msgstr "ungültiger Parameter" - #: src/slic3r/GUI/ConfigManipulation.cpp:342 msgid "Invalid pinhead diameter" msgstr "Ungültiger Nadelkopfdurchmesser" +#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 +#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 +#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 +#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 +#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 +#: src/libslic3r/PrintConfig.cpp:1577 +msgid "Ironing" +msgstr "Bügeln" + #: resources/data/hints.ini: [hint:Ironing] msgid "" "Ironing\n" @@ -6604,32 +6370,14 @@ msgstr "" "glätten. Weitere Informationen finden Sie in der Dokumentation. (Erfordert " "den Modus Erweitert oder Experte.)" -#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 -#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 -#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 -#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 -#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 -#: src/libslic3r/PrintConfig.cpp:1577 -msgid "Ironing" -msgstr "Bügeln" - #: src/libslic3r/PrintConfig.cpp:1542 src/libslic3r/PrintConfig.cpp:1544 msgid "Ironing Type" msgstr "Bügeltyp" -#: src/slic3r/GUI/GUI_App.cpp:266 -msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." -msgstr "basiert auf Slic3r von Alessandro Ranellucci und der RepRap Community." - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:588 msgid "Is it safe?" msgstr "Ist das sicher?" -#. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 -msgid "is licensed under the" -msgstr "ist unter der Lizenz der" - #: src/slic3r/GUI/MainFrame.cpp:1114 msgid "Iso" msgstr "Iso" @@ -6691,15 +6439,6 @@ msgstr "Jitter" msgid "Jump to height" msgstr "Zur Höhe wechseln" -#: src/slic3r/GUI/DoubleSlider.cpp:1391 -#, c-format, boost-format -msgid "" -"Jump to height %s\n" -"or Set ruler mode" -msgstr "" -"Auf Höhe %s springen\n" -"oder Linealmodus einstellen" - #: src/slic3r/GUI/DoubleSlider.cpp:1388 #, c-format, boost-format msgid "" @@ -6711,6 +6450,15 @@ msgstr "" "Lineal-Modus einstellen\n" "oder Extrudersequenz für den gesamten Druck einstellen" +#: src/slic3r/GUI/DoubleSlider.cpp:1391 +#, c-format, boost-format +msgid "" +"Jump to height %s\n" +"or Set ruler mode" +msgstr "" +"Auf Höhe %s springen\n" +"oder Linealmodus einstellen" + #: src/slic3r/GUI/DoubleSlider.cpp:1385 src/slic3r/GUI/DoubleSlider.cpp:2254 msgid "Jump to move" msgstr "Zum Bewegen wechseln" @@ -6753,9 +6501,25 @@ msgstr "Tastaturkürzel" msgid "Keyboard shortcuts" msgstr "Tastaturkürzel" -#: src/libslic3r/PrintConfig.cpp:3281 -msgid "kg" -msgstr "kg" +#: src/slic3r/GUI/Tab.cpp:4253 +msgid "LOCKED LOCK" +msgstr "GESCHLOSSENES SCHLOSS" + +#: src/slic3r/GUI/Tab.cpp:4281 +msgid "" +"LOCKED LOCK icon indicates that the settings are the same as the system (or " +"default) values for the current option group" +msgstr "" +"Das Symbol GESCHLOSSENES SCHLOSS zeigt an, dass die Einstellungen mit den " +"System- (oder Standard-) Werten für die aktuelle Optionsgruppe übereinstimmen" + +#: src/slic3r/GUI/Tab.cpp:4297 +msgid "" +"LOCKED LOCK icon indicates that the value is the same as the system (or " +"default) value." +msgstr "" +"Das Symbol GESCHLOSSENES SCHLOSS zeigt an, dass der Wert mit dem System- " +"(oder Standard-) Wert übereinstimmt." #: src/libslic3r/PrintConfig.cpp:1353 msgid "Label objects" @@ -6809,23 +6573,11 @@ msgstr "Schichthöhen Grenzen" msgid "Layer range Settings to modify" msgstr "Schichtbereicheinstellungen zum Ändern" -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 -#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 -#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 -#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 -#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 -msgid "layers" -msgstr "Schichten" - #: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4500 #: src/slic3r/GUI/Tab.cpp:4591 msgid "Layers" msgstr "Schichten" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 -msgid "Layers and perimeters" -msgstr "Schichten und Umfänge" - #: src/slic3r/GUI/GUI_Factories.cpp:54 src/slic3r/GUI/GUI_Factories.cpp:127 #: src/libslic3r/PrintConfig.cpp:264 src/libslic3r/PrintConfig.cpp:381 #: src/libslic3r/PrintConfig.cpp:424 src/libslic3r/PrintConfig.cpp:433 @@ -6839,15 +6591,9 @@ msgstr "Schichten und Umfänge" msgid "Layers and Perimeters" msgstr "Schichten und Konturen" -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Bottom" -msgstr "Boden" - -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Top" -msgstr "Decke" +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 +msgid "Layers and perimeters" +msgstr "Schichten und Umfänge" #: src/slic3r/GUI/Preferences.cpp:763 msgid "Layout Options" @@ -6862,6 +6608,14 @@ msgstr "\"%1%\" aktiviert lassen" msgid "Left" msgstr "Links" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +msgid "Left Preset Value" +msgstr "Linker voreingestellter Wert" + +#: src/slic3r/GUI/MainFrame.cpp:1127 +msgid "Left View" +msgstr "Anicht von Links" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 @@ -6878,14 +6632,6 @@ msgstr "Linke Maustaste" msgid "Left mouse button:" msgstr "Linke Maustaste:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 -msgid "Left Preset Value" -msgstr "Linker voreingestellter Wert" - -#: src/slic3r/GUI/MainFrame.cpp:1127 -msgid "Left View" -msgstr "Anicht von Links" - #: src/slic3r/GUI/GUI_Preview.cpp:1060 msgid "Legend/Estimated printing time" msgstr "Legende/geschätzte Druckzeit" @@ -6913,6 +6659,10 @@ msgstr "" "Lizenzvereinbarungen für alle folgenden Programme (Bibliotheken) sind Teil " "der Anwendungslizenzvereinbarung" +#: src/libslic3r/PrintConfig.cpp:2153 +msgid "Lift Z" +msgstr "Z Hebung" + #: src/libslic3r/PrintConfig.cpp:4358 msgid "" "Lift the object above the bed when it is partially below. Enabled by " @@ -6921,10 +6671,6 @@ msgstr "" "Hebt das Objekt über das Bett, wenn es sich teilweise darunter befindet. " "Standardmäßig aktiviert, zum Deaktivieren --no-ensure-on-bed verwenden." -#: src/libslic3r/PrintConfig.cpp:2153 -msgid "Lift Z" -msgstr "Z Hebung" - #: src/libslic3r/PrintConfig.cpp:1161 msgid "Lightning" msgstr "Lightning" @@ -6941,18 +6687,42 @@ msgstr "Linie" msgid "Load" msgstr "Laden" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 +msgid "Load Config from ini/amf/3mf/gcode and merge" +msgstr "Lade und füge Konfiguration von ini/amf/3mf/gcode hinzu" + +#: src/slic3r/GUI/Plater.cpp:5408 +msgid "Load File" +msgstr "Datei laden" + +#: src/slic3r/GUI/Plater.cpp:5413 +msgid "Load Files" +msgstr "Dateien laden" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Modifier" +msgstr "Modifizierer laden" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Part" +msgstr "Teil laden" + +#: src/slic3r/GUI/Plater.cpp:5100 +msgid "Load Project" +msgstr "Projekt laden" + #: src/slic3r/GUI/MainFrame.cpp:1201 msgid "Load a model" msgstr "Lade ein Modell" -#: src/slic3r/GUI/MainFrame.cpp:1205 -msgid "Load an model saved with imperial units" -msgstr "Laden eines mit imperialen Einheiten gespeicherten Modells" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Load an SL1 / Sl1S archive" msgstr "Laden eines SL1 / SL1S Archiv" +#: src/slic3r/GUI/MainFrame.cpp:1205 +msgid "Load an model saved with imperial units" +msgstr "Laden eines mit imperialen Einheiten gespeicherten Modells" + #: src/libslic3r/PrintConfig.cpp:4454 msgid "" "Load and store settings at the given directory. This is useful for " @@ -6982,10 +6752,6 @@ msgstr "" "verwenden, mit denen Sie ebenfalls 3D-Modelle aus den Voxel-Daten " "rekonstruieren können." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 -msgid "Load Config from ini/amf/3mf/gcode and merge" -msgstr "Lade und füge Konfiguration von ini/amf/3mf/gcode hinzu" - #: src/slic3r/GUI/MainFrame.cpp:1217 msgid "Load configuration from project file" msgstr "Lade Konfiguration aus Projektdatei" @@ -7002,30 +6768,10 @@ msgstr "" msgid "Load exported configuration file" msgstr "Laden einer exportierten Konfigurationsdatei" -#: src/slic3r/GUI/Plater.cpp:5408 -msgid "Load File" -msgstr "Datei laden" - -#: src/slic3r/GUI/Plater.cpp:5413 -msgid "Load Files" -msgstr "Dateien laden" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Modifier" -msgstr "Modifizierer laden" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Part" -msgstr "Teil laden" - #: src/slic3r/GUI/MainFrame.cpp:1221 msgid "Load presets from a bundle" msgstr "Lade Voreinstellungen aus einer Sammlung" -#: src/slic3r/GUI/Plater.cpp:5100 -msgid "Load Project" -msgstr "Projekt laden" - #: src/slic3r/GUI/BedShapeDialog.cpp:203 msgid "Load shape from STL..." msgstr "Lade Umriß von STL..." @@ -7034,10 +6780,6 @@ msgstr "Lade Umriß von STL..." msgid "Load..." msgstr "Laden..." -#: src/slic3r/GUI/WipeTowerDialog.cpp:309 -msgid "loaded" -msgstr "geladen wird" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1509 src/slic3r/GUI/Plater.cpp:2379 msgid "Loading" msgstr "Lade" @@ -7102,26 +6844,6 @@ msgstr "Lokale Koordinaten" msgid "Lock supports under new islands" msgstr "Fixiere Stützen unter neuen Inseln" -#: src/slic3r/GUI/Tab.cpp:4253 -msgid "LOCKED LOCK" -msgstr "GESCHLOSSENES SCHLOSS" - -#: src/slic3r/GUI/Tab.cpp:4281 -msgid "" -"LOCKED LOCK icon indicates that the settings are the same as the system (or " -"default) values for the current option group" -msgstr "" -"Das Symbol GESCHLOSSENES SCHLOSS zeigt an, dass die Einstellungen mit den " -"System- (oder Standard-) Werten für die aktuelle Optionsgruppe übereinstimmen" - -#: src/slic3r/GUI/Tab.cpp:4297 -msgid "" -"LOCKED LOCK icon indicates that the value is the same as the system (or " -"default) value." -msgstr "" -"Das Symbol GESCHLOSSENES SCHLOSS zeigt an, dass der Wert mit dem System- " -"(oder Standard-) Wert übereinstimmt." - #: src/libslic3r/PrintConfig.cpp:4457 msgid "Logging level" msgstr "Logging-Level" @@ -7155,13 +6877,6 @@ msgstr "" "Maschinengrenzen sind nicht gesetzt, daher ist die Schätzung der Druckzeit " "möglicherweise nicht genau." -#: src/slic3r/GUI/Tab.cpp:4224 -msgid "" -"Machine limits will be emitted to G-code and used to estimate print time." -msgstr "" -"Maschinengrenzen werden im G-Code ausgegeben und zur Schätzung der Druckzeit " -"verwendet." - #: src/slic3r/GUI/Tab.cpp:4227 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " @@ -7172,6 +6887,13 @@ msgstr "" "Schätzung der Druckzeit verwendet, die daher möglicherweise nicht genau ist, " "da der Drucker möglicherweise eine andere Reihe von Maschinenlimits anwendet." +#: src/slic3r/GUI/Tab.cpp:4224 +msgid "" +"Machine limits will be emitted to G-code and used to estimate print time." +msgstr "" +"Maschinengrenzen werden im G-Code ausgegeben und zur Schätzung der Druckzeit " +"verwendet." + #: src/libslic3r/GCode.cpp:576 msgid "" "Make sure the object is printable. This is usually caused by negligibly " @@ -7204,10 +6926,6 @@ msgstr "Mate&rial Einstellungen" msgid "Material" msgstr "Material" -#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 -msgid "Material printing profile" -msgstr "Material Druckprofil" - #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 #: src/slic3r/GUI/Tab.hpp:522 @@ -7218,6 +6936,10 @@ msgstr "Material Einstellungen" msgid "Material Settings Tab" msgstr "Materialeinstellungsreiter" +#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 +msgid "Material printing profile" +msgstr "Material Druckprofil" + #: src/libslic3r/PrintConfig.cpp:1749 src/libslic3r/PrintConfig.cpp:1758 msgid "Max" msgstr "Max" @@ -7246,10 +6968,6 @@ msgstr "Max. Druckhöhe" msgid "Max print speed" msgstr "Maximale Druckgeschwindigkeit" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 -msgid "max PrusaSlicer version" -msgstr "max PrusaSlicer Version" - #: src/libslic3r/PrintConfig.cpp:1800 msgid "Max volumetric slope negative" msgstr "Max. volumetrische Steigung negativ" @@ -7274,6 +6992,18 @@ msgstr "Maximalabstand zwischen Stützen auf spärlichen Infill-Abschnitten." msgid "Maximum acceleration E" msgstr "Maximale Beschleunigung E" +#: src/libslic3r/PrintConfig.cpp:1661 +msgid "Maximum acceleration X" +msgstr "Maximale Beschleunigung X" + +#: src/libslic3r/PrintConfig.cpp:1662 +msgid "Maximum acceleration Y" +msgstr "Maximale Beschleunigung Y" + +#: src/libslic3r/PrintConfig.cpp:1663 +msgid "Maximum acceleration Z" +msgstr "Maximale Beschleunigung Z" + #: src/libslic3r/PrintConfig.cpp:1740 msgid "Maximum acceleration for travel moves" msgstr "Maximale Beschleunigung für Fahrbewegungen" @@ -7322,18 +7052,6 @@ msgstr "Maximale Beschleunigung beim Einzug" msgid "Maximum acceleration when retracting (M204 R)" msgstr "Maximale Beschleunigung beim Einzug (M204 R)" -#: src/libslic3r/PrintConfig.cpp:1661 -msgid "Maximum acceleration X" -msgstr "Maximale Beschleunigung X" - -#: src/libslic3r/PrintConfig.cpp:1662 -msgid "Maximum acceleration Y" -msgstr "Maximale Beschleunigung Y" - -#: src/libslic3r/PrintConfig.cpp:1663 -msgid "Maximum acceleration Z" -msgstr "Maximale Beschleunigung Z" - #: src/slic3r/GUI/Tab.cpp:2655 msgid "Maximum accelerations" msgstr "Maximale Beschleunigungen" @@ -7364,6 +7082,18 @@ msgstr "Maximale Belichtungszeit" msgid "Maximum feedrate E" msgstr "Maximaler Vorschub E" +#: src/libslic3r/PrintConfig.cpp:1644 +msgid "Maximum feedrate X" +msgstr "Maximaler Vorschub X" + +#: src/libslic3r/PrintConfig.cpp:1645 +msgid "Maximum feedrate Y" +msgstr "Maximaler Vorschub Y" + +#: src/libslic3r/PrintConfig.cpp:1646 +msgid "Maximum feedrate Z" +msgstr "Maximaler Vorschub Z" + #: src/libslic3r/PrintConfig.cpp:1653 msgid "Maximum feedrate of the E axis" msgstr "Maximaler Vorschub auf der E-Achse" @@ -7380,18 +7110,6 @@ msgstr "Maximaler Vorschub auf der Y-Achse" msgid "Maximum feedrate of the Z axis" msgstr "Maximaler Vorschub auf der Z-Achse" -#: src/libslic3r/PrintConfig.cpp:1644 -msgid "Maximum feedrate X" -msgstr "Maximaler Vorschub X" - -#: src/libslic3r/PrintConfig.cpp:1645 -msgid "Maximum feedrate Y" -msgstr "Maximaler Vorschub Y" - -#: src/libslic3r/PrintConfig.cpp:1646 -msgid "Maximum feedrate Z" -msgstr "Maximaler Vorschub Z" - #: src/slic3r/GUI/Tab.cpp:2650 msgid "Maximum feedrates" msgstr "Maximaler Vorschub" @@ -7404,6 +7122,18 @@ msgstr "Maximale Anfang-Belichtungszeit" msgid "Maximum jerk E" msgstr "Maximaler Ruck E" +#: src/libslic3r/PrintConfig.cpp:1678 +msgid "Maximum jerk X" +msgstr "Maximaler Ruck X" + +#: src/libslic3r/PrintConfig.cpp:1679 +msgid "Maximum jerk Y" +msgstr "Maximaler Ruck Y" + +#: src/libslic3r/PrintConfig.cpp:1680 +msgid "Maximum jerk Z" +msgstr "Maximaler Ruck Z" + #: src/libslic3r/PrintConfig.cpp:1687 msgid "Maximum jerk of the E axis" msgstr "Maximaler Ruck auf der E-Achse" @@ -7420,18 +7150,6 @@ msgstr "Maximaler Ruck auf der Y-Achse" msgid "Maximum jerk of the Z axis" msgstr "Maximaler Ruck auf der Z-Achse" -#: src/libslic3r/PrintConfig.cpp:1678 -msgid "Maximum jerk X" -msgstr "Maximaler Ruck X" - -#: src/libslic3r/PrintConfig.cpp:1679 -msgid "Maximum jerk Y" -msgstr "Maximaler Ruck Y" - -#: src/libslic3r/PrintConfig.cpp:1680 -msgid "Maximum jerk Z" -msgstr "Maximaler Ruck Z" - #: src/libslic3r/PrintConfig.cpp:1423 msgid "Maximum length of the infill anchor" msgstr "Maximale Länge des Infill-Ankers" @@ -7527,10 +7245,6 @@ msgstr "Min" msgid "Min print speed" msgstr "Minimale Druckgeschwindigkeit" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 -msgid "min PrusaSlicer version" -msgstr "min PrusaSlicer Version" - #: src/libslic3r/PrintConfig.cpp:3597 msgid "Minimal distance of the support points" msgstr "Minimaler Abstand der Stützpunkte" @@ -7593,6 +7307,10 @@ msgstr "Minimaler Vorschub" msgid "Minimum initial exposure time" msgstr "Minimale Anfang-Belichtungszeit" +#: src/slic3r/GUI/Tab.cpp:1475 +msgid "Minimum shell thickness" +msgstr "Minimale Schalenstärke" + #: resources/data/hints.ini: [hint:Minimum shell thickness] msgid "" "Minimum shell thickness\n" @@ -7606,10 +7324,6 @@ msgstr "" "Funktion ist besonders nützlich, wenn Sie die Funktion der variablen " "Schichthöhe verwenden." -#: src/slic3r/GUI/Tab.cpp:1475 -msgid "Minimum shell thickness" -msgstr "Minimale Schalenstärke" - #: src/libslic3r/PrintConfig.cpp:2374 src/libslic3r/PrintConfig.cpp:2375 msgid "Minimum thickness of a top / bottom shell" msgstr "Mindeststärke einer Ober-/Bodenschale" @@ -7646,6 +7360,10 @@ msgstr "" "Mindestbreite der Merkmale, die bei der Kompensation des Elefantenfußes " "einzuhalten sind." +#: src/slic3r/GUI/GUI_Factories.cpp:885 +msgid "Mirror" +msgstr "Spiegeln" + #: resources/data/hints.ini: [hint:Mirror] msgid "" "Mirror\n" @@ -7657,18 +7375,14 @@ msgstr "" "umgekehrte Version davon zu erstellen? Klicken Sie mit der rechten Maustaste " "auf das Modell, wählen Sie Spiegeln und wählen Sie die Spiegelachse." -#: src/slic3r/GUI/GUI_Factories.cpp:885 -msgid "Mirror" -msgstr "Spiegeln" +#: src/slic3r/GUI/GLCanvas3D.cpp:1684 +msgid "Mirror Object" +msgstr "Objekt spiegeln" #: src/libslic3r/PrintConfig.cpp:3131 msgid "Mirror horizontally" msgstr "Horizontal spiegeln" -#: src/slic3r/GUI/GLCanvas3D.cpp:1684 -msgid "Mirror Object" -msgstr "Objekt spiegeln" - #: src/slic3r/GUI/GUI_Factories.cpp:885 msgid "Mirror the selected object" msgstr "Ausgewähltes Objekt spiegeln" @@ -7699,133 +7413,10 @@ msgstr "Nicht übereinstimmender Typ des Druckhosts: %s" msgid "Mixed" msgstr "Gemischt" -#: src/libslic3r/PrintConfig.cpp:3274 -msgid "ml" -msgstr "ml" - -#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 -#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 -#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 -#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 -#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 -#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 -#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 -#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 -#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 -#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 -#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 -#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 -#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 -#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 -#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 -#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 -#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 -#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 -#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 -#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 -#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 -#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 -#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 -#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 -#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 -#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 -#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 -#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 -#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 -#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 -#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 -#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 -#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 -#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 -#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 -#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 -#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 -#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 -#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 -#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 -#: src/libslic3r/PrintConfig.cpp:3767 -msgid "mm" -msgstr "mm" - -#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 -#: src/libslic3r/PrintConfig.cpp:2148 -msgid "mm (zero to disable)" -msgstr "mm (Null zum Deaktivieren)" - -#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 -#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 -#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 -#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 -#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 -#: src/libslic3r/PrintConfig.cpp:2845 -msgid "mm or %" -msgstr "mm oder %" - -#: src/libslic3r/PrintConfig.cpp:385 -msgid "mm or % (zero to disable)" -msgstr "mm oder % (Null zum Deaktivieren)" - -#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 -#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 -#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 -#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 -#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 -#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 -#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 -#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 -#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 -#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 -#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 -msgid "mm/s" -msgstr "mm/s" - -#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 -#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 -#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 -#: src/libslic3r/PrintConfig.cpp:2859 -msgid "mm/s or %" -msgstr "mm/s oder %" - -#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 -#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 -#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 -#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 -#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 -msgid "mm/s²" -msgstr "mm/s²" - -#: src/libslic3r/PrintConfig.cpp:2316 -msgid "mm²" -msgstr "mm²" - -#: src/libslic3r/PrintConfig.cpp:957 -msgid "mm³" -msgstr "mm³" - -#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 -#: src/libslic3r/PrintConfig.cpp:1782 -msgid "mm³/s" -msgstr "mm³/s" - -#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 -msgid "mm³/s²" -msgstr "mm³/s²" - #: src/slic3r/GUI/GUI_App.cpp:2245 msgid "Mode" msgstr "&Modus" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "model" -msgstr "Modell" - #: src/slic3r/GUI/BedShapeDialog.cpp:344 msgid "Model" msgstr "Modell" @@ -7838,19 +7429,10 @@ msgstr "Modellreparatur abgebrochen" msgid "Model repair finished" msgstr "Modellreparatur beendet" -#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 -msgctxt "Mode" -msgid "Advanced" -msgstr "Erweitert" - #: src/slic3r/GUI/Tab.cpp:1319 msgid "Modifications to the current profile will be saved." msgstr "Änderungen am aktuellen Profil werden gespeichert." -#: src/slic3r/GUI/GUI_App.cpp:2159 -msgid "modified" -msgstr "geändert" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Modifier" msgstr "Veränderer" @@ -7859,14 +7441,6 @@ msgstr "Veränderer" msgid "Modifiers" msgstr "Veränderer" -#: src/libslic3r/PrintConfig.cpp:3295 -msgid "money/bottle" -msgstr "Kosten/Flasche" - -#: src/libslic3r/PrintConfig.cpp:1047 -msgid "money/kg" -msgstr "Kosten/kg" - #: src/libslic3r/PrintConfig.cpp:705 msgid "Monotonic" msgstr "Monotonisch" @@ -7898,6 +7472,10 @@ msgstr "Mausrad:" msgid "Move" msgstr "Bewegen" +#: src/slic3r/GUI/GLCanvas3D.cpp:3245 +msgid "Move Object" +msgstr "Objekt bewegen" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:234 msgid "Move active thumb Down" msgstr "Aktiven Schieber nach unten bewegen" @@ -7922,10 +7500,6 @@ msgstr "Beschnittebene bewegen" msgid "Move drainage hole" msgstr "Drainageloch bewegen" -#: src/slic3r/GUI/GLCanvas3D.cpp:3245 -msgid "Move Object" -msgstr "Objekt bewegen" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 msgid "Move point" msgstr "Punkt bewegen" @@ -8015,6 +7589,14 @@ msgstr "Mehrfache Kopien mit diesem Faktor." msgid "N/A" msgstr "N.V." +#: src/slic3r/GUI/RammingChart.cpp:29 +msgid "NO RAMMING AT ALL" +msgstr "ÜBERHAUPT KEIN RAMMEN" + +#: src/slic3r/GUI/GUI_Preview.cpp:728 +msgid "NOTE:" +msgstr "HINWEIS:" + #: src/slic3r/GUI/GUI_ObjectList.cpp:297 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:139 msgid "Name" @@ -8049,6 +7631,10 @@ msgstr "" msgid "Nearest" msgstr "Nächste" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 +msgid "Negative Volume" +msgstr "Negatives Volumen" + #: resources/data/hints.ini: [hint:Negative volume] msgid "" "Negative volume\n" @@ -8063,14 +7649,18 @@ msgstr "" "leicht veränderbare Löcher direkt in PrusaSlicer erstellen. Lesen Sie mehr " "in der Dokumentation. (Erfordert den Fortgeschrittenen- oder Expertenmodus.)" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 -msgid "Negative Volume" -msgstr "Negatives Volumen" - #: src/slic3r/GUI/BonjourDialog.cpp:55 msgid "Network lookup" msgstr "Network Lookup" +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +msgid "New Project" +msgstr "Neues Projekt" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +msgid "New Value" +msgstr "Neuer Wert" + #: src/slic3r/GUI/Preferences.cpp:744 msgid "New layout, access via settings button in the top menu" msgstr "" @@ -8085,10 +7675,6 @@ msgstr "Die neue Vorabversion %1% ist verfügbar." msgid "New printer preset selected" msgstr "Neue Druckervoreinstellung ausgewählt" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 -msgid "New Project" -msgstr "Neues Projekt" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:77 msgid "New project, clear plater" msgstr "Neues Projekt, Druckplatte leeren" @@ -8098,10 +7684,6 @@ msgstr "Neues Projekt, Druckplatte leeren" msgid "New release version %1% is available." msgstr "Die neue Release-Version %1% ist verfügbar." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 -msgid "New Value" -msgstr "Neuer Wert" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 #, c-format, boost-format msgid "New version of %s is available" @@ -8155,10 +7737,6 @@ msgstr "" msgid "No previously sliced file." msgstr "Keine vorher gesclicete Datei." -#: src/slic3r/GUI/RammingChart.cpp:29 -msgid "NO RAMMING AT ALL" -msgstr "ÜBERHAUPT KEIN RAMMEN" - #: src/libslic3r/PrintConfig.cpp:2471 msgid "No sparse layers (EXPERIMENTAL)" msgstr "Keine spärlichen Schichten (EXPERIMENTELL)" @@ -8183,18 +7761,10 @@ msgstr "Kein" msgid "Normal" msgstr "Normal" -#: src/slic3r/GUI/Plater.cpp:1428 -msgid "normal mode" -msgstr "Normaler Modus" - #: src/slic3r/GUI/GCodeViewer.cpp:3754 msgid "Normal mode" msgstr "Normaler Modus" -#: src/libslic3r/miniz_extension.cpp:105 -msgid "not a ZIP archive" -msgstr "kein ZIP Archiv" - #: src/slic3r/GUI/BedShapeDialog.cpp:317 src/slic3r/GUI/BedShapeDialog.cpp:388 msgid "Not found:" msgstr "Nicht gefunden:" @@ -8226,10 +7796,6 @@ msgstr[1] "" "Beachten Sie, dass diese Drucker nach dem Löschen der ausgewählten " "Voreinstellung gelöscht werden." -#: src/slic3r/GUI/GUI_Preview.cpp:728 -msgid "NOTE:" -msgstr "HINWEIS:" - #: src/slic3r/GUI/Tab.cpp:2249 msgid "" "Note: All parameters from this group are moved to the Physical Printer " @@ -8273,16 +7839,16 @@ msgstr "Hinweis: Es ist mindestens die OctoPrint-Version 1.1.0 erforderlich." msgid "Note: Repetier version at least 0.90.0 is required." msgstr "Hinweis: Eine Repetierversion von mindestens 0.90.0 ist erforderlich." +#: src/slic3r/GUI/SavePresetDialog.cpp:137 +msgid "Note: This preset will be replaced after saving" +msgstr "Hinweis: Diese Voreinstellung wird nach dem Speichern ersetzt" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1197 msgid "Note: some shortcuts work in (non)editing mode only." msgstr "" "Hinweis: Einige Tastenkombinationen funktionieren nur im " "(Nicht-)Bearbeitungsmodus." -#: src/slic3r/GUI/SavePresetDialog.cpp:137 -msgid "Note: This preset will be replaced after saving" -msgstr "Hinweis: Diese Voreinstellung wird nach dem Speichern ersetzt" - #: src/slic3r/GUI/Tab.cpp:1716 src/slic3r/GUI/Tab.cpp:1717 #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 @@ -8301,14 +7867,14 @@ msgstr "Hinweis" msgid "Notify about new releases" msgstr "Über neue Releases benachrichtigen" -#: src/slic3r/GUI/ConfigWizard.cpp:262 -msgid "nozzle" -msgstr "Düse" - #: src/slic3r/GUI/Tab.cpp:1984 msgid "Nozzle" msgstr "Düse" +#: src/slic3r/GUI/ConfigWizard.cpp:1475 +msgid "Nozzle Diameter:" +msgstr "Düsendurchmesser:" + #: src/slic3r/GUI/ConfigWizard.cpp:1547 msgid "Nozzle and Bed Temperatures" msgstr "Düsen- und Bett-Temperaturen" @@ -8318,10 +7884,6 @@ msgstr "Düsen- und Bett-Temperaturen" msgid "Nozzle diameter" msgstr "Düsendurchmesser" -#: src/slic3r/GUI/ConfigWizard.cpp:1475 -msgid "Nozzle Diameter:" -msgstr "Düsendurchmesser:" - #: src/libslic3r/PrintConfig.cpp:2793 msgid "Nozzle temperature" msgstr "Düsentemperatur" @@ -8417,11 +7979,9 @@ msgstr "" msgid "Number of tool changes" msgstr "Anzahl der Werkzeugwechsel" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "object" -msgid_plural "objects" -msgstr[0] "Objekt" -msgstr[1] "Objekte" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 +msgid "Object Settings to modify" +msgstr "Abweichende Objekteigenschaften" #: src/slic3r/GUI/Tab.cpp:4709 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" @@ -8448,10 +8008,6 @@ msgstr "Objekt oder Kopie" msgid "Object reordered" msgstr "Objekt neu angeordnet" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 -msgid "Object Settings to modify" -msgstr "Abweichende Objekteigenschaften" - #: src/slic3r/GUI/Plater.cpp:2536 #, c-format, boost-format msgid "" @@ -8481,10 +8037,6 @@ msgstr "" "Material zu sparen, das sonst im Reinigungsturm landen und die Druckzeit " "verkürzen würde. Die Farben der Objekte werden dabei gemischt." -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "objects" -msgstr "Objekte" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:201 msgid "Objects List" msgstr "Objektliste" @@ -8497,15 +8049,6 @@ msgstr "Achterstern-Spirale" msgid "OctoPrint version" msgstr "OctoPrint Version" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 -msgid "of a current Object" -msgstr "des aktuellen Objekts" - -#: src/slic3r/GUI/PrintHostDialogs.cpp:251 -msgctxt "OfFile" -msgid "Size" -msgstr "OfFile||Größe" - #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:32 msgid "Offset" msgstr "Offset" @@ -8518,14 +8061,14 @@ msgstr "" "Versatz des Rands zum gedruckten Objekt. Der Versatz wird nach dem " "Elefantenfußausgleich angewendet." -#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 -msgid "Old regular layout with the tab bar" -msgstr "Altes reguläres Layout mit der Registerleiste" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 msgid "Old Value" msgstr "Alter Wert" +#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 +msgid "Old regular layout with the tab bar" +msgstr "Altes reguläres Layout mit der Registerleiste" + #: src/slic3r/GUI/Preferences.cpp:210 msgid "" "On OSX there is always only one instance of app running by default. However " @@ -8611,14 +8154,6 @@ msgstr "Z anheben nur unter" msgid "Only retract when crossing perimeters" msgstr "Nur bei Umfangsüberquerungen einziehen" -#: src/slic3r/GUI/ConfigWizard.cpp:778 -msgid "" -"Only the following installed printers are compatible with the selected " -"filaments" -msgstr "" -"Nur die folgenden installierten Drucker sind mit den ausgewählten Filamenten " -"kompatibel" - #: src/slic3r/GUI/ConfigWizard.cpp:779 msgid "" "Only the following installed printers are compatible with the selected SLA " @@ -8627,6 +8162,14 @@ msgstr "" "Nur die folgenden installierten Drucker sind mit den ausgewählten SLA-" "Materialien kompatibel" +#: src/slic3r/GUI/ConfigWizard.cpp:778 +msgid "" +"Only the following installed printers are compatible with the selected " +"filaments" +msgstr "" +"Nur die folgenden installierten Drucker sind mit den ausgewählten Filamenten " +"kompatibel" + #: src/slic3r/GUI/Tab.cpp:1630 msgid "Ooze prevention" msgstr "Vermeidung von Nachsickern (Ooze)" @@ -8641,6 +8184,38 @@ msgstr "" msgid "Open &PrusaSlicer" msgstr "Öffne &PrusaSlicer" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 +msgid "Open CA certificate file" +msgstr "Open CA Zertifikat Datei" + +#: src/slic3r/GUI/HintNotification.cpp:1000 +msgid "Open Documentation in web browser." +msgstr "Dokumentation im Webbrowser öffnen." + +#: src/slic3r/GUI/NotificationManager.cpp:664 +msgid "Open Folder." +msgstr "Öffne Ordner." + +#: src/slic3r/Utils/Process.cpp:157 +msgid "Open G-code file:" +msgstr "Öffne G-Code-Datei:" + +#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 +msgid "Open G-code viewer" +msgstr "G-Code-Viewer öffnen" + +#: src/slic3r/GUI/MainFrame.cpp:1413 +msgid "Open New Instance" +msgstr "Neue Instanz öffnen" + +#: src/slic3r/GUI/HintNotification.cpp:908 +msgid "Open Preferences." +msgstr "Einstellungen öffnen." + +#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 +msgid "Open PrusaSlicer" +msgstr "PrusaSlicer öffnen" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:205 src/slic3r/GUI/MainFrame.cpp:1518 msgid "Open a G-code file" msgstr "Öffne eine G-Code-Datei" @@ -8658,35 +8233,15 @@ msgstr "Öffne eine Projektdatei" msgid "Open as project" msgstr "Als Projekt öffnen" -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 -msgid "Open CA certificate file" -msgstr "Open CA Zertifikat Datei" - #: src/slic3r/GUI/UpdateDialogs.cpp:59 src/slic3r/GUI/UpdateDialogs.cpp:133 #: src/slic3r/GUI/UpdateDialogs.cpp:191 msgid "Open changelog page" msgstr "Änderungsseite öffnen" -#: src/slic3r/GUI/HintNotification.cpp:1000 -msgid "Open Documentation in web browser." -msgstr "Dokumentation im Webbrowser öffnen." - #: src/slic3r/GUI/UpdateDialogs.cpp:65 msgid "Open download page" msgstr "Downloadseite öffnen" -#: src/slic3r/GUI/NotificationManager.cpp:664 -msgid "Open Folder." -msgstr "Öffne Ordner." - -#: src/slic3r/Utils/Process.cpp:157 -msgid "Open G-code file:" -msgstr "Öffne G-Code-Datei:" - -#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 -msgid "Open G-code viewer" -msgstr "G-Code-Viewer öffnen" - #: src/slic3r/GUI/GUI_App.cpp:3067 src/slic3r/GUI/GUI_App.cpp:3090 msgid "Open hyperlink in default browser?" msgstr "Hyperlink im Standardbrowser öffnen?" @@ -8699,35 +8254,23 @@ msgstr "Neuen G-Code-Viewer öffnen" msgid "Open new instance" msgstr "Neue Instanz öffnen" -#: src/slic3r/GUI/MainFrame.cpp:1413 -msgid "Open New Instance" -msgstr "Neue Instanz öffnen" - -#: src/slic3r/GUI/HintNotification.cpp:908 -msgid "Open Preferences." -msgstr "Einstellungen öffnen." - #: src/slic3r/GUI/KBShortcutsDialog.cpp:78 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater" msgstr "Öffne Projekt STL/OBJ/AMF/3MF mit Konfiguration, Druckplatte leeren" -#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 -msgid "Open PrusaSlicer" -msgstr "PrusaSlicer öffnen" - #: src/slic3r/GUI/MainFrame.cpp:1079 #, c-format, boost-format msgid "Open the %s website in your browser" msgstr "%s-Website in Ihrem Browser öffnen" -#: src/slic3r/GUI/MainFrame.cpp:1397 -msgid "Open the dialog to modify shape gallery" -msgstr "Öffnen Sie den Dialog zum Ändern der Formengalerie" - #: src/slic3r/GUI/MainFrame.cpp:1070 msgid "Open the Prusa3D drivers download page in your browser" msgstr "Download-Seite für die Prusa3D-Treiber in Ihrem Browser öffnen" +#: src/slic3r/GUI/MainFrame.cpp:1397 +msgid "Open the dialog to modify shape gallery" +msgstr "Öffnen Sie den Dialog zum Ändern der Formengalerie" + #: src/slic3r/GUI/MainFrame.cpp:1072 msgid "Open the software releases page in your browser" msgstr "Seite mit Programmversionen in Ihrem Browser öffnen" @@ -8754,6 +8297,10 @@ msgstr "" msgid "Operation already cancelling. Please wait few seconds." msgstr "Operation wird bereits abgebrochen. Bitte warten Sie einige Sekunden." +#: src/slic3r/GUI/Plater.cpp:1678 +msgid "Optimize Rotation" +msgstr "Rotation optimieren" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:23 msgid "Optimize object rotation for best surface quality." msgstr "Objektrotation für beste Oberflächenqualität optimieren." @@ -8774,10 +8321,6 @@ msgstr "" msgid "Optimize orientation" msgstr "Optimiere Ausrichtung" -#: src/slic3r/GUI/Plater.cpp:1678 -msgid "Optimize Rotation" -msgstr "Rotation optimieren" - #: src/libslic3r/PrintConfig.cpp:373 msgid "" "Optimize travel moves in order to minimize the crossing of perimeters. This " @@ -8802,10 +8345,6 @@ msgstr "Optionen für Stützmaterial und Raft" msgid "Options:" msgstr "Optionen:" -#: src/slic3r/GUI/DoubleSlider.cpp:1431 -msgid "or press \"+\" key" -msgstr "oder drücken Sie die Taste \"+\"" - #: src/slic3r/GUI/Preferences.cpp:399 msgid "Order object volumes by types" msgstr "Objektvolumen nach Typen ordnen" @@ -8826,14 +8365,14 @@ msgstr "Nullpunkt" msgid "Other" msgstr "Sonstige" -#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 -msgid "Other layers" -msgstr "Andere Schichten" - #: src/slic3r/GUI/ConfigWizard.cpp:1322 msgid "Other Vendors" msgstr "Andere Hersteller" +#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 +msgid "Other layers" +msgstr "Andere Schichten" + #: src/libslic3r/PrintConfig.cpp:515 msgid "Outer and inner brim" msgstr "Äußere und innerer Rand" @@ -8842,22 +8381,22 @@ msgstr "Äußere und innerer Rand" msgid "Outer brim only" msgstr "Nur äußerer Rand" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 -msgid "Output file" -msgstr "Ausgabedatei" - #: src/libslic3r/PrintConfig.cpp:4436 msgid "Output File" msgstr "Ausgabedatei" +#: src/libslic3r/PrintConfig.cpp:4305 +msgid "Output Model Info" +msgstr "Ausgabe Modellinformationen" + +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 +msgid "Output file" +msgstr "Ausgabedatei" + #: src/libslic3r/PrintConfig.cpp:1902 msgid "Output filename format" msgstr "Ausgabe Dateinamen Format" -#: src/libslic3r/PrintConfig.cpp:4305 -msgid "Output Model Info" -msgstr "Ausgabe Modellinformationen" - #: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4666 msgid "Output options" msgstr "Ausgabeoptionen" @@ -8969,6 +8508,10 @@ msgstr "" "im oder gegen den Uhrzeigersinn drehen können, indem Sie Bild nach oben bzw. Bild nach unten drücken?" +#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 +msgid "Paint-on seam" +msgstr "Aufmal-Naht" + #: resources/data/hints.ini: [hint:Paint-on seam] msgid "" "Paint-on seam\n" @@ -8982,9 +8525,10 @@ msgstr "" "Sie die FunktionAufmal-Naht aus. (Erfordert den Modus " "\"Fortgeschritten\" oder \"Experte\")." -#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 -msgid "Paint-on seam" -msgstr "Aufmal-Naht" +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 +msgid "Paint-on supports" +msgstr "Aufmal-Stützen" #: resources/data/hints.ini: [hint:Paint-on supports] msgid "" @@ -8999,11 +8543,6 @@ msgstr "" "Sie die Funktion Aufmal-Stützen aus. (Erfordert den Modus " "\"Fortgeschritten\" oder \"Experte\")." -#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 -msgid "Paint-on supports" -msgstr "Aufmal-Stützen" - #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:674 #, boost-format msgid "Painted using: Extruder %1%" @@ -9037,10 +8576,6 @@ msgstr "" msgid "Paints only one facet." msgstr "Bemalt nur eine Fläche." -#: src/slic3r/GUI/Field.cpp:193 -msgid "parameter name" -msgstr "Parametername" - #: src/slic3r/GUI/Field.cpp:269 src/slic3r/GUI/Field.cpp:343 msgid "Parameter validation" msgstr "Parameterüberprüfung" @@ -9061,14 +8596,14 @@ msgstr "" msgid "Part" msgstr "Teil" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 -msgid "Part manipulation" -msgstr "Teilbearbeitung" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2481 msgid "Part Settings to modify" msgstr "Abweichende Teileigenschaften" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 +msgid "Part manipulation" +msgstr "Teilbearbeitung" + #: src/libslic3r/PrintConfig.cpp:324 msgid "Password" msgstr "Kennwort" @@ -9077,6 +8612,10 @@ msgstr "Kennwort" msgid "Paste" msgstr "Einfügen" +#: src/slic3r/GUI/Plater.cpp:6640 +msgid "Paste From Clipboard" +msgstr "Aus Zwischenablage einfügen" + #: src/slic3r/GUI/MainFrame.cpp:1346 msgid "Paste clipboard" msgstr "Aus Zwischenablage einfügen" @@ -9085,10 +8624,6 @@ msgstr "Aus Zwischenablage einfügen" msgid "Paste from clipboard" msgstr "Aus Zwischenablage einfügen" -#: src/slic3r/GUI/Plater.cpp:6640 -msgid "Paste From Clipboard" -msgstr "Aus Zwischenablage einfügen" - #: src/libslic3r/PrintConfig.cpp:2697 msgid "Pattern" msgstr "Muster" @@ -9119,16 +8654,16 @@ msgstr "Unterstützungsmaterialmuster." msgid "Pause" msgstr "Pause" -#: src/slic3r/GUI/DoubleSlider.cpp:1469 -#, boost-format -msgid "Pause print (\"%1%\")" -msgstr "Druck pausieren (\"%1%\")" - #: src/slic3r/GUI/Tab.cpp:2471 src/libslic3r/GCode.cpp:714 #: src/libslic3r/PrintConfig.cpp:2441 msgid "Pause Print G-code" msgstr "Druckpausen G-Code" +#: src/slic3r/GUI/DoubleSlider.cpp:1469 +#, boost-format +msgid "Pause print (\"%1%\")" +msgstr "Druck pausieren (\"%1%\")" + #: src/libslic3r/PrintConfig.cpp:1558 msgid "Percent of a flow rate relative to object's normal layer height." msgstr "Prozent einer Flussrate relativ zur normalen Schichthöhe des Objekts." @@ -9162,6 +8697,12 @@ msgstr "" "Leistung vs. Genauigkeit der Berechnung. Niedrigere Werte können zu " "unerwünschten Artefakten führen." +#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 +msgid "Performing desktop integration failed - Could not find executable." +msgstr "" +"Durchführen der Desktop-Integration fehlgeschlagen - Ausführbare Datei " +"konnte nicht gefunden werden." + #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:232 msgid "" "Performing desktop integration failed - boost::filesystem::canonical did not " @@ -9179,12 +8720,6 @@ msgstr "" "erstellt werden. Die PrusaSlicer-Desktopdatei wurde wahrscheinlich " "erfolgreich erstellt." -#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 -msgid "Performing desktop integration failed - Could not find executable." -msgstr "" -"Durchführen der Desktop-Integration fehlgeschlagen - Ausführbare Datei " -"konnte nicht gefunden werden." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:378 msgid "" "Performing desktop integration failed because the application directory was " @@ -9202,10 +8737,6 @@ msgstr "Außenkontur" msgid "Perimeter extruder" msgstr "Umfang Extruder" -#: src/slic3r/GUI/PresetHints.cpp:171 -msgid "perimeters" -msgstr "Außenkonturen" - #: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1955 #: src/libslic3r/PrintConfig.cpp:1969 src/libslic3r/PrintConfig.cpp:1979 msgid "Perimeters" @@ -9282,6 +8813,10 @@ msgstr "Nadelkopf Breite" msgid "Place bearings in slots and resume printing" msgstr "Lager in Nuten einsetzen und Druck wieder aufnehmen" +#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 +msgid "Place on face" +msgstr "Auf Fläche legen" + #: resources/data/hints.ini: [hint:Place on face] msgid "" "Place on face\n" @@ -9294,10 +8829,6 @@ msgstr "" "seiner Flächen auf dem Druckbett sitzt? Wählen Sie die Funktion Auf " "Fläche legen oder drücken Sie die Taste F." -#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 -msgid "Place on face" -msgstr "Auf Fläche legen" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:181 src/slic3r/GUI/MainFrame.cpp:284 #: src/slic3r/GUI/MainFrame.cpp:333 src/slic3r/GUI/MainFrame.cpp:445 #: src/slic3r/GUI/MainFrame.cpp:448 src/slic3r/GUI/MainFrame.cpp:470 @@ -9340,10 +8871,6 @@ msgstr "Position" msgid "Position (for multi-extruder printers)" msgstr "Position (für Multi-Extruder-Drucker)" -#: src/libslic3r/PrintConfig.cpp:2215 -msgid "Position of perimeters starting points." -msgstr "Position des Startpunktes des Umfangs." - #: src/libslic3r/PrintConfig.cpp:2968 msgid "Position X" msgstr "X-Position" @@ -9352,6 +8879,10 @@ msgstr "X-Position" msgid "Position Y" msgstr "Y-Position" +#: src/libslic3r/PrintConfig.cpp:2215 +msgid "Position of perimeters starting points." +msgstr "Position des Startpunktes des Umfangs." + #: src/slic3r/GUI/Tab.cpp:1763 msgid "Post processing scripts shall modify G-code file in place." msgstr "" @@ -9454,11 +8985,6 @@ msgstr "" msgid "Preset with name \"%1%\" already exists." msgstr "Eine Voreinstellung mit dem Namen \"%1%\" existiert bereits." -#: src/slic3r/GUI/SavePresetDialog.cpp:221 -msgctxt "PresetName" -msgid "Copy" -msgstr "Kopieren" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 msgid "" "Presets are different.\n" @@ -9521,10 +9047,6 @@ msgstr "Vorher geslicete Datei (" msgid "Prime all printing extruders" msgstr "Alle Druckextruder vorfüllen" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 -msgid "print" -msgstr "Druck" - #: src/slic3r/GUI/GCodeViewer.cpp:3506 src/slic3r/GUI/GCodeViewer.cpp:3541 msgid "Print" msgstr "Druck" @@ -9533,14 +9055,6 @@ msgstr "Druck" msgid "Print &Host Upload Queue" msgstr "Druck&host Warteschlange" -#: src/libslic3r/PrintConfig.cpp:753 -msgid "" -"Print contour perimeters from the outermost one to the innermost one instead " -"of the default inverse order." -msgstr "" -"Drucken Sie Konturumfänge von der äußersten zur innersten Kontur anstatt der " -"standardmäßigen umgekehrten Reihenfolge." - #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Print Diameters" msgstr "Druckdurchmesser" @@ -9549,6 +9063,23 @@ msgstr "Druckdurchmesser" msgid "Print Host upload" msgstr "Hochladen zum Druckhost" +#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 +#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +msgid "Print Settings" +msgstr "Druckeinstellungen" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 +msgid "Print Settings Tab" +msgstr "Druckeinstellungsreiter" + +#: src/libslic3r/PrintConfig.cpp:753 +msgid "" +"Print contour perimeters from the outermost one to the innermost one instead " +"of the default inverse order." +msgstr "" +"Drucken Sie Konturumfänge von der äußersten zur innersten Kontur anstatt der " +"standardmäßigen umgekehrten Reihenfolge." + #: src/slic3r/GUI/KBShortcutsDialog.cpp:114 #: src/slic3r/GUI/PrintHostDialogs.cpp:217 msgid "Print host upload queue" @@ -9562,20 +9093,11 @@ msgstr "Druckmodus" msgid "Print pauses" msgstr "Druckpausen" -#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 -msgid "Print Settings" -msgstr "Druckeinstellungen" - #: src/slic3r/GUI/GCodeViewer.cpp:3693 src/slic3r/GUI/GCodeViewer.cpp:3715 #: src/slic3r/GUI/GUI.cpp:337 src/slic3r/GUI/Plater.cpp:817 msgid "Print settings" msgstr "Druckeinstellungen" -#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 -msgid "Print Settings Tab" -msgstr "Druckeinstellungsreiter" - #: src/libslic3r/PrintConfig.cpp:3774 msgid "Print speed" msgstr "Druckgeschwindigkeit" @@ -9611,9 +9133,14 @@ msgstr "" msgid "Printer" msgstr "Drucker" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 -msgid "printer" -msgstr "Drucker" +#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 +#: src/slic3r/GUI/Tab.hpp:490 +msgid "Printer Settings" +msgstr "Druckereinstellungen" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 +msgid "Printer Settings Tab" +msgstr "Druckereinstellungsreiter" #: src/libslic3r/PrintConfig.cpp:3215 src/libslic3r/PrintConfig.cpp:3216 msgid "Printer absolute correction" @@ -9623,10 +9150,6 @@ msgstr "Drucker absolute Korrektur" msgid "Printer gamma correction" msgstr "Drucker Gammakorrektur" -#: src/slic3r/GUI/Tab.cpp:1375 -msgid "printer model" -msgstr "Druckermodell" - #: src/libslic3r/PrintConfig.cpp:2011 msgid "Printer notes" msgstr "Drucker Anmerkungen" @@ -9635,6 +9158,18 @@ msgstr "Drucker Anmerkungen" msgid "Printer preset names" msgstr "Drucker-Voreinstellungsnamen" +#: src/libslic3r/PrintConfig.cpp:3192 +msgid "Printer scaling X axis correction" +msgstr "Druckerskalierung X-Achsen-Korrektur" + +#: src/libslic3r/PrintConfig.cpp:3200 +msgid "Printer scaling Y axis correction" +msgstr "Druckerskalierung Y-Achsen-Korrektur" + +#: src/libslic3r/PrintConfig.cpp:3208 +msgid "Printer scaling Z axis correction" +msgstr "Druckerskalierung Z-Achsen-Korrektur" + #: src/libslic3r/PrintConfig.cpp:3183 src/libslic3r/PrintConfig.cpp:3184 #: src/libslic3r/PrintConfig.cpp:3185 msgid "Printer scaling correction" @@ -9652,27 +9187,6 @@ msgstr "Korrektur der Druckerskalierung in der Y-Achse" msgid "Printer scaling correction in Z axis" msgstr "Korrektur der Druckerskalierung in der Z-Achse" -#: src/libslic3r/PrintConfig.cpp:3192 -msgid "Printer scaling X axis correction" -msgstr "Druckerskalierung X-Achsen-Korrektur" - -#: src/libslic3r/PrintConfig.cpp:3200 -msgid "Printer scaling Y axis correction" -msgstr "Druckerskalierung Y-Achsen-Korrektur" - -#: src/libslic3r/PrintConfig.cpp:3208 -msgid "Printer scaling Z axis correction" -msgstr "Druckerskalierung Z-Achsen-Korrektur" - -#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 -msgid "Printer Settings" -msgstr "Druckereinstellungen" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 -msgid "Printer Settings Tab" -msgstr "Druckereinstellungsreiter" - #: src/libslic3r/PrintConfig.cpp:223 src/libslic3r/PrintConfig.cpp:224 msgid "Printer technology" msgstr "Druckertechnologie" @@ -9765,6 +9279,10 @@ msgstr "Prusa FFF Technologie Drucker" msgid "Prusa MSLA Technology Printers" msgstr "Prusa MSLA Technologie Drucker" +#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 +msgid "PrusaSlicer GUI initialization failed" +msgstr "PrusaSlicer GUI-Initialisierung fehlgeschlagen" + #: src/slic3r/GUI/GUI_App.cpp:1330 #, boost-format msgid "" @@ -9798,10 +9316,6 @@ msgstr "PrusaSlicer erkannte System-SSL-Zertifikatspeicher in: %1%" msgid "PrusaSlicer error" msgstr "PrusaSlicer Fehler" -#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 -msgid "PrusaSlicer GUI initialization failed" -msgstr "PrusaSlicer GUI-Initialisierung fehlgeschlagen" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:84 #, boost-format msgid "PrusaSlicer has encountered a fatal error: \"%1%\"" @@ -10147,6 +9661,16 @@ msgstr "Normal" msgid "Regular expression" msgstr "Regulärer Ausdruck" +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" +"Bei der relativen Extruderadressierung muss die Extruderposition in jeder " +"Schicht neu eingestellt werden, damit die Fließkommagenauigkeit nicht " +"verloren geht. Fügen Sie \"G92 E0\" zum layer_gcode hinzu." + #: src/slic3r/GUI/Preferences.cpp:435 msgid "Release only" msgstr "Nur Vollversion" @@ -10155,6 +9679,11 @@ msgstr "Nur Vollversion" msgid "Reload all from disk" msgstr "Alles von der Festplatte neu laden" +#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 +#: src/slic3r/GUI/Plater.cpp:3548 +msgid "Reload from disk" +msgstr "Neuladen von Festplatte" + #: resources/data/hints.ini: [hint:Reload from disk] msgid "" "Reload from disk\n" @@ -10168,11 +9697,6 @@ msgstr "" "rechten Maustaste auf das Modell in der 3D-Ansicht und wählen Sie Von " "Festplatte neu laden. Lesen Sie mehr in der Dokumentation." -#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 -msgid "Reload from disk" -msgstr "Neuladen von Festplatte" - #: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 msgid "Reload from:" msgstr "Neuladen von:" @@ -10210,15 +9734,19 @@ msgstr "Auswahl merken" msgid "Remember output directory" msgstr "Ausgabeverzeichnis merken" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "remove" -msgstr "Entfernen" - #: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/BedShapeDialog.cpp:362 #: src/slic3r/GUI/Tab.cpp:3734 msgid "Remove" msgstr "Entfernen" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 +msgid "Remove Instance of the selected object" +msgstr "Entfernt Kopie des gewählten Objekts" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 +msgid "Remove Multi Material painting" +msgstr "Multi Material Bemalung entfernen" + #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:38 msgid "Remove all holes" msgstr "Alle Löcher entfernen" @@ -10244,18 +9772,10 @@ msgstr "Extruder aus der Sequenz entfernen" msgid "Remove instance" msgstr "Kopie entfernen" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 -msgid "Remove Instance of the selected object" -msgstr "Entfernt Kopie des gewählten Objekts" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:160 msgid "Remove layer range" msgstr "Schichtbereich entfernen" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 -msgid "Remove Multi Material painting" -msgstr "Multi Material Bemalung entfernen" - #: src/slic3r/GUI/GUI_Factories.cpp:1087 msgid "Remove one instance of the selected object" msgstr "Entferne eine Kopie des gewählten Objekts" @@ -10388,11 +9908,11 @@ msgid "Repairing was canceled" msgstr "Reparieren wurde abgebrochen" #: src/slic3r/GUI/MainFrame.cpp:1285 -msgid "Repeat last quick slice" +msgid "Repeat Last Quick Slice" msgstr "Letzten Quick Slice wiederholen" #: src/slic3r/GUI/MainFrame.cpp:1285 -msgid "Repeat Last Quick Slice" +msgid "Repeat last quick slice" msgstr "Letzten Quick Slice wiederholen" #: src/slic3r/GUI/Plater.cpp:3432 @@ -10428,21 +9948,6 @@ msgstr "Ein &Problem melden" msgid "Report an issue on %s" msgstr "Einen Problem melden über %s" -#: src/slic3r/Utils/PresetUpdater.cpp:815 -#, c-format, boost-format -msgid "requires max. %s" -msgstr "benötigt max. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:812 -#, c-format, boost-format -msgid "requires min. %s" -msgstr "benötigt min. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:808 -#, c-format, boost-format -msgid "requires min. %s and max. %s" -msgstr "benötigt min. %s und max. %s" - #: src/slic3r/GUI/FirmwareDialog.cpp:820 msgid "Rescan" msgstr "Rescan" @@ -10451,6 +9956,14 @@ msgstr "Rescan" msgid "Reset" msgstr "Rücksetzen" +#: src/slic3r/GUI/Plater.cpp:3003 +msgid "Reset Project" +msgstr "Projekt zurücksetzen" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 +msgid "Reset Rotation" +msgstr "Rotation zurücksetzen" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1225 msgid "Reset clipping plane" msgstr "Beschnittebene zurücksetzen" @@ -10463,18 +9976,10 @@ msgstr "Beschnittebene zurücksetzen" msgid "Reset direction" msgstr "Richtung zurücksetzen" -#: src/slic3r/GUI/Plater.cpp:3003 -msgid "Reset Project" -msgstr "Projekt zurücksetzen" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363 msgid "Reset rotation" msgstr "Rotation zurücksetzen" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 -msgid "Reset Rotation" -msgstr "Rotation zurücksetzen" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:398 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:400 msgid "Reset scale" @@ -10486,14 +9991,14 @@ msgstr "Skalierung zurücksetzen" msgid "Reset selection" msgstr "Auswahl zurücksetzen" -#: src/slic3r/GUI/GLCanvas3D.cpp:237 -msgid "Reset to base" -msgstr "Zurücksetzen auf Basis" - #: src/slic3r/GUI/Tab.cpp:2825 msgid "Reset to Filament Color" msgstr "Zurücksetzen auf Filamentfarbe" +#: src/slic3r/GUI/GLCanvas3D.cpp:237 +msgid "Reset to base" +msgstr "Zurücksetzen auf Basis" + #: src/slic3r/GUI/GUI_App.cpp:2331 msgid "Restart application" msgstr "Anwendung neu starten" @@ -10515,13 +10020,6 @@ msgstr "Bei Schichtwechsel einziehen" msgid "Retraction" msgstr "Einzug" -#: src/libslic3r/PrintConfig.cpp:2115 -msgid "" -"Retraction is not triggered when travel moves are shorter than this length." -msgstr "" -"Der Einzug wird nicht ausgelöst, wenn die Fahrbewegungen kürzer als diese " -"Länge sind." - #: src/libslic3r/PrintConfig.cpp:2136 msgid "Retraction Length" msgstr "Einzugslänge" @@ -10534,6 +10032,13 @@ msgstr "Einzugslänge (Werkzeugwechsel)" msgid "Retraction Speed" msgstr "Einzugsgeschwindigkeit" +#: src/libslic3r/PrintConfig.cpp:2115 +msgid "" +"Retraction is not triggered when travel moves are shorter than this length." +msgstr "" +"Der Einzug wird nicht ausgelöst, wenn die Fahrbewegungen kürzer als diese " +"Länge sind." + #: src/slic3r/GUI/Tab.cpp:2818 msgid "" "Retraction when tool is disabled (advanced settings for multi-extruder " @@ -10570,6 +10075,14 @@ msgstr "Überprüfen Sie die Ersetzungen und passen Sie sie bei Bedarf an." msgid "Right" msgstr "Rechts" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +msgid "Right Preset Value" +msgstr "Rechter voreingestellter Wert" + +#: src/slic3r/GUI/MainFrame.cpp:1129 +msgid "Right View" +msgstr "Ansicht von rechts" + #: src/slic3r/GUI/GUI_ObjectList.cpp:488 msgid "Right button click the icon to change the object printable property" msgstr "" @@ -10602,14 +10115,6 @@ msgstr "Rechte Maustaste" msgid "Right mouse button:" msgstr "Rechte Maustaste:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 -msgid "Right Preset Value" -msgstr "Rechter voreingestellter Wert" - -#: src/slic3r/GUI/MainFrame.cpp:1129 -msgid "Right View" -msgstr "Ansicht von rechts" - #: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:466 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:543 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562 @@ -10677,16 +10182,6 @@ msgstr "%s ausführen" msgid "Running post-processing scripts" msgstr "Post-Prozess Scripts werden ausgeführt" -#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 -#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 -#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 -#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 -#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 -#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 -#: src/libslic3r/PrintConfig.cpp:3349 -msgid "s" -msgstr "s" - #: src/slic3r/GUI/MainFrame.cpp:1231 src/slic3r/GUI/MainFrame.cpp:1580 msgid "S&end G-code" msgstr "S&ende G-code" @@ -10695,6 +10190,60 @@ msgstr "S&ende G-code" msgid "S&end to print" msgstr "Zum Drucken s&enden" +#: src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Material Profiles Selection" +msgstr "SLA Material Profile Auswahl" + +#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Materials" +msgstr "SLA Materialien" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 +msgid "SLA Support Points" +msgstr "SLA Stützpunkte" + +#: src/slic3r/GUI/ConfigWizard.cpp:2102 +msgid "SLA Technology Printers" +msgstr "SLA Technologie Drucker" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 +msgid "SLA gizmo keyboard shortcuts" +msgstr "SLA Gizmo Tastaturkürzel" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +msgid "SLA material" +msgstr "SLA Material" + +#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 +msgid "SLA material type" +msgstr "SLA Materialtyp" + +#: src/slic3r/GUI/ConfigWizard.cpp:752 +msgid "SLA materials" +msgstr "SLA Materialien" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +msgid "SLA print" +msgstr "SLA Druck" + +#: src/libslic3r/PrintConfig.cpp:3382 +msgid "SLA print material notes" +msgstr "SLA Druckmaterial-Anmerkungen" + +#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 +msgid "SLA print settings" +msgstr "SLA Druckeinstellungen" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6369 +msgid "SLA supports outside the print area were detected." +msgstr "SLA-Stützen außerhalb des Druckbereichs wurden erkannt." + +#: src/slic3r/GUI/MainFrame.cpp:1661 +msgid "SVG" +msgstr "SVG" + #. TRN To be shown in Print Settings "Bottom contact Z distance". Have to be as short as possible #. TRN To be shown in Print Settings "Bottom interface layers". Have to be as short as possible #: src/libslic3r/PrintConfig.cpp:2576 src/libslic3r/PrintConfig.cpp:2661 @@ -10715,6 +10264,23 @@ msgstr "Speichere %s als:" msgid "Save %s file as:" msgstr "Speichere %s Datei als:" +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save G-code file as:" +msgstr "Speichere G-Code Datei als:" + +#: src/slic3r/GUI/MainFrame.cpp:1736 +msgid "Save OBJ file (less prone to coordinate errors than STL) as:" +msgstr "" +"Speichern als OBJ-Datei (weniger anfällig für Koordinatenfehler als STL):" + +#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 +msgid "Save Project &as" +msgstr "Projekt speichern &als" + +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save SL1 / SL1S file as:" +msgstr "SL1 / SL1S-Datei speichern unter:" + #: src/libslic3r/PrintConfig.cpp:4310 msgid "Save config file" msgstr "Speichere Konfigurationsdatei" @@ -10745,15 +10311,6 @@ msgstr "Speichere aktuelle Projektdatei als" msgid "Save file as:" msgstr "Speichere Datei als:" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save G-code file as:" -msgstr "Speichere G-Code Datei als:" - -#: src/slic3r/GUI/MainFrame.cpp:1736 -msgid "Save OBJ file (less prone to coordinate errors than STL) as:" -msgstr "" -"Speichern als OBJ-Datei (weniger anfällig für Koordinatenfehler als STL):" - #: src/slic3r/GUI/SavePresetDialog.cpp:191 #: src/slic3r/GUI/SavePresetDialog.cpp:197 msgid "Save preset" @@ -10767,10 +10324,6 @@ msgstr "Sichern der Voreinstellungssammlung unter:" msgid "Save project" msgstr "Projekt speichern" -#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 -msgid "Save Project &as" -msgstr "Projekt speichern &als" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:79 msgid "Save project (3mf)" msgstr "Speichere Projekt (3mf)" @@ -10779,10 +10332,6 @@ msgstr "Speichere Projekt (3mf)" msgid "Save project as (3mf)" msgstr "Speichere Projekt als (3mf)" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save SL1 / SL1S file as:" -msgstr "SL1 / SL1S-Datei speichern unter:" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:898 msgid "Save support points?" msgstr "Stützpunkte speichern?" @@ -10814,6 +10363,10 @@ msgstr "Sichern des Netzes in einen 3MF-Container fehlgeschlagen." msgid "Scale" msgstr "Skalieren" +#: src/slic3r/GUI/Selection.cpp:950 +msgid "Scale To Fit" +msgstr "Passend skalieren" + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:523 msgid "Scale factors" msgstr "Skalierungsfaktoren" @@ -10827,10 +10380,6 @@ msgstr "" msgid "Scale to Fit" msgstr "Passend skalieren" -#: src/slic3r/GUI/Selection.cpp:950 -msgid "Scale To Fit" -msgstr "Passend skalieren" - #: src/libslic3r/PrintConfig.cpp:4405 msgid "Scale to fit the given volume." msgstr "Auf das gegebene Volumen skalieren." @@ -10919,13 +10468,41 @@ msgstr "Zweite Farbe" msgid "See Download page." msgstr "Siehe Download-Seite." +#: src/slic3r/GUI/GUI_App.cpp:1219 +msgid "See Releases page." +msgstr "Siehe Releases-Seite." + #: src/slic3r/GUI/NotificationManager.hpp:753 msgid "See more." msgstr "Siehe mehr." -#: src/slic3r/GUI/GUI_App.cpp:1219 -msgid "See Releases page." -msgstr "Siehe Releases-Seite." +#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 +msgid "Select Filament Settings Tab" +msgstr "Wählt Filamenteinstellungsreiter" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 +msgid "Select Plater Tab" +msgstr "Wählt Druckplattenreiter" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 +msgid "Select Print Settings Tab" +msgstr "Wählt Druckeinstellungsreiter" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 +msgid "Select Printer Settings Tab" +msgstr "Wählt Druckereinstellungsreiter" + +#: src/slic3r/GUI/DoubleSlider.cpp:2532 +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/FirmwareDialog.cpp:813 msgid "Select a file" @@ -10963,26 +10540,10 @@ msgstr "Konfiguration zum Laden auswählen:" msgid "Select coordinate space, in which the transformation will be performed." msgstr "Koordinatenraum wählen, in dem die Transformation durchgeführt wird." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 -msgid "Select Filament Settings Tab" -msgstr "Wählt Filamenteinstellungsreiter" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 -msgid "Select Plater Tab" -msgstr "Wählt Druckplattenreiter" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 msgid "Select presets to compare" msgstr "Voreinstellungen zum Vergleichen wählen" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 -msgid "Select Print Settings Tab" -msgstr "Wählt Druckeinstellungsreiter" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 -msgid "Select Printer Settings Tab" -msgstr "Wählt Druckereinstellungsreiter" - #: src/slic3r/GUI/GalleryDialog.cpp:76 msgid "Select shape from the gallery" msgstr "Form aus der Galerie auswählen" @@ -10991,6 +10552,10 @@ msgstr "Form aus der Galerie auswählen" msgid "Select showing settings" msgstr "Wähle Anzeigeeinstellungen" +#: src/slic3r/GUI/MainFrame.cpp:1726 +msgid "Select the STL file to repair:" +msgstr "Geben Sie die STL-Datei an, die repariert werden soll:" + #: src/slic3r/GUI/GUI_App.cpp:2010 msgid "Select the language" msgstr "Wählen Sie die Sprache aus" @@ -11007,10 +10572,6 @@ msgstr "Wählt die Druckprofile, die mit diesem Profil kompatibel sind." msgid "Select the printers this profile is compatible with." msgstr "Wählen Sie die Drucker aus, die mit diesem Profil kompatibel sind." -#: src/slic3r/GUI/MainFrame.cpp:1726 -msgid "Select the STL file to repair:" -msgstr "Geben Sie die STL-Datei an, die repariert werden soll:" - #: src/slic3r/GUI/Preferences.cpp:709 msgid "Select toolbar icon size in respect to the default one." msgstr "" @@ -11028,18 +10589,6 @@ msgstr "Wählen Sie aus, welche Art von Grundschicht Sie benötigen" msgid "Select what kind of support do you need" msgstr "Wählen Sie aus, welche Art von Unterstützung Sie benötigen" -#: src/slic3r/GUI/DoubleSlider.cpp:2532 -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:168 msgid "Selection-Add" msgstr "Auswahl hinzufügen" @@ -11048,14 +10597,6 @@ msgstr "Auswahl hinzufügen" msgid "Selection-Add All" msgstr "Auswahl Alles hinzufügen" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 -msgid "Selection-Add from list" -msgstr "Auswahl aus Liste hinzufügen" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6446 -msgid "Selection-Add from rectangle" -msgstr "Auswahl über Rechteck hinzufügen" - #: src/slic3r/GUI/Selection.cpp:278 msgid "Selection-Add Instance" msgstr "Auswahl Kopie hinzufügen" @@ -11064,6 +10605,14 @@ msgstr "Auswahl Kopie hinzufügen" msgid "Selection-Add Object" msgstr "Auswahl Objekt hinzufügen" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 +msgid "Selection-Add from list" +msgstr "Auswahl aus Liste hinzufügen" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6446 +msgid "Selection-Add from rectangle" +msgstr "Auswahl über Rechteck hinzufügen" + #: src/slic3r/GUI/Selection.cpp:209 msgid "Selection-Remove" msgstr "Auswahl entfernen" @@ -11072,14 +10621,6 @@ msgstr "Auswahl entfernen" msgid "Selection-Remove All" msgstr "Auswahl Alles entfernen" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 -msgid "Selection-Remove from list" -msgstr "Auswahl aus Liste entfernen" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6461 -msgid "Selection-Remove from rectangle" -msgstr "Auswahl über Rechteck entfernen" - #: src/slic3r/GUI/Selection.cpp:297 msgid "Selection-Remove Instance" msgstr "Auswahl Kopie entfernen" @@ -11088,18 +10629,26 @@ msgstr "Auswahl Kopie entfernen" msgid "Selection-Remove Object" msgstr "Auswahl Objekt entfernen" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 +msgid "Selection-Remove from list" +msgstr "Auswahl aus Liste entfernen" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6461 +msgid "Selection-Remove from rectangle" +msgstr "Auswahl über Rechteck entfernen" + #: src/slic3r/GUI/MainFrame.cpp:1320 msgid "Selects all objects" msgstr "Alle Objekte auswählen" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 -msgid "Send G-code" -msgstr "Sende G-code" - #: src/slic3r/GUI/PrintHostDialogs.cpp:40 msgid "Send G-Code to printer host" msgstr "Sende G-Code zum Druckerhost" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +msgid "Send G-code" +msgstr "Sende G-code" + #: src/slic3r/GUI/SendSystemInfoDialog.cpp:550 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:618 msgid "Send system info" @@ -11150,6 +10699,46 @@ msgstr "Name des Dienstes" msgid "Set" msgstr "Setzen" +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 +msgid "Set Mirror" +msgstr "Spiegel setzen" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 +msgid "Set Orientation" +msgstr "Orientierung setzen" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 +msgid "Set Position" +msgstr "Position setzen" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Printable" +msgstr "Setze Druckbar" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Printable Instance" +msgstr "Setze druckbare Kopie" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Printable group" +msgstr "Setze druckbare Gruppe" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 +msgid "Set Scale" +msgstr "Setze Skalierung" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Unprintable" +msgstr "Setze Undruckbar" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Unprintable Instance" +msgstr "Setze undruckbare Kopie" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Unprintable group" +msgstr "Gruppe \"Nicht druckbar\" setzen" + #: src/slic3r/GUI/GUI_Factories.cpp:636 src/slic3r/GUI/GUI_Factories.cpp:648 msgid "Set as a Separated Object" msgstr "Als separates Objekt festlegen" @@ -11198,9 +10787,9 @@ msgstr "Linken Schieber aktiv setzen" msgid "Set lower thumb as active" msgstr "Unteren Schieber aktiv setzen" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 -msgid "Set Mirror" -msgstr "Spiegel setzen" +#: src/slic3r/GUI/GUI_Factories.cpp:1090 +msgid "Set number of instances" +msgstr "Setze Anzahl der Kopien" #: resources/data/hints.ini: [hint:Set number of instances] msgid "" @@ -11213,35 +10802,11 @@ msgstr "" "und die genaue Anzahl der Kopien festlegen können, anstatt es mehrmals zu " "kopieren und einzufügen?" -#: src/slic3r/GUI/GUI_Factories.cpp:1090 -msgid "Set number of instances" -msgstr "Setze Anzahl der Kopien" - #: src/slic3r/GUI/Plater.cpp:5573 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Setze Anzahl der Kopien auf %d" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 -msgid "Set Orientation" -msgstr "Orientierung setzen" - -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 -msgid "Set Position" -msgstr "Position setzen" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Printable" -msgstr "Setze Druckbar" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Printable group" -msgstr "Setze druckbare Gruppe" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Printable Instance" -msgstr "Setze druckbare Kopie" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:249 msgid "Set right thumb as active" msgstr "Rechten Schieber aktiv setzen" @@ -11250,10 +10815,6 @@ msgstr "Rechten Schieber aktiv setzen" msgid "Set ruler mode" msgstr "Lineal-Modus einstellen" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 -msgid "Set Scale" -msgstr "Setze Skalierung" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:196 msgid "Set selected items as Printable/Unprintable" msgstr "Ausgewählte Elemente als druckbar/ nicht druckbar festlegen" @@ -11420,18 +10981,6 @@ msgstr "" "des Abstandszylinders um Ihren Extruder herum und stellt die maximale Tiefe " "dar, die der Extruder vor der Kollision mit anderen Druckobjekten sehen kann." -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Unprintable" -msgstr "Setze Undruckbar" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Unprintable group" -msgstr "Gruppe \"Nicht druckbar\" setzen" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Unprintable Instance" -msgstr "Setze undruckbare Kopie" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:235 msgid "Set upper thumb as active" msgstr "Oberen Schieber aktiv setzen" @@ -11456,6 +11005,10 @@ msgstr "Einstellungen" msgid "Settings for height range" msgstr "Einstellungen für Höhenbereich" +#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 +msgid "Settings in non-modal window" +msgstr "Einstellungen im nicht-modalen Fenster" + #: resources/data/hints.ini: [hint:Settings in non-modal window] msgid "" "Settings in non-modal window\n" @@ -11470,10 +11023,6 @@ msgstr "" "zu den Einstellungen und wählen Sie Einstellungen in nicht-modalem " "Fenster." -#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 -msgid "Settings in non-modal window" -msgstr "Einstellungen im nicht-modalen Fenster" - #: src/slic3r/GUI/ConfigManipulation.cpp:167 msgid "Shall I adjust those settings for supports?" msgstr "Soll ich diese Einstellungen für Stützen anpassen?" @@ -11558,6 +11107,10 @@ msgstr "Zeige &Konfigurationsordner" msgid "Show &Labels" msgstr "Anzeigen Beschriftungen (&L)" +#: src/slic3r/GUI/MainFrame.cpp:1097 +msgid "Show Tip of the Day" +msgstr "Tipp des Tages anzeigen" + #: src/slic3r/GUI/MainFrame.cpp:1092 src/slic3r/GUI/MainFrame.cpp:1095 msgid "Show about dialog" msgstr "\"Über\"-Dialog anzeigen" @@ -11646,18 +11199,18 @@ msgstr "Vorschau der 3D-Schnitte anzeigen" msgid "Show the filament settings" msgstr "Filamenteinstellungen anzeigen" -#: src/libslic3r/PrintConfig.cpp:4296 -msgid "Show the full list of print/G-code configuration options." -msgstr "" -"Zeigt die vollständige Liste der Konfigurationsmöglichkeiten für Druck/GCode " -"an." - #: src/libslic3r/PrintConfig.cpp:4301 msgid "Show the full list of SLA print configuration options." msgstr "" "Zeigt die vollständige Liste der Konfigurationsmöglichkeiten für SLA Druck " "an." +#: src/libslic3r/PrintConfig.cpp:4296 +msgid "Show the full list of print/G-code configuration options." +msgstr "" +"Zeigt die vollständige Liste der Konfigurationsmöglichkeiten für Druck/GCode " +"an." + #: src/slic3r/GUI/MainFrame.cpp:1100 msgid "Show the list of the keyboard shortcuts" msgstr "Liste der Tastaturkürzel anzeigen" @@ -11678,10 +11231,6 @@ msgstr "Druckereinstellungen anzeigen" msgid "Show this help." msgstr "Diese Hilfe zeigen." -#: src/slic3r/GUI/MainFrame.cpp:1097 -msgid "Show Tip of the Day" -msgstr "Tipp des Tages anzeigen" - #: src/slic3r/GUI/MainFrame.cpp:1087 msgid "Show user configuration folder (datadir)" msgstr "Zeige Benutzerkonfigurationsordner (datadir)" @@ -11721,14 +11270,14 @@ msgstr "Objekt-/Kopiebeschriftungen ein-/ausblenden" msgid "Simple" msgstr "Einfach" -#: src/slic3r/GUI/ConfigWizard.cpp:1279 -msgid "Simple mode" -msgstr "Einfacher Modus" - #: src/slic3r/GUI/GUI_App.cpp:2237 msgid "Simple View Mode" msgstr "EInfacher Anzeigemodus" +#: src/slic3r/GUI/ConfigWizard.cpp:1279 +msgid "Simple mode" +msgstr "Einfacher Modus" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:156 msgid "Simplification is currently only allowed when a single part is selected" msgstr "" @@ -11762,10 +11311,6 @@ msgstr "" msgid "Simplify model" msgstr "Modell vereinfachen" -#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 -msgid "Single extruder MM setup" -msgstr "Einzelextruder MM Setup" - #: src/libslic3r/PrintConfig.cpp:2459 msgid "Single Extruder Multi Material" msgstr "Einzelextruder mit Multi-Material" @@ -11782,6 +11327,10 @@ msgstr "" "Möchten Sie den Durchmesser für alle Extruder auf den Wert des ersten " "Extruderdüsendurchmessers ändern?" +#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 +msgid "Single extruder MM setup" +msgstr "Einzelextruder MM Setup" + #: src/slic3r/GUI/Tab.cpp:2734 msgid "Single extruder multimaterial parameters" msgstr "Einzelextruder Multimaterial Parameter" @@ -11812,6 +11361,10 @@ msgstr "Größe der rechteckigen Platte in X und Y." msgid "Skirt" msgstr "Schürze" +#: src/libslic3r/PrintConfig.cpp:2282 +msgid "Skirt Loops" +msgstr "Schleifen für die Schürze" + #: src/slic3r/GUI/GUI_Factories.cpp:136 src/slic3r/GUI/Tab.cpp:1536 #: src/libslic3r/PrintConfig.cpp:494 src/libslic3r/PrintConfig.cpp:505 #: src/libslic3r/PrintConfig.cpp:521 @@ -11822,65 +11375,11 @@ msgstr "Schürze und Rand" msgid "Skirt height" msgstr "Schürzenhöhe" -#: src/libslic3r/PrintConfig.cpp:2282 -msgid "Skirt Loops" -msgstr "Schleifen für die Schürze" - #: src/slic3r/GUI/GUI_Preview.cpp:248 src/libslic3r/ExtrusionEntity.cpp:327 #: src/libslic3r/ExtrusionEntity.cpp:358 msgid "Skirt/Brim" msgstr "Schürze/Rand" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 -msgid "SLA gizmo keyboard shortcuts" -msgstr "SLA Gizmo Tastaturkürzel" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 -msgid "SLA material" -msgstr "SLA Material" - -#: src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Material Profiles Selection" -msgstr "SLA Material Profile Auswahl" - -#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 -msgid "SLA material type" -msgstr "SLA Materialtyp" - -#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Materials" -msgstr "SLA Materialien" - -#: src/slic3r/GUI/ConfigWizard.cpp:752 -msgid "SLA materials" -msgstr "SLA Materialien" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 -msgid "SLA print" -msgstr "SLA Druck" - -#: src/libslic3r/PrintConfig.cpp:3382 -msgid "SLA print material notes" -msgstr "SLA Druckmaterial-Anmerkungen" - -#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 -msgid "SLA print settings" -msgstr "SLA Druckeinstellungen" - -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 -msgid "SLA Support Points" -msgstr "SLA Stützpunkte" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6369 -msgid "SLA supports outside the print area were detected." -msgstr "SLA-Stützen außerhalb des Druckbereichs wurden erkannt." - -#: src/slic3r/GUI/ConfigWizard.cpp:2102 -msgid "SLA Technology Printers" -msgstr "SLA Technologie Drucker" - #: src/slic3r/GUI/GUI_Factories.cpp:461 msgid "Slab" msgstr "Slab" @@ -11979,6 +11478,14 @@ msgstr "Das Objekt \"%1%\" sieht aus wie ein Logo oder ein Schild" msgid "Slicing" msgstr "Slice" +#: src/slic3r/GUI/MainFrame.cpp:1710 +msgid "Slicing Done!" +msgstr "Slicing abgeschlossen!" + +#: src/libslic3r/PrintConfig.cpp:2489 +msgid "Slicing Mode" +msgstr "Slice-Modus" + #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:162 #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:204 msgid "Slicing complete" @@ -11988,10 +11495,6 @@ msgstr "Slicing abgeschlossen" msgid "Slicing done" msgstr "Slicing abgeschlossen" -#: src/slic3r/GUI/MainFrame.cpp:1710 -msgid "Slicing Done!" -msgstr "Slicing abgeschlossen!" - #: src/slic3r/GUI/NotificationManager.cpp:1113 msgid "Slicing finished." msgstr "Slicing abgeschlossen." @@ -12002,10 +11505,6 @@ msgid "" msgstr "" "Das Slicen wurde wegen eines internen Fehlers gestoppt: Defekter Sliceindex." -#: src/libslic3r/PrintConfig.cpp:2489 -msgid "Slicing Mode" -msgstr "Slice-Modus" - #: src/libslic3r/SLAPrintSteps.cpp:47 msgid "Slicing model" msgstr "Slice das Modell" @@ -12064,10 +11563,6 @@ msgstr "Nahtlos" msgid "Software &Releases" msgstr "Software &Release" -#: src/slic3r/GUI/PresetHints.cpp:176 -msgid "solid infill" -msgstr "Massives Infill" - #: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:322 #: src/libslic3r/ExtrusionEntity.cpp:348 src/libslic3r/PrintConfig.cpp:2342 #: src/libslic3r/PrintConfig.cpp:2354 @@ -12082,6 +11577,10 @@ msgstr "Massives Infill alle" msgid "Solid infill extruder" msgstr "Massives Infill Extruder" +#: src/libslic3r/PrintConfig.cpp:2313 +msgid "Solid infill threshold area" +msgstr "Massives Infill Flächen Schwellwert" + #: resources/data/hints.ini: [hint:Solid infill threshold area] msgid "" "Solid infill threshold area\n" @@ -12094,10 +11593,6 @@ msgstr "" "automatisch mit Solid Infill füllen lassen können? Stellen Sie " "denSchwellenwertbereich für Solid Infill ein (nur im Expertenmodus)." -#: src/libslic3r/PrintConfig.cpp:2313 -msgid "Solid infill threshold area" -msgstr "Massives Infill Flächen Schwellwert" - #: src/slic3r/GUI/Tab.cpp:1470 src/libslic3r/PrintConfig.cpp:2367 msgid "Solid layers" msgstr "Massive Schichten" @@ -12110,17 +11605,6 @@ msgstr "Lösliches Material" msgid "Soluble material is most likely used for a soluble support." msgstr "Lösliches Material wird meistens für lösliche Stützen verwendet." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 -msgid "" -"Some fields are too long to fit. Right mouse click reveals the full text." -msgstr "" -"Einige Texte sind zu lang. Ein rechter Mausklick zeigt den vollständigen " -"Text an." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some filaments were uninstalled." -msgstr "Einige Filamente wurden deinstalliert." - #: src/libslic3r/PrintConfig.cpp:1321 msgid "" "Some G/M-code commands, including temperature control and others, are not " @@ -12134,6 +11618,25 @@ msgstr "" "Extrusion\" verhindert, dass PrusaSlicer überhaupt einen Extrusionswert " "exportiert." +#: src/slic3r/GUI/ConfigWizard.cpp:2696 +msgid "Some Printers were uninstalled." +msgstr "Einige Drucker wurden deinstalliert." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some SLA materials were uninstalled." +msgstr "Einige SLA-Materialien wurden deinstalliert." + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +msgid "" +"Some fields are too long to fit. Right mouse click reveals the full text." +msgstr "" +"Einige Texte sind zu lang. Ein rechter Mausklick zeigt den vollständigen " +"Text an." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some filaments were uninstalled." +msgstr "Einige Filamente wurden deinstalliert." + #: src/slic3r/GUI/GLCanvas3D.cpp:6370 msgid "Some objects are not visible during editing." msgstr "Einige Objekte sind während der Bearbeitung nicht sichtbar." @@ -12185,14 +11688,6 @@ msgstr "" "Mit einigen Druckern oder Druckerkonfigurationen ist es schwierig, mit einer " "variablen Schichthöhe zu drucken. Standardmäßig aktiviert." -#: src/slic3r/GUI/ConfigWizard.cpp:2696 -msgid "Some Printers were uninstalled." -msgstr "Einige Drucker wurden deinstalliert." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some SLA materials were uninstalled." -msgstr "Einige SLA-Materialien wurden deinstalliert." - #: src/slic3r/GUI/GLCanvas3D.cpp:4041 msgid "Spacing" msgstr "Abstand" @@ -12359,14 +11854,14 @@ msgstr "Geschwindigkeit:" msgid "Sphere" msgstr "Kugel" -#: src/libslic3r/PrintConfig.cpp:2381 -msgid "Spiral vase" -msgstr "Spiralvasenmodus" - #: src/slic3r/GUI/ConfigManipulation.cpp:91 msgid "Spiral Vase" msgstr "Spiralvasenmodus" +#: src/libslic3r/PrintConfig.cpp:2381 +msgid "Spiral vase" +msgstr "Spiralvasenmodus" + #: src/slic3r/GUI/GUI_Factories.cpp:944 src/slic3r/GUI/GUI_Factories.cpp:954 #: src/slic3r/GUI/GUI_Factories.cpp:975 src/libslic3r/PrintConfig.cpp:4400 msgid "Split" @@ -12388,22 +11883,22 @@ msgstr "Ausgewähltes Objekt in Einzelobjekte trennen" msgid "Split the selected object into individual parts" msgstr "Das ausgewählte Objekt in einzelne Teile aufteilen" -#: src/slic3r/GUI/GLCanvas3D.cpp:4565 -msgid "Split to objects" -msgstr "In Objekte trennen" - #: src/slic3r/GUI/Plater.cpp:3095 msgid "Split to Objects" msgstr "In Objekte trennen" -#: src/slic3r/GUI/GLCanvas3D.cpp:4575 -msgid "Split to parts" -msgstr "In Teile trennen" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2008 msgid "Split to Parts" msgstr "In Teile trennen" +#: src/slic3r/GUI/GLCanvas3D.cpp:4565 +msgid "Split to objects" +msgstr "In Objekte trennen" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4575 +msgid "Split to parts" +msgstr "In Teile trennen" + #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:66 #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:132 msgid "Split triangles" @@ -12431,6 +11926,12 @@ msgstr "Standard" msgid "Stars" msgstr "Sterne" +#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 +#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 +#: src/libslic3r/PrintConfig.cpp:2415 +msgid "Start G-code" +msgstr "Start G-Code" + #: src/slic3r/GUI/MainFrame.cpp:1142 msgid "Start a new project" msgstr "Ein neues Projekt beginnen" @@ -12439,12 +11940,6 @@ msgstr "Ein neues Projekt beginnen" msgid "Start at height" msgstr "Starte auf Höhe" -#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 -#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 -#: src/libslic3r/PrintConfig.cpp:2415 -msgid "Start G-code" -msgstr "Start G-Code" - #: src/slic3r/GUI/MainFrame.cpp:1293 msgid "Start new slicing process" msgstr "Neuen Slicing-Prozess starten" @@ -12501,10 +11996,6 @@ msgstr "Status:" msgid "Stealth" msgstr "Stealth" -#: src/slic3r/GUI/Plater.cpp:1435 -msgid "stealth mode" -msgstr "Stealth Modus" - #: src/slic3r/GUI/GCodeViewer.cpp:3755 msgid "Stealth mode" msgstr "Stealth Modus" @@ -12544,22 +12035,6 @@ msgstr "" "Erfolgreich ausgeworfen. Das Gerät %s(%s) kann nun sicher vom Computer " "entfernt werden." -#: src/slic3r/GUI/PresetHints.cpp:181 -msgid "support" -msgstr "Stützen" - -#: src/libslic3r/PrintConfig.cpp:3517 -msgid "Support base diameter" -msgstr "Stützfuß Durchmesser" - -#: src/libslic3r/PrintConfig.cpp:3527 -msgid "Support base height" -msgstr "Stützfuß Höhe" - -#: src/libslic3r/PrintConfig.cpp:3536 -msgid "Support base safety distance" -msgstr "Sicherheitsabstand der Stützbasis" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Support Blocker" msgstr "Stützblocker" @@ -12576,14 +12051,22 @@ msgstr "Stützverstärker" msgid "Support Generator" msgstr "Stütz-Generator" +#: src/libslic3r/PrintConfig.cpp:3517 +msgid "Support base diameter" +msgstr "Stützfuß Durchmesser" + +#: src/libslic3r/PrintConfig.cpp:3527 +msgid "Support base height" +msgstr "Stützfuß Höhe" + +#: src/libslic3r/PrintConfig.cpp:3536 +msgid "Support base safety distance" +msgstr "Sicherheitsabstand der Stützbasis" + #: src/slic3r/GUI/Tab.cpp:4599 msgid "Support head" msgstr "Stützkopf" -#: src/slic3r/GUI/PresetHints.cpp:183 -msgid "support interface" -msgstr "Schnittstelle zu den Stützen" - #: src/slic3r/GUI/GUI_Factories.cpp:56 src/slic3r/GUI/GUI_Factories.cpp:131 #: src/slic3r/GUI/GUI_Preview.cpp:249 src/slic3r/GUI/Tab.cpp:1550 #: src/slic3r/GUI/Tab.cpp:1552 src/libslic3r/ExtrusionEntity.cpp:328 @@ -12669,10 +12152,6 @@ msgstr "Stützpunkte editieren" msgid "Supports" msgstr "Stützen" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "supports and pad" -msgstr "Stützen und Grundschicht" - #: src/libslic3r/PrintConfig.cpp:1596 msgid "Supports remaining times" msgstr "Unterstützt Restzeit" @@ -12705,10 +12184,6 @@ msgstr "" msgid "Suppress to open hyperlink in browser" msgstr "Öffnen des Hyperlinks im Browser unterdrücken" -#: src/slic3r/GUI/MainFrame.cpp:1661 -msgid "SVG" -msgstr "SVG" - #: src/slic3r/GUI/Mouse3DController.cpp:508 msgid "Swap Y/Z axes" msgstr "Y/Z-Achsen vertauschen" @@ -12730,10 +12205,6 @@ msgstr "Umschalten des Codes auf Farbwechsel (%1%) für:" msgid "Switch to 3D" msgstr "Zeige 3D" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 -msgid "Switch to editing mode" -msgstr "Zum Bearbeitungsmodus umschalten" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:113 msgid "Switch to Preview" msgstr "Wechseln zur Vorschau" @@ -12742,6 +12213,10 @@ msgstr "Wechseln zur Vorschau" msgid "Switch to Settings" msgstr "Zu Einstellungen wechseln" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 +msgid "Switch to editing mode" +msgstr "Zum Bearbeitungsmodus umschalten" + #: src/slic3r/GUI/wxExtensions.cpp:644 #, c-format, boost-format msgid "Switch to the %s mode" @@ -12782,10 +12257,6 @@ msgstr "" "\n" "Wollen Sie fortfahren?" -#: src/slic3r/GUI/Tab.cpp:1413 -msgid "symbolic profile name" -msgstr "symbolischer Profilname" - #: src/libslic3r/PrintConfig.cpp:2761 msgid "" "Synchronize support layers with the object print layers. This is useful with " @@ -12803,14 +12274,14 @@ msgstr "Mit Objektschichten synchronisieren" msgid "System &Info" msgstr "System&informationen" -#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 -msgid "System info sent successfully. Thank you." -msgstr "Systeminfo erfolgreich gesendet. Dankeschön." - #: src/slic3r/GUI/SysInfoDialog.cpp:84 msgid "System Information" msgstr "Systeminformationen" +#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 +msgid "System info sent successfully. Thank you." +msgstr "Systeminfo erfolgreich gesendet. Dankeschön." + #: src/slic3r/GUI/PresetComboBoxes.cpp:249 #: src/slic3r/GUI/PresetComboBoxes.cpp:287 #: src/slic3r/GUI/PresetComboBoxes.cpp:794 @@ -12896,6 +12367,148 @@ msgstr "" "Wenn das Gerät angeschlossen ist, drücken Sie bitte die Reset-Taste neben " "dem USB-Anschluss...." +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 +msgid "" +"The SLA archive doesn't contain any presets. Please activate some SLA " +"printer preset first before importing that SLA archive." +msgstr "" +"Das SLA-Archiv enthält keine Voreinstellungen. Bitte aktivieren Sie zunächst " +"eine SLA-Druckervoreinstellung, bevor Sie das SLA-Archiv importieren." + +#: src/slic3r/GUI/ConfigManipulation.cpp:82 +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 "" +"Der Spiralvasenmodus erfordert:\n" +"- einen Perimeter\n" +"- keine oberen massiven Schichten\n" +"- 0% Fülldichte\n" +"- kein Stützmaterial\n" +"- Vertikale Schalenstärke sicherstellen aktiv\n" +"- Dünne Wände erkennen nicht aktiv" + +#: src/libslic3r/Print.cpp:469 +msgid "" +"The Spiral Vase option can only be used when printing single material " +"objects." +msgstr "" +"Die Option Spiralvase kann nur beim Drucken von Objekten aus einem einzigen " +"Material verwendet werden." + +#: src/libslic3r/Print.cpp:494 +msgid "" +"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." +msgstr "" +"Der Reinigungsturm unterstützt derzeit kein volumetrisches E " +"(use_volumetric_e=0)." + +#: src/slic3r/GUI/ConfigManipulation.cpp:121 +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 "" +"Der Reinigungsturm unterstützt derzeit nur die unlöslichen Stützen, wenn sie " +"mit dem aktuellen Extruder gedruckt werden, ohne einen Werkzeugwechsel " +"auszulösen.\n" +"(sowohl der Stützmaterial-Extruder als auch der Stützmaterial-Schnittstellen-" +"Extruder müssen auf 0 eingestellt sein)" + +#: src/libslic3r/Print.cpp:598 +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)." +msgstr "" +"Der Reinigungsturm unterstützt zur Zeit nichtlösliche Stützen nur, falls sie " +"mit dem aktuellen Extruder ohne einen Werkzeugwechsel gedruckt werden " +"(sowohl support_material_extruder wie auch " +"support_material_interface_extruder müssen auf null gesetzt werden)." + +#: src/libslic3r/Print.cpp:496 +msgid "" +"The Wipe Tower is currently not supported for multimaterial sequential " +"prints." +msgstr "" +"Der Wischturm wird derzeit nicht für sequentielle Multimaterialdrucke " +"unterstützt." + +#: src/libslic3r/Print.cpp:488 +msgid "" +"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." +msgstr "" +"Der Wischturm wird derzeit nur für die Varianten Marlin, RepRap/Sprinter, " +"RepRapFirmware und Repetier-G-Code unterstützt." + +#: src/libslic3r/Print.cpp:490 +msgid "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." +msgstr "" +"Der Wischturm wird derzeit nur mit relativer Extruder-Adressierung " +"unterstützt ((use_relative_e_distances=1)." + +#: src/libslic3r/Print.cpp:519 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"over an equal number of raft layers" +msgstr "" +"Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese mit der " +"gleichen Anzahl von Raftschichten gedruckt werden" + +#: src/libslic3r/Print.cpp:522 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"with the same support_material_contact_distance" +msgstr "" +"Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese mit der " +"gleichen support_material_contact_distance gedruckt werden" + +#: src/libslic3r/Print.cpp:524 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are sliced " +"equally." +msgstr "" +"Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese gleich " +"gesliced werden." + +#: src/libslic3r/Print.cpp:517 +msgid "" +"The Wipe Tower is only supported for multiple objects if they have equal " +"layer heights" +msgstr "" +"Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese die " +"gleiche Schichthöhe haben" + +#: src/slic3r/GUI/Tab.cpp:3005 +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 "" +"Die Reinigungsoption ist nicht verfügbar, wenn der Firmware-Einzug verwendet " +"wird.\n" +"\n" +"Soll ich sie ausschalten, um den Firmware-Einzug zu aktivieren?" + +#: src/libslic3r/Print.cpp:537 +msgid "" +"The Wipe tower is only supported if all objects have the same variable layer " +"height" +msgstr "" +"Der Reinigungsturm wird nur unterstützt, wenn alle Objekte die gleiche " +"variable Schichthöhe haben" + #: src/slic3r/GUI/GUI_App.cpp:957 #, boost-format msgid "" @@ -13062,18 +12675,19 @@ msgstr "" "um das Ausquetschen in der ersten Schicht (\"Elephant Foot\"-Effekt) zu " "kompensieren." -#: src/slic3r/GUI/Plater.cpp:5717 -msgid "The following characters are not allowed by a FAT file system:" -msgstr "Die folgenden Zeichen sind in einem FAT-Dateisystem nicht zulässig:" - -#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 -msgid "the following characters are not allowed:" -msgstr "die folgenden Zeichen sind nicht erlaubt:" - #: src/slic3r/GUI/ConfigWizard.cpp:2459 msgid "The following FFF printer models have no filament selected:" msgstr "Bei den folgenden FFF-Druckermodellen wurde kein Filament ausgewählt:" +#: src/slic3r/GUI/ConfigWizard.cpp:2477 +msgid "The following SLA printer models have no materials selected:" +msgstr "" +"Bei den folgenden SLA-Druckermodellen wurden keine Materialien ausgewählt:" + +#: src/slic3r/GUI/Plater.cpp:5717 +msgid "The following characters are not allowed by a FAT file system:" +msgstr "Die folgenden Zeichen sind in einem FAT-Dateisystem nicht zulässig:" + #: src/slic3r/GUI/Tab.cpp:1842 #, c-format, boost-format msgid "" @@ -13128,15 +12742,6 @@ msgstr "" "Die folgenden Tastenkombinationen sind anwendbar, wenn das angegebene Gizmo " "aktiv ist" -#: src/slic3r/GUI/ConfigWizard.cpp:2477 -msgid "The following SLA printer models have no materials selected:" -msgstr "" -"Bei den folgenden SLA-Druckermodellen wurden keine Materialien ausgewählt:" - -#: src/slic3r/GUI/SavePresetDialog.cpp:110 -msgid "the following suffix is not allowed:" -msgstr "das folgenden Suffix ist nicht erlaubt:" - #: src/slic3r/GUI/GUI.cpp:327 msgid "The following values were substituted:" msgstr "Die folgenden Werte wurden ersetzt:" @@ -13466,6 +13071,15 @@ msgstr "" "Das ausgewählte Projekt ist nicht mehr verfügbar.\n" "Wollen Sie es aus der Liste der letzten Projekte entfernen?" +#: src/slic3r/GUI/DoubleSlider.cpp:1408 +msgid "" +"The sequential print is on.\n" +"It's impossible to apply any custom G-code for objects printing sequentually." +msgstr "" +"Der sequenzielle Druck ist eingeschaltet.\n" +"Es ist nicht möglich, einen benutzerdefinierten G-Code für Objekte " +"anzuwenden, die sequentiell gedruckt werden." + #: src/slic3r/GUI/DoubleSlider.cpp:1440 msgid "" "The sequential print is on.\n" @@ -13478,15 +13092,6 @@ msgstr "" "die sequentiell gedruckt werden.\n" "Dieser Code wird bei der G-Code-Generierung nicht verarbeitet." -#: src/slic3r/GUI/DoubleSlider.cpp:1408 -msgid "" -"The sequential print is on.\n" -"It's impossible to apply any custom G-code for objects printing sequentually." -msgstr "" -"Der sequenzielle Druck ist eingeschaltet.\n" -"Es ist nicht möglich, einen benutzerdefinierten G-Code für Objekte " -"anzuwenden, die sequentiell gedruckt werden." - #: src/slic3r/GUI/ConfigWizard.cpp:1287 msgid "The size of the object can be specified in inches" msgstr "Die Größe des Objekts kann in Zoll angegeben werden" @@ -13495,14 +13100,6 @@ msgstr "Die Größe des Objekts kann in Zoll angegeben werden" msgid "The size of the object is zero" msgstr "Die Größe des Objekts ist Null" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 -msgid "" -"The SLA archive doesn't contain any presets. Please activate some SLA " -"printer preset first before importing that SLA archive." -msgstr "" -"Das SLA-Archiv enthält keine Voreinstellungen. Bitte aktivieren Sie zunächst " -"eine SLA-Druckervoreinstellung, bevor Sie das SLA-Archiv importieren." - #: src/libslic3r/PrintConfig.cpp:3671 msgid "" "The slope of the pad wall relative to the bed plane. 90 degrees means " @@ -13525,32 +13122,6 @@ msgstr "" msgid "The speed for retractions (it only applies to the extruder motor)." msgstr "Die Einzugsgeschwindigkeit (sie betrifft nur den Extruderantrieb)." -#: src/slic3r/GUI/ConfigManipulation.cpp:82 -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 "" -"Der Spiralvasenmodus erfordert:\n" -"- einen Perimeter\n" -"- keine oberen massiven Schichten\n" -"- 0% Fülldichte\n" -"- kein Stützmaterial\n" -"- Vertikale Schalenstärke sicherstellen aktiv\n" -"- Dünne Wände erkennen nicht aktiv" - -#: src/libslic3r/Print.cpp:469 -msgid "" -"The Spiral Vase option can only be used when printing single material " -"objects." -msgstr "" -"Die Option Spiralvase kann nur beim Drucken von Objekten aus einem einzigen " -"Material verwendet werden." - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:630 msgid "The supplied name is empty. It can't be saved." msgstr "Der angegebene Name ist leer. Die Speicherung kann nicht erfolgen." @@ -13604,106 +13175,6 @@ msgstr "" "support_material_contact_distance sowohl für den oberen als auch für den " "unteren Z-Abstand verwendet." -#: src/slic3r/GUI/Tab.cpp:3005 -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 "" -"Die Reinigungsoption ist nicht verfügbar, wenn der Firmware-Einzug verwendet " -"wird.\n" -"\n" -"Soll ich sie ausschalten, um den Firmware-Einzug zu aktivieren?" - -#: src/libslic3r/Print.cpp:494 -msgid "" -"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." -msgstr "" -"Der Reinigungsturm unterstützt derzeit kein volumetrisches E " -"(use_volumetric_e=0)." - -#: src/slic3r/GUI/ConfigManipulation.cpp:121 -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 "" -"Der Reinigungsturm unterstützt derzeit nur die unlöslichen Stützen, wenn sie " -"mit dem aktuellen Extruder gedruckt werden, ohne einen Werkzeugwechsel " -"auszulösen.\n" -"(sowohl der Stützmaterial-Extruder als auch der Stützmaterial-Schnittstellen-" -"Extruder müssen auf 0 eingestellt sein)" - -#: src/libslic3r/Print.cpp:598 -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)." -msgstr "" -"Der Reinigungsturm unterstützt zur Zeit nichtlösliche Stützen nur, falls sie " -"mit dem aktuellen Extruder ohne einen Werkzeugwechsel gedruckt werden " -"(sowohl support_material_extruder wie auch " -"support_material_interface_extruder müssen auf null gesetzt werden)." - -#: src/libslic3r/Print.cpp:496 -msgid "" -"The Wipe Tower is currently not supported for multimaterial sequential " -"prints." -msgstr "" -"Der Wischturm wird derzeit nicht für sequentielle Multimaterialdrucke " -"unterstützt." - -#: src/libslic3r/Print.cpp:488 -msgid "" -"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " -"RepRapFirmware and Repetier G-code flavors." -msgstr "" -"Der Wischturm wird derzeit nur für die Varianten Marlin, RepRap/Sprinter, " -"RepRapFirmware und Repetier-G-Code unterstützt." - -#: src/libslic3r/Print.cpp:490 -msgid "" -"The Wipe Tower is currently only supported with the relative extruder " -"addressing (use_relative_e_distances=1)." -msgstr "" -"Der Wischturm wird derzeit nur mit relativer Extruder-Adressierung " -"unterstützt ((use_relative_e_distances=1)." - -#: src/libslic3r/Print.cpp:519 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"over an equal number of raft layers" -msgstr "" -"Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese mit der " -"gleichen Anzahl von Raftschichten gedruckt werden" - -#: src/libslic3r/Print.cpp:522 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"with the same support_material_contact_distance" -msgstr "" -"Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese mit der " -"gleichen support_material_contact_distance gedruckt werden" - -#: src/libslic3r/Print.cpp:524 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are sliced " -"equally." -msgstr "" -"Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese gleich " -"gesliced werden." - -#: src/libslic3r/Print.cpp:517 -msgid "" -"The Wipe Tower is only supported for multiple objects if they have equal " -"layer heights" -msgstr "" -"Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese die " -"gleiche Schichthöhe haben" - #: src/libslic3r/Print.cpp:482 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " @@ -13712,14 +13183,6 @@ msgstr "" "Der Wischturm wird nur unterstützt, wenn alle Extruder den gleichen " "Düsendurchmesser haben und Filamente mit dem gleichen Durchmesser verwenden." -#: src/libslic3r/Print.cpp:537 -msgid "" -"The Wipe tower is only supported if all objects have the same variable layer " -"height" -msgstr "" -"Der Reinigungsturm wird nur unterstützt, wenn alle Objekte die gleiche " -"variable Schichthöhe haben" - #: src/slic3r/GUI/Plater.cpp:4096 msgid "There are active warnings concerning sliced models:" msgstr "Es gibt aktive Warnungen zu gesliceten Modellen:" @@ -13772,6 +13235,18 @@ msgstr "Dicke Brücken" msgid "This %s version: %s" msgstr "Diese %s Version: %s" +#: src/libslic3r/PrintConfig.cpp:2433 +msgid "This G-code will be used as a code for the color change" +msgstr "Dieser G-Code wird als Code für den Farbwechsel verwendet" + +#: src/libslic3r/PrintConfig.cpp:2442 +msgid "This G-code will be used as a code for the pause print" +msgstr "Dieser G-Code wird als Code für die Druckpause verwendet" + +#: src/libslic3r/PrintConfig.cpp:2451 +msgid "This G-code will be used as a custom code" +msgstr "Dieser G-Code wird als benutzerdefinierter Code verwendet" + #: src/slic3r/GUI/DoubleSlider.cpp:2087 src/slic3r/GUI/Tab.cpp:1322 msgid "" "This action is not revertible.\n" @@ -14045,18 +13520,6 @@ msgstr "" "Diese Einstellung wird die Düse während dem Einzug bewegen, um mögliche " "Tropfen bei einem undichten Extruder zu minimieren." -#: src/libslic3r/PrintConfig.cpp:2433 -msgid "This G-code will be used as a code for the color change" -msgstr "Dieser G-Code wird als Code für den Farbwechsel verwendet" - -#: src/libslic3r/PrintConfig.cpp:2442 -msgid "This G-code will be used as a code for the pause print" -msgstr "Dieser G-Code wird als Code für die Druckpause verwendet" - -#: src/libslic3r/PrintConfig.cpp:2451 -msgid "This G-code will be used as a custom code" -msgstr "Dieser G-Code wird als benutzerdefinierter Code verwendet" - #: src/slic3r/GUI/Tab.cpp:1351 msgid "This is a default preset." msgstr "Dies ist eine Standard-Voreinstellung." @@ -14499,10 +13962,6 @@ msgstr "" "Werkzeugwechseln beitragen bei flexiblen Materialien, die mehr Zeit zum " "Schrumpfen auf ihre ursprüngliche Größe brauchen." -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "to" -msgstr "bis" - #: src/slic3r/GUI/Tab.cpp:1365 msgid "To do that please specify a new name for the preset." msgstr "" @@ -14539,10 +13998,6 @@ msgstr "" msgid "Toggle %c axis mirroring" msgstr "Umschalten der Spiegelung der %c-Achse" -#: src/libslic3r/miniz_extension.cpp:93 -msgid "too many files" -msgstr "zu viele Dateien" - #: src/libslic3r/SLAPrintSteps.cpp:426 msgid "Too many overlapping holes." msgstr "Zu viele überlappende Löcher." @@ -14596,6 +14051,10 @@ msgstr "" "Hinweis zur Ober-/Bodenschalestärke: Nicht verfügbar wegen ungültiger " "Schichthöhe." +#: src/slic3r/GUI/MainFrame.cpp:1118 +msgid "Top View" +msgstr "Ansicht von oben" + #: src/libslic3r/PrintConfig.cpp:2548 msgid "Top contact Z distance" msgstr "Decke Kontakt Z Abstand" @@ -14617,10 +14076,6 @@ msgstr "Oben ist offen." msgid "Top shell is %1% mm thick for layer height %2% mm." msgstr "Die obere Schale ist %1% mm stark für eine Schichthöhe von %2% mm." -#: src/slic3r/GUI/PresetHints.cpp:178 -msgid "top solid infill" -msgstr "Oberes massives Infill" - #: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:323 #: src/libslic3r/ExtrusionEntity.cpp:350 src/libslic3r/PrintConfig.cpp:2839 #: src/libslic3r/PrintConfig.cpp:2852 @@ -14631,10 +14086,6 @@ msgstr "Oberes massives Infill" msgid "Top solid layers" msgstr "Obere massive Schichten" -#: src/slic3r/GUI/MainFrame.cpp:1118 -msgid "Top View" -msgstr "Ansicht von oben" - #: src/libslic3r/PrintConfig.cpp:1550 msgid "Topmost surface only" msgstr "Nur oberste Fläche" @@ -14718,6 +14169,34 @@ msgstr "Druckertyp." msgid "Type:" msgstr "Typ:" +#: src/slic3r/GUI/Tab.cpp:4257 +msgid "UNLOCKED LOCK" +msgstr "OFFENES SCHLOSS" + +#: src/slic3r/GUI/Tab.cpp:4283 +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 "" +"Das Symbol GEÖFFNETES SCHLOSS zeigt an, dass einige Einstellungen geändert " +"wurden und nicht mehr mit den System- (oder Standard-) Werte für die " +"aktuelle Optionsgruppe identisch sind.\n" +"Klicken Sie, um alle Einstellungen für die aktuelle Optionsgruppe auf die " +"System- (oder Standard-) Werte zurückzusetzen." + +#: src/slic3r/GUI/Tab.cpp:4298 +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 "" +"Das Symbol GEÖFFNETES SCHLOSS zeigt an, dass der Wert geändert wurde und " +"nicht mit der System- (oder Standard-) Einstellung identisch ist.\n" +"Klicken Sie, um den aktuellen Wert auf die System- (oder Standard-) " +"Einstellung zurückzusetzen." + #: src/libslic3r/SLAPrintSteps.cpp:441 msgid "Unable to drill the current configuration of holes into the model." msgstr "" @@ -14763,10 +14242,6 @@ msgstr "Gruppe nicht definieren" msgid "Undefined" msgstr "Undefiniert" -#: src/libslic3r/miniz_extension.cpp:91 -msgid "undefined error" -msgstr "unbekannter Fehler" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:294 msgid "Underflow" msgstr "Unterlauf" @@ -14788,6 +14263,10 @@ msgstr[1] "Undo %1$d Aktionen" msgid "Undo / Redo is processing" msgstr "Undo / Redo arbeitet" +#: src/slic3r/GUI/GLCanvas3D.cpp:3916 +msgid "Undo History" +msgstr "Undo Verlauf" + #: src/slic3r/GUI/NotificationManager.hpp:772 msgid "Undo desktop integration failed." msgstr "Rücknahme der Desktop Integration fehlgeschlagen." @@ -14796,10 +14275,6 @@ msgstr "Rücknahme der Desktop Integration fehlgeschlagen." msgid "Undo desktop integration was successful." msgstr "Die Desktop-Integration wurde erfolgreich rückgängig gemacht." -#: src/slic3r/GUI/GLCanvas3D.cpp:3916 -msgid "Undo History" -msgstr "Undo Verlauf" - #: resources/data/hints.ini: [hint:Undo/redo history] msgid "" "Undo/redo history\n" @@ -14811,10 +14286,6 @@ msgstr "" "Pfeile klicken können, um den Änderungsverlauf zu sehen und mehrere " "Aktionen auf einmal rückgängig zu machen oder wiederherzustellen?" -#: src/libslic3r/miniz_extension.cpp:115 -msgid "unexpected decompressed size" -msgstr "unerwartete dekomprimierte Größe" - #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:28 #: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:317 msgid "Unknown" @@ -14831,10 +14302,6 @@ msgstr "Unbekannter Fehler aufgetreten" msgid "Unknown error occured during exporting G-code." msgstr "Unbekannter Fehler trat beim Exportieren von G-Code auf." -#: src/slic3r/GUI/WipeTowerDialog.cpp:308 -msgid "unloaded" -msgstr "entladen wird" - #: src/libslic3r/PrintConfig.cpp:908 msgid "Unloading speed" msgstr "Entladegeschwindigkeit" @@ -14843,34 +14310,6 @@ msgstr "Entladegeschwindigkeit" msgid "Unloading speed at the start" msgstr "Entladegeschwindigkeit zu Beginn" -#: src/slic3r/GUI/Tab.cpp:4257 -msgid "UNLOCKED LOCK" -msgstr "OFFENES SCHLOSS" - -#: src/slic3r/GUI/Tab.cpp:4283 -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 "" -"Das Symbol GEÖFFNETES SCHLOSS zeigt an, dass einige Einstellungen geändert " -"wurden und nicht mehr mit den System- (oder Standard-) Werte für die " -"aktuelle Optionsgruppe identisch sind.\n" -"Klicken Sie, um alle Einstellungen für die aktuelle Optionsgruppe auf die " -"System- (oder Standard-) Werte zurückzusetzen." - -#: src/slic3r/GUI/Tab.cpp:4298 -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 "" -"Das Symbol GEÖFFNETES SCHLOSS zeigt an, dass der Wert geändert wurde und " -"nicht mit der System- (oder Standard-) Einstellung identisch ist.\n" -"Klicken Sie, um den aktuellen Wert auf die System- (oder Standard-) " -"Einstellung zurückzusetzen." - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 msgid "Unsaved Changes" msgstr "Nicht gespeicherte Änderungen" @@ -14879,26 +14318,6 @@ msgstr "Nicht gespeicherte Änderungen" msgid "Unselect gizmo or clear selection" msgstr "Gizmo abwählen oder Auswahl löschen" -#: src/libslic3r/miniz_extension.cpp:119 -msgid "unsupported central directory size" -msgstr "nicht unterstützte zentrale Verzeichnisgröße" - -#: src/libslic3r/miniz_extension.cpp:99 -msgid "unsupported encryption" -msgstr "nicht unterstützte Verschlüsselung" - -#: src/libslic3r/miniz_extension.cpp:101 -msgid "unsupported feature" -msgstr "nicht unterstützte Funktion" - -#: src/libslic3r/miniz_extension.cpp:97 -msgid "unsupported method" -msgstr "nicht unterstützte Methode" - -#: src/libslic3r/miniz_extension.cpp:109 -msgid "unsupported multidisk archive" -msgstr "nicht unterstütztes Multidisk-Archiv" - #: src/slic3r/GUI/OpenGLManager.cpp:265 msgid "Unsupported OpenGL version" msgstr "Nicht unterstützte OpenGL Version" @@ -14912,10 +14331,6 @@ msgstr "Nicht unterstützte Auswahl" msgid "Untitled" msgstr "Unbenannt" -#: src/slic3r/GUI/GCodeViewer.cpp:3176 -msgid "up to" -msgstr "bis zu" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 msgid "Update available" msgstr "Ein Update ist verfügbar" @@ -14987,6 +14402,10 @@ msgstr "" "Verwenden Sie \"Gerade-ungerade\" für 3DLabPrint-Flugzeugmodelle. Verwenden " "Sie \"Löcher schließen\", um alle Löcher im Modell zu schließen." +#: src/slic3r/GUI/Preferences.cpp:268 +msgid "Use Retina resolution for the 3D scene" +msgstr "Verwende Retina Auflösung für die 3D Anzeige" + #: src/slic3r/GUI/DoubleSlider.cpp:1615 src/slic3r/GUI/GUI_Factories.cpp:787 msgid "Use another extruder" msgstr "Einen anderen Extruder verwenden" @@ -15039,10 +14458,6 @@ msgstr "Benutze perspektivische Kamera" msgid "Use relative E distances" msgstr "Relative Abstände für Extrusion benutzen" -#: src/slic3r/GUI/Preferences.cpp:268 -msgid "Use Retina resolution for the 3D scene" -msgstr "Verwende Retina Auflösung für die 3D Anzeige" - #: src/slic3r/GUI/Preferences.cpp:507 msgid "Use system menu for application" msgstr "Systemmenü für Anwendung verwenden" @@ -15068,15 +14483,6 @@ msgstr "" msgid "Use volumetric E" msgstr "Volumetrisches E benutzen" -#: src/slic3r/GUI/DoubleSlider.cpp:1634 -msgid "used" -msgstr "genutzt" - -#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 -#: src/slic3r/GUI/GCodeViewer.cpp:3562 -msgid "Used filament" -msgstr "Genutztes Filament" - #: src/slic3r/GUI/Plater.cpp:296 src/slic3r/GUI/Plater.cpp:1376 msgid "Used Filament (g)" msgstr "Filamentbedarf (g)" @@ -15105,6 +14511,11 @@ msgstr "Benutztes Material (ml)" msgid "Used Material (unit)" msgstr "Benutztes Material (Einheit)" +#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 +#: src/slic3r/GUI/GCodeViewer.cpp:3562 +msgid "Used filament" +msgstr "Genutztes Filament" + #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:25 src/libslic3r/PrintConfig.cpp:317 msgid "User" msgstr "Benutzer" @@ -15115,10 +14526,6 @@ msgstr "Benutzer" msgid "User presets" msgstr "Benutzerdefinierte Voreinstellungen" -#: src/libslic3r/miniz_extension.cpp:149 -msgid "validation failed" -msgstr "Überprüfung fehlgeschlagen" - #: src/slic3r/GUI/ButtonsDescription.cpp:57 msgid "Value is the same as the system value" msgstr "Der Wert ist gleich wie die Systemeinstellung" @@ -15139,6 +14546,11 @@ msgstr "Werte in dieser Spalte sind für den normalen Modus" msgid "Values in this column are for Stealth mode" msgstr "Werte in dieser Spalte sind für den Stealth Modus" +#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 +msgid "Variable layer height" +msgstr "Variable Schichthöhe" + #: resources/data/hints.ini: [hint:Variable layer height] msgid "" "Variable layer height\n" @@ -15152,11 +14564,6 @@ msgstr "" "glätten können? Versuchen Sie es mit demWerkzeug für variable " "Schichthöhen. (Nicht verfügbar für SLA-Drucker.)" -#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 -msgid "Variable layer height" -msgstr "Variable Schichthöhe" - #: src/slic3r/GUI/GLCanvas3D.cpp:1273 msgid "Variable layer height - Adaptive" msgstr "Variable Schichthöhe - Adaptiv" @@ -15173,14 +14580,6 @@ msgstr "Variable Schichthöhe - Zurücksetzen" msgid "Variable layer height - Smooth all" msgstr "Variable Schichthöhe - Alles glätten" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "variants" -msgstr "Varianten" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 -msgid "vendor" -msgstr "Hersteller" - #: src/slic3r/GUI/ConfigWizard.cpp:642 msgid "Vendor:" msgstr "Hersteller:" @@ -15194,18 +14593,14 @@ msgstr "Ausführlicher G-Code" msgid "Version" msgstr "Version" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 -msgid "version" -msgstr "Version" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 +msgid "Vertical Slider" +msgstr "Vertikaler Schieberegler" #: src/slic3r/GUI/Tab.cpp:1457 msgid "Vertical shells" msgstr "Vertikale Konturhüllen" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 -msgid "Vertical Slider" -msgstr "Vertikaler Schieberegler" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:218 #: src/slic3r/GUI/KBShortcutsDialog.cpp:222 msgid "Vertical slider - Move active thumb Down" @@ -15283,6 +14678,39 @@ msgstr "Volumetrische Flussrate (mm³/s)" msgid "Volumetric speed" msgstr "Volumengeschwindigkeit" +#: src/slic3r/GUI/NotificationManager.cpp:1459 +#: src/slic3r/GUI/NotificationManager.cpp:1486 +#: src/slic3r/GUI/NotificationManager.cpp:1494 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +msgid "WARNING:" +msgstr "WARNUNG:" + +#: src/slic3r/GUI/Tab.cpp:4264 +msgid "WHITE BULLET" +msgstr "WEISSER PUNKT" + +#: src/slic3r/GUI/Tab.cpp:4286 +msgid "WHITE BULLET icon indicates a non system (or non default) preset." +msgstr "" +"Das Symbol mit dem WEISSEN PUNKT zeigt eine Nicht-System- (oder nicht " +"standardmäßige) Voreinstellung an." + +#: src/slic3r/GUI/Tab.cpp:4289 +msgid "" +"WHITE BULLET icon indicates that the settings are the same as in the last " +"saved preset for the current option group." +msgstr "" +"Das Symbol WEISSER PUNKT zeigt an, dass die Einstellungen dieselben sind wie " +"in der zuletzt gespeicherten Voreinstellung für die aktuelle Optionsgruppe." + +#: src/slic3r/GUI/Tab.cpp:4304 +msgid "" +"WHITE BULLET icon indicates that the value is the same as in the last saved " +"preset." +msgstr "" +"Das Symbol WEISSER PUNKT zeigt an, dass der Wert identisch ist mit " +"demjenigen in der zuletzt gespeicherten Voreinstellung." + #: src/libslic3r/PrintConfig.cpp:3740 msgid "Wall thickness" msgstr "Wandstärke" @@ -15295,13 +14723,6 @@ msgstr "Wandstärke" msgid "Warning" msgstr "Warnung" -#: src/slic3r/GUI/NotificationManager.cpp:1459 -#: src/slic3r/GUI/NotificationManager.cpp:1486 -#: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 -msgid "WARNING:" -msgstr "WARNUNG:" - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:590 #, boost-format msgid "" @@ -15361,10 +14782,6 @@ msgstr "" "die Aktion auswählen können, die mit der zu ladenden Datei ausgeführt werden " "soll." -#: src/slic3r/GUI/PresetHints.cpp:192 -msgid "when printing" -msgstr "während dem Druck" - #: src/libslic3r/PrintConfig.cpp:530 msgid "" "When printing multi-material objects, this settings will make Slic3r to clip " @@ -15459,32 +14876,6 @@ msgstr "" "Extruder diese zusätzliche Menge an Filament ausgeben. Diese Einstellung " "wird selten benötigt." -#: src/slic3r/GUI/Tab.cpp:4264 -msgid "WHITE BULLET" -msgstr "WEISSER PUNKT" - -#: src/slic3r/GUI/Tab.cpp:4286 -msgid "WHITE BULLET icon indicates a non system (or non default) preset." -msgstr "" -"Das Symbol mit dem WEISSEN PUNKT zeigt eine Nicht-System- (oder nicht " -"standardmäßige) Voreinstellung an." - -#: src/slic3r/GUI/Tab.cpp:4289 -msgid "" -"WHITE BULLET icon indicates that the settings are the same as in the last " -"saved preset for the current option group." -msgstr "" -"Das Symbol WEISSER PUNKT zeigt an, dass die Einstellungen dieselben sind wie " -"in der zuletzt gespeicherten Voreinstellung für die aktuelle Optionsgruppe." - -#: src/slic3r/GUI/Tab.cpp:4304 -msgid "" -"WHITE BULLET icon indicates that the value is the same as in the last saved " -"preset." -msgstr "" -"Das Symbol WEISSER PUNKT zeigt an, dass der Wert identisch ist mit " -"demjenigen in der zuletzt gespeicherten Voreinstellung." - #: src/slic3r/GUI/Tab.cpp:3999 msgid "Whole word" msgstr "Ganzes Wort" @@ -15530,6 +14921,11 @@ msgstr "" msgid "Wipe" msgstr "Reinigen" +#: src/slic3r/GUI/ConfigManipulation.cpp:126 +#: src/slic3r/GUI/ConfigManipulation.cpp:146 +msgid "Wipe Tower" +msgstr "Reinigungsturm" + #: src/libslic3r/PrintConfig.cpp:3013 msgid "Wipe into this object" msgstr "Dieses Objekt zum Reinigen verwenden" @@ -15548,15 +14944,6 @@ msgstr "Wischoptionen" msgid "Wipe tower" msgstr "Reinigungsturm" -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "wipe tower" -msgstr "Reinigungsturm" - -#: src/slic3r/GUI/ConfigManipulation.cpp:126 -#: src/slic3r/GUI/ConfigManipulation.cpp:146 -msgid "Wipe Tower" -msgstr "Reinigungsturm" - #: src/slic3r/GUI/WipeTowerDialog.cpp:173 msgid "Wipe tower - Purging volume adjustment" msgstr "Reinigungsturm - Anpassung des Reinigungsvolumens" @@ -15581,10 +14968,6 @@ msgstr "Rotationswinkel des Reinigungsturms bezogen auf die X-Achse." msgid "Wipe while retracting" msgstr "Während Einzug reinigen" -#: src/slic3r/GUI/PresetHints.cpp:193 -msgid "with a volumetric rate" -msgstr "mit einer Volumenrate von" - #: src/libslic3r/PrintConfig.cpp:2122 msgid "" "With bowden extruders, it may be wise to do some amount of quick retract " @@ -15635,10 +15018,6 @@ msgstr "" "\n" "Aktualisierte Konfigurationssammlungen:" -#: src/libslic3r/miniz_extension.cpp:151 -msgid "write calledback failed" -msgstr "Schreibabruf fehlgeschlagen" - #: src/libslic3r/PrintConfig.cpp:4306 msgid "Write information about the model to the console." msgstr "Schreibt Informationen über das Modell auf die Konsole." @@ -15651,6 +15030,10 @@ msgstr "Ungültiges Kennwort" msgid "X coordinate of the left front corner of a wipe tower" msgstr "X-Koordinate der linken vorderen Ecke des Reinigungsturms" +#: src/libslic3r/PrintConfig.cpp:3027 +msgid "XY Size Compensation" +msgstr "XY-Größenausgleich" + #: src/libslic3r/PrintConfig.cpp:2517 msgid "XY separation between an object and its support" msgstr "XY-Abstand zwischen einem Objekt und seinen Stützen" @@ -15664,10 +15047,6 @@ msgstr "" "angegeben (z.B. 50%), wird der Abstand von der Breite der Außenkontur " "ausgehend berechnet." -#: src/libslic3r/PrintConfig.cpp:3027 -msgid "XY Size Compensation" -msgstr "XY-Größenausgleich" - #: src/libslic3r/PrintConfig.cpp:2976 msgid "Y coordinate of the left front corner of a wipe tower" msgstr "Y-Koordinate der linken vorderen Ecke des Reinigungsturms" @@ -15730,6 +15109,10 @@ msgstr "" "Sie können hier Ihre persönlichen Notizen eingeben. Der Text wird dem " "Header vom G-Code hinzugefügt." +#: src/libslic3r/PrintConfig.cpp:3383 +msgid "You can put your notes regarding the SLA print material here." +msgstr "Sie können Ihre Notizen zum SLA Druckmaterial hier eingeben." + #: src/libslic3r/PrintConfig.cpp:874 msgid "You can put your notes regarding the filament here." msgstr "Sie können Ihre Notizen zum Filament hier eingeben." @@ -15738,10 +15121,6 @@ msgstr "Sie können Ihre Notizen zum Filament hier eingeben." msgid "You can put your notes regarding the printer here." msgstr "Sie können Ihre Bemerkungen zum Drucker hier eingeben." -#: src/libslic3r/PrintConfig.cpp:3383 -msgid "You can put your notes regarding the SLA print material here." -msgstr "Sie können Ihre Notizen zum SLA Druckmaterial hier eingeben." - #: src/libslic3r/PrintConfig.cpp:637 msgid "" "You can set this to a positive value to disable fan at all during the first " @@ -15979,6 +15358,623 @@ msgstr "" "Auf ausgewähltes Objekt zoomen\n" "oder alle Objekte in der Szene, wenn keines ausgewählt ist" +#: src/slic3r/GUI/GCodeViewer.cpp:3182 +msgid "above" +msgstr "über" + +#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 +msgid "active" +msgstr "aktiv" + +#: src/libslic3r/miniz_extension.cpp:121 +msgid "allocation failed" +msgstr "Allokation fehlgeschlagen" + +#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 +msgid "approximate seconds" +msgstr "ungefähre Sekunden" + +#: src/libslic3r/miniz_extension.cpp:147 +msgid "archive is too large" +msgstr "Archiv ist zu groß" + +#: src/slic3r/GUI/MainFrame.cpp:655 +msgid "based on Slic3r" +msgstr "basiert auf Slic3r" + +#: src/libslic3r/miniz_extension.cpp:141 +msgid "buffer too small" +msgstr "Puffer zu klein" + +#: src/slic3r/GUI/PresetHints.cpp:191 +msgid "by the print profile maximum" +msgstr "mit dem Maximum des Druckerprofils" + +#: src/libslic3r/miniz_extension.cpp:113 +msgid "compression failed" +msgstr "Komprimierung fehlgeschlagen" + +#: src/slic3r/GUI/DoubleSlider.cpp:1458 +msgid "continue" +msgstr "weiter" + +#: src/libslic3r/miniz_extension.cpp:111 +msgid "decompression failed or archive is corrupted" +msgstr "Entpacken fehlgeschlagen oder Archiv defekt" + +#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 +#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 +msgid "default" +msgstr "Standard" + +#: src/slic3r/GUI/Tab.cpp:1400 +msgid "default SLA material profile" +msgstr "Standard-SLA-Materialprofil" + +#: src/slic3r/GUI/Tab.cpp:1404 +msgid "default SLA print profile" +msgstr "Standard-SLA-Druckprofil" + +#: src/slic3r/GUI/GCodeViewer.cpp:3388 +msgid "default color" +msgstr "Standardfarbe" + +#: src/slic3r/GUI/Tab.cpp:1386 +msgid "default filament profile" +msgstr "Standard-Filamentprofil" + +#: src/slic3r/GUI/Tab.cpp:1383 +msgid "default print profile" +msgstr "Standard-Druckprofil" + +#: src/slic3r/GUI/Field.cpp:190 +msgid "default value" +msgstr "Standardwert" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "delete" +msgstr "löschen" + +#: src/slic3r/GUI/Plater.cpp:3652 +msgid "differs from the original file" +msgstr "weicht von der Originaldatei ab" + +#: src/slic3r/GUI/Plater.cpp:5202 +msgid "does not contain valid gcode." +msgstr "enthält keinen gültigen G-Code." + +#: src/slic3r/GUI/PresetHints.cpp:59 +#, boost-format +msgid "except for the first %1% layers." +msgstr "außer für die ersten %1% Schichten." + +#: src/slic3r/GUI/PresetHints.cpp:61 +msgid "except for the first layer." +msgstr "außer für die erste Schicht." + +#: src/slic3r/GUI/PresetHints.cpp:170 +msgid "external perimeters" +msgstr "Außenkonturen" + +#: src/libslic3r/miniz_extension.cpp:103 +msgid "failed finding central directory" +msgstr "Zentrales Verzeichnis nicht gefunden" + +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +msgid "filament" +msgstr "Filament" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 +msgid "filaments" +msgstr "Filamente" + +#: src/libslic3r/miniz_extension.cpp:131 +msgid "file close failed" +msgstr "Dateischließen fehlgeschlagen" + +#: src/libslic3r/miniz_extension.cpp:125 +msgid "file create failed" +msgstr "Dateierzeugen fehlgeschlagen" + +#: src/libslic3r/miniz_extension.cpp:145 +msgid "file not found" +msgstr "Datei nicht gefunden" + +#: src/libslic3r/miniz_extension.cpp:123 +msgid "file open failed" +msgstr "Öffnen der Datei fehlgeschlagen" + +#: src/libslic3r/miniz_extension.cpp:129 +msgid "file read failed" +msgstr "Dateilesen fehlgeschlagen" + +#: src/libslic3r/miniz_extension.cpp:133 +msgid "file seek failed" +msgstr "Dateizugriff fehlgeschlagen" + +#: src/libslic3r/miniz_extension.cpp:135 +msgid "file stat failed" +msgstr "Zugriff auf Dateieigenschaften fehlgeschlagen" + +#: src/libslic3r/miniz_extension.cpp:95 +msgid "file too large" +msgstr "Datei zu groß" + +#: src/libslic3r/miniz_extension.cpp:127 +msgid "file write failed" +msgstr "Schreiben der Datei fehlgeschlagen" + +#: src/slic3r/GUI/PresetHints.cpp:188 +msgid "flow rate is maximized" +msgstr "die Durchflussmenge ist am Maximum" + +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:4266 +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/GCodeViewer.cpp:3190 +msgid "from" +msgstr "von" + +#: src/slic3r/GUI/Tab.cpp:1412 +msgid "full profile name" +msgstr "vollständiger Profilname" + +#: src/libslic3r/PrintConfig.cpp:1057 +msgid "g" +msgstr "g" + +#: src/libslic3r/PrintConfig.cpp:1006 +msgid "g/cm³" +msgstr "g/cm³" + +#: src/libslic3r/PrintConfig.cpp:3288 +msgid "g/ml" +msgstr "g/ml" + +#: src/slic3r/GUI/Plater.cpp:4107 +msgid "generated warnings" +msgstr "erzeugte Warnungen" + +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +msgid "in" +msgstr "in" + +#. TRN Description for "UNLOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4259 +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 "" +"zeigt an, dass einige Einstellungen geändert wurden und nicht mit den " +"System- (oder Standard-) Werten für die aktuelle Optionsgruppe " +"übereinstimmen.\n" +"Klicken Sie auf das Symbol GEÖFFNETES SCHLOSS, um alle Einstellungen für die " +"aktuelle Optionsgruppe auf die System- (oder Standard-) Werte zurückzusetzen." + +#. TRN Description for "LOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4255 +msgid "" +"indicates that the settings are the same as the system (or default) values " +"for the current option group" +msgstr "" +"zeigt an, dass die Einstellungen mit den System- (oder Standard-) Werten für " +"die aktuelle Optionsgruppe übereinstimmen" + +#. TRN Description for "BACK ARROW" +#: src/slic3r/GUI/Tab.cpp:4271 +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" +"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/PresetHints.cpp:174 +msgid "infill" +msgstr "Infill" + +#: src/libslic3r/miniz_extension.cpp:143 +msgid "internal error" +msgstr "interner Fehler" + +#: src/libslic3r/miniz_extension.cpp:139 +msgid "invalid filename" +msgstr "ungültiger Dateiname" + +#: src/libslic3r/miniz_extension.cpp:107 +msgid "invalid header or archive is corrupted" +msgstr "ungültiger Dateiheader oder Archiv ist beschädigt" + +#: src/libslic3r/miniz_extension.cpp:137 +msgid "invalid parameter" +msgstr "ungültiger Parameter" + +#: src/slic3r/GUI/GUI_App.cpp:266 +msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." +msgstr "basiert auf Slic3r von Alessandro Ranellucci und der RepRap Community." + +#. TRN "Slic3r _is licensed under the_ License" +#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 +msgid "is licensed under the" +msgstr "ist unter der Lizenz der" + +#: src/libslic3r/PrintConfig.cpp:3281 +msgid "kg" +msgstr "kg" + +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 +#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 +#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 +#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 +#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 +msgid "layers" +msgstr "Schichten" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:309 +msgid "loaded" +msgstr "geladen wird" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 +msgid "max PrusaSlicer version" +msgstr "max PrusaSlicer Version" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 +msgid "min PrusaSlicer version" +msgstr "min PrusaSlicer Version" + +#: src/libslic3r/PrintConfig.cpp:3274 +msgid "ml" +msgstr "ml" + +#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 +#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 +#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 +#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 +#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 +#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 +#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 +#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 +#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 +#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 +#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 +#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 +#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 +#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 +#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 +#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 +#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 +#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 +#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 +#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 +#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 +#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 +#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 +#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 +#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 +#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 +#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 +#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 +#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 +#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 +#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 +#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 +#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 +#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 +#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 +#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 +#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 +#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 +#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 +#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 +#: src/libslic3r/PrintConfig.cpp:3767 +msgid "mm" +msgstr "mm" + +#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 +#: src/libslic3r/PrintConfig.cpp:2148 +msgid "mm (zero to disable)" +msgstr "mm (Null zum Deaktivieren)" + +#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 +#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 +#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 +#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 +#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 +#: src/libslic3r/PrintConfig.cpp:2845 +msgid "mm or %" +msgstr "mm oder %" + +#: src/libslic3r/PrintConfig.cpp:385 +msgid "mm or % (zero to disable)" +msgstr "mm oder % (Null zum Deaktivieren)" + +#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 +#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 +#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 +#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 +#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 +#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 +#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 +#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 +#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 +#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 +#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 +msgid "mm/s" +msgstr "mm/s" + +#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 +#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 +#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 +#: src/libslic3r/PrintConfig.cpp:2859 +msgid "mm/s or %" +msgstr "mm/s oder %" + +#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 +#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 +#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 +#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 +#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 +msgid "mm/s²" +msgstr "mm/s²" + +#: src/libslic3r/PrintConfig.cpp:2316 +msgid "mm²" +msgstr "mm²" + +#: src/libslic3r/PrintConfig.cpp:957 +msgid "mm³" +msgstr "mm³" + +#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 +#: src/libslic3r/PrintConfig.cpp:1782 +msgid "mm³/s" +msgstr "mm³/s" + +#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 +msgid "mm³/s²" +msgstr "mm³/s²" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "model" +msgstr "Modell" + +#: src/slic3r/GUI/GUI_App.cpp:2159 +msgid "modified" +msgstr "geändert" + +#: src/libslic3r/PrintConfig.cpp:3295 +msgid "money/bottle" +msgstr "Kosten/Flasche" + +#: src/libslic3r/PrintConfig.cpp:1047 +msgid "money/kg" +msgstr "Kosten/kg" + +#: src/slic3r/GUI/Plater.cpp:1428 +msgid "normal mode" +msgstr "Normaler Modus" + +#: src/libslic3r/miniz_extension.cpp:105 +msgid "not a ZIP archive" +msgstr "kein ZIP Archiv" + +#: src/slic3r/GUI/ConfigWizard.cpp:262 +msgid "nozzle" +msgstr "Düse" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "object" +msgid_plural "objects" +msgstr[0] "Objekt" +msgstr[1] "Objekte" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "objects" +msgstr "Objekte" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 +msgid "of a current Object" +msgstr "des aktuellen Objekts" + +#: src/slic3r/GUI/DoubleSlider.cpp:1431 +msgid "or press \"+\" key" +msgstr "oder drücken Sie die Taste \"+\"" + +#: src/slic3r/GUI/Field.cpp:193 +msgid "parameter name" +msgstr "Parametername" + +#: src/slic3r/GUI/PresetHints.cpp:171 +msgid "perimeters" +msgstr "Außenkonturen" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +msgid "print" +msgstr "Druck" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +msgid "printer" +msgstr "Drucker" + +#: src/slic3r/GUI/Tab.cpp:1375 +msgid "printer model" +msgstr "Druckermodell" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "remove" +msgstr "Entfernen" + +#: src/slic3r/Utils/PresetUpdater.cpp:815 +#, c-format, boost-format +msgid "requires max. %s" +msgstr "benötigt max. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:812 +#, c-format, boost-format +msgid "requires min. %s" +msgstr "benötigt min. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:808 +#, c-format, boost-format +msgid "requires min. %s and max. %s" +msgstr "benötigt min. %s und max. %s" + +#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 +#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 +#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 +#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 +#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 +#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 +#: src/libslic3r/PrintConfig.cpp:3349 +msgid "s" +msgstr "s" + +#: src/slic3r/GUI/PresetHints.cpp:176 +msgid "solid infill" +msgstr "Massives Infill" + +#: src/slic3r/GUI/Plater.cpp:1435 +msgid "stealth mode" +msgstr "Stealth Modus" + +#: src/slic3r/GUI/PresetHints.cpp:181 +msgid "support" +msgstr "Stützen" + +#: src/slic3r/GUI/PresetHints.cpp:183 +msgid "support interface" +msgstr "Schnittstelle zu den Stützen" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "supports and pad" +msgstr "Stützen und Grundschicht" + +#: src/slic3r/GUI/Tab.cpp:1413 +msgid "symbolic profile name" +msgstr "symbolischer Profilname" + +#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 +msgid "the following characters are not allowed:" +msgstr "die folgenden Zeichen sind nicht erlaubt:" + +#: src/slic3r/GUI/SavePresetDialog.cpp:110 +msgid "the following suffix is not allowed:" +msgstr "das folgenden Suffix ist nicht erlaubt:" + +#: src/slic3r/GUI/GCodeViewer.cpp:3190 +msgid "to" +msgstr "bis" + +#: src/libslic3r/miniz_extension.cpp:93 +msgid "too many files" +msgstr "zu viele Dateien" + +#: src/slic3r/GUI/PresetHints.cpp:178 +msgid "top solid infill" +msgstr "Oberes massives Infill" + +#: src/libslic3r/miniz_extension.cpp:91 +msgid "undefined error" +msgstr "unbekannter Fehler" + +#: src/libslic3r/miniz_extension.cpp:115 +msgid "unexpected decompressed size" +msgstr "unerwartete dekomprimierte Größe" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:308 +msgid "unloaded" +msgstr "entladen wird" + +#: src/libslic3r/miniz_extension.cpp:119 +msgid "unsupported central directory size" +msgstr "nicht unterstützte zentrale Verzeichnisgröße" + +#: src/libslic3r/miniz_extension.cpp:99 +msgid "unsupported encryption" +msgstr "nicht unterstützte Verschlüsselung" + +#: src/libslic3r/miniz_extension.cpp:101 +msgid "unsupported feature" +msgstr "nicht unterstützte Funktion" + +#: src/libslic3r/miniz_extension.cpp:97 +msgid "unsupported method" +msgstr "nicht unterstützte Methode" + +#: src/libslic3r/miniz_extension.cpp:109 +msgid "unsupported multidisk archive" +msgstr "nicht unterstütztes Multidisk-Archiv" + +#: src/slic3r/GUI/GCodeViewer.cpp:3176 +msgid "up to" +msgstr "bis zu" + +#: src/slic3r/GUI/DoubleSlider.cpp:1634 +msgid "used" +msgstr "genutzt" + +#: src/libslic3r/miniz_extension.cpp:149 +msgid "validation failed" +msgstr "Überprüfung fehlgeschlagen" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "variants" +msgstr "Varianten" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 +msgid "vendor" +msgstr "Hersteller" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 +msgid "version" +msgstr "Version" + +#: src/slic3r/GUI/PresetHints.cpp:192 +msgid "when printing" +msgstr "während dem Druck" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "wipe tower" +msgstr "Reinigungsturm" + +#: src/slic3r/GUI/PresetHints.cpp:193 +msgid "with a volumetric rate" +msgstr "mit einer Volumenrate von" + +#: src/libslic3r/miniz_extension.cpp:151 +msgid "write calledback failed" +msgstr "Schreibabruf fehlgeschlagen" + #: src/libslic3r/PrintConfig.cpp:456 src/libslic3r/PrintConfig.cpp:1075 #: src/libslic3r/PrintConfig.cpp:2232 src/libslic3r/PrintConfig.cpp:2242 #: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2774 @@ -17139,6 +17135,10 @@ msgstr "AddToPropertyCollection aufgerufen ohne gültigen adder" msgid "Adding book %s" msgstr "Buch %s wird hinzugefügt" +#: ../src/common/preferencescmn.cpp:43 +msgid "Advanced" +msgstr "Erweitert" + #: ../src/richtext/richtextliststylepage.cpp:435 msgid "After a paragraph:" msgstr "Nach einem Absatz:" @@ -17406,6 +17406,10 @@ msgstr "Rahmen" msgid "Borders" msgstr "Rahmen" +#: ../src/richtext/richtextsizepage.cpp:288 ../src/common/stockitem.cpp:144 +msgid "Bottom" +msgstr "Unten" + #: ../src/generic/prntdlgg.cpp:893 msgid "Bottom margin (mm):" msgstr "Unterer Rand (mm)" @@ -18225,6 +18229,10 @@ msgstr "In Zwischenablage kopiert:„%s“" msgid "Copies:" msgstr "Kopien:" +#: ../src/common/stockitem.cpp:150 ../src/stc/stc_i18n.cpp:18 +msgid "Copy" +msgstr "Kopieren" + #: ../src/common/stockitem.cpp:258 msgid "Copy selection" msgstr "Auswahl kopieren" diff --git a/resources/localization/en/PrusaSlicer_en.po b/resources/localization/en/PrusaSlicer_en.po index 23e8b93b8..c70eeaf39 100644 --- a/resources/localization/en/PrusaSlicer_en.po +++ b/resources/localization/en/PrusaSlicer_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -543,7 +543,7 @@ msgstr "" msgid "PrusaSlicer version" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "" @@ -551,17 +551,17 @@ msgstr "" msgid "filaments" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "" @@ -620,7 +620,7 @@ msgstr "" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "" @@ -705,7 +705,7 @@ msgstr "" msgid "All installed printers are compatible with the selected %1%." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "" @@ -794,7 +794,7 @@ msgstr "" "an update is applied." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "" @@ -1080,7 +1080,7 @@ msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "" @@ -1144,7 +1144,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "" @@ -1591,8 +1591,8 @@ msgid "parameter name" msgstr "" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "" @@ -1780,7 +1780,7 @@ msgstr "" msgid "Add selected shape(s) to the bed" msgstr "" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "" @@ -1982,7 +1982,7 @@ msgid "Wipe" msgstr "" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "" @@ -2251,7 +2251,7 @@ msgid "Add..." msgstr "" #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "" @@ -3127,25 +3127,25 @@ msgstr "" msgid "Internal error: %1%" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " "not be affected." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3157,7 +3157,7 @@ msgid "" "configuration." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3166,19 +3166,19 @@ msgid "" "Shall this configuration be imported?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3188,53 +3188,53 @@ msgid "" "Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" "Do you want to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3247,291 +3247,291 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" "Settings will be available in physical printers settings." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" "Note: This name can be changed later from the physical printers settings" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to changes your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "" @@ -3637,7 +3637,7 @@ msgstr "" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3647,7 +3647,7 @@ msgid "Advanced" msgstr "" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3661,8 +3661,8 @@ msgid "Supports" msgstr "" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3672,8 +3672,8 @@ msgstr "" msgid "Pad" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -3776,7 +3776,7 @@ msgstr "" msgid "Reload the selected volumes from disk" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "" @@ -3802,19 +3802,19 @@ msgstr "" msgid "Scale the selected object to fit the print volume" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "" @@ -4075,7 +4075,7 @@ msgstr "" msgid "Loading" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "" @@ -4494,7 +4494,7 @@ msgstr "" msgid "Delete Option %s" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "" @@ -4613,18 +4613,18 @@ msgstr "" msgid "Legend/Estimated printing time" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "" @@ -4784,11 +4784,11 @@ msgid "" "presets were used as fallback." msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "" @@ -4829,11 +4829,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "" @@ -5214,7 +5214,7 @@ msgstr "" msgid "Show/Hide G-code window" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "" @@ -5326,29 +5326,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "" #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "" @@ -5858,7 +5858,7 @@ msgid "Open New Instance" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "" @@ -5967,9 +5967,9 @@ msgstr "" msgid "Save zip file as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "" @@ -6230,7 +6230,7 @@ msgstr "" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "" @@ -6256,8 +6256,8 @@ msgstr "" msgid "Instance %d" msgstr "" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "" @@ -6513,12 +6513,12 @@ msgstr "" msgid "Around object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "" @@ -6625,7 +6625,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "" @@ -6633,7 +6633,7 @@ msgstr "" msgid "Expand sidebar" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6643,12 +6643,12 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -6659,11 +6659,11 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -6676,15 +6676,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -6697,180 +6697,180 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 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:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-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:2648 +#: src/slic3r/GUI/Plater.cpp:2660 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:2767 +#: src/slic3r/GUI/Plater.cpp:2779 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:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -6878,171 +6878,171 @@ msgid "" "printer technology." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" "Note, if changes will be saved then new project wouldn't keep them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." msgstr "" -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "" @@ -7159,7 +7159,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7173,7 +7173,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7184,7 +7184,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -7687,11 +7687,11 @@ msgstr "" msgid "Upload to Printer Host with the following filename:" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "" @@ -7700,18 +7700,18 @@ msgstr "" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "" @@ -8147,7 +8147,7 @@ msgstr "" msgid "symbolic profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "" @@ -8231,11 +8231,11 @@ msgstr "" msgid "Flow" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "" @@ -8247,11 +8247,11 @@ msgstr "" msgid "Extruder clearance" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "" @@ -8259,19 +8259,20 @@ msgstr "" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "" @@ -8346,7 +8347,7 @@ msgid "Ramming settings" msgstr "" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "" @@ -8384,8 +8385,8 @@ msgstr "" msgid "Size and coordinates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "" @@ -8450,11 +8451,11 @@ msgstr "" msgid "Tilt time" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "" @@ -8609,69 +8610,73 @@ msgstr "" msgid "%1% Preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " "apply a different set of machine limits." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 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:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -8679,23 +8684,23 @@ msgid "" "to the system (or default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 msgid "" "for the left button: indicates a non-system (or non-default) preset,\n" "for the right button: indicates that the settings hasn't been modified." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -8703,13 +8708,13 @@ msgid "" "to the last saved preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 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:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -8717,17 +8722,17 @@ msgid "" "default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "WHITE BULLET icon indicates a non-system (or non-default) preset." -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 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:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -8735,253 +8740,254 @@ msgid "" "preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 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:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 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 "" -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" "To enable \"%1%\", please switch off \"%2%\"" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 -msgid "" -"You will not be asked about the unsaved changes in presets the next time you " -"create new project" -msgstr "" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " -"switch a preset" +"create new project" msgstr "" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" +"You will not be asked about the unsaved changes in presets the next time you " +"switch a preset" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 +msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" "- Closing PrusaSlicer while some presets are modified,\n" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to be asked about unsaved changes again." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 -#, boost-format -msgid "Save the selected options to preset \"%1%\"." -msgstr "" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format +msgid "Save the selected options to preset \"%1%\"." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 +#, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "" @@ -9743,116 +9749,116 @@ msgstr "" msgid "write calledback failed" msgstr "" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "" -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "" -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "" -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "" -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " "\"complete_objects\"." msgstr "" -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." msgstr "" -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." msgstr "" -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." msgstr "" -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" msgstr "" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" msgstr "" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" msgstr "" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." msgstr "" -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" msgstr "" -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "" "One or more objects were assigned an extruder that the printer does not have." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -9860,13 +9866,13 @@ msgid "" "same diameter." msgstr "" -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." msgstr "" -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -9874,27 +9880,46 @@ msgid "" "set to 0)." msgstr "" -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "" diff --git a/resources/localization/es/PrusaSlicer.mo b/resources/localization/es/PrusaSlicer.mo index 354de3a95..69f4dba57 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 5ee9598d9..2504c4542 100644 --- a/resources/localization/es/PrusaSlicer_es.po +++ b/resources/localization/es/PrusaSlicer_es.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: Phrase (phrase.com)\n" +"X-Generator: Prusalator\n" #: src/slic3r/GUI/Tab.cpp:4707 #, boost-format @@ -16,6 +16,22 @@ msgstr "" "\"%1%\" está desactivado porque \"%2%\" está en la categoría \"%3%\".\n" "Para activar \"%1%\", por favor desactiva \"%2%\"" +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" +"Se encontró \"G92 E0\" en before_layer_gcode, que es incompatible con el " +"direccionamiento absoluto del extrusor." + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" +"Se encontró \"G92 E0\" en layer_gcode, que es incompatible con el " +"direccionamiento absoluto del extrusor." + #: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:1087 #: src/libslic3r/PrintConfig.cpp:1559 src/libslic3r/PrintConfig.cpp:1751 #: src/libslic3r/PrintConfig.cpp:1814 src/libslic3r/PrintConfig.cpp:2065 @@ -31,6 +47,13 @@ msgid_plural "%1$d backward edges" msgstr[0] "%1$d borde de retroceso" msgstr[1] "%1$d bordes de retroceso" +#: src/slic3r/GUI/GUI_ObjectList.cpp:415 +#, c-format, boost-format +msgid "%1$d degenerate facet" +msgid_plural "%1$d degenerate facets" +msgstr[0] "%1$d faceta degenerada" +msgstr[1] "%1$d facetas degeneradas" + #: src/slic3r/GUI/GUI_ObjectList.cpp:417 #, c-format, boost-format msgid "%1$d edge fixed" @@ -101,6 +124,12 @@ msgid_plural "%1% (%2$d shells)" msgstr[0] "%1% (%2$d carcasa)" msgstr[1] "%1% (%2$d carcasas)" +#. TRN Remove/Delete +#: src/slic3r/GUI/Tab.cpp:3736 +#, boost-format +msgid "%1% Preset" +msgstr "%1% Preset" + #: src/slic3r/GUI/ConfigWizard.cpp:752 #, boost-format msgid "" @@ -110,12 +139,6 @@ msgstr "" "%1% marcados con un * no son compatible con algunas de las " "impresoras instaladas." -#. TRN Remove/Delete -#: src/slic3r/GUI/Tab.cpp:3736 -#, boost-format -msgid "%1% Preset" -msgstr "%1% Preset" - #: src/slic3r/GUI/GUI.cpp:317 #, boost-format msgid "%1% was substituted with %2%" @@ -176,6 +199,16 @@ msgstr "%s - CAMBIO IMPORTANTE" msgid "%s - Drop project file" msgstr "%s - Soltar archivo de proyecto" +#: src/slic3r/GUI/ConfigWizard.cpp:550 +#, c-format, boost-format +msgid "%s Family" +msgstr "%s Familia" + +#: src/slic3r/GUI/GUI_App.cpp:2245 +#, c-format, boost-format +msgid "%s View Mode" +msgstr "%s Tipo de vista" + #: src/slic3r/GUI/UpdateDialogs.cpp:213 #, c-format, boost-format msgid "%s configuration is incompatible" @@ -191,11 +224,6 @@ msgstr "%s no permite porcentajes" msgid "%s error" msgstr "%s error" -#: src/slic3r/GUI/ConfigWizard.cpp:550 -#, c-format, boost-format -msgid "%s Family" -msgstr "%s Familia" - #: src/slic3r/GUI/MsgDialog.cpp:233 #, c-format, boost-format msgid "%s has a warning" @@ -206,6 +234,17 @@ msgstr "%s tiene un aviso" msgid "%s has encountered an error" msgstr "%s ha ocurrido un error" +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 +#, c-format, boost-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/GUI_App.cpp:698 #, c-format, boost-format msgid "" @@ -221,17 +260,6 @@ msgstr "" "\n" "La aplicación se cerrará." -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 -#, c-format, boost-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:304 #, c-format, boost-format msgid "%s has no configuration updates available." @@ -279,11 +307,6 @@ msgstr "" "Por 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:2245 -#, c-format, boost-format -msgid "%s View Mode" -msgstr "%s Tipo de vista" - #: src/slic3r/GUI/MsgDialog.cpp:232 #, c-format, boost-format msgid "%s warning" @@ -436,22 +459,14 @@ msgstr "&Ventana" msgid "(All)" msgstr "(Todo)" -#: src/slic3r/GUI/Plater.cpp:1401 -msgid "(including spool)" -msgstr "(incluyendo la bobina)" - -#: src/libslic3r/PrintConfig.cpp:1985 -msgid "(minimum)" -msgstr "(mínimo)" +#: src/slic3r/GUI/MainFrame.cpp:1293 +msgid "(Re)Slice No&w" +msgstr "(Re)Laminar A&hora" #: src/slic3r/GUI/KBShortcutsDialog.cpp:81 msgid "(Re)slice" msgstr "(Re)laminar" -#: src/slic3r/GUI/MainFrame.cpp:1293 -msgid "(Re)Slice No&w" -msgstr "(Re)Laminar A&hora" - #: src/libslic3r/GCode.cpp:573 msgid "(Some lines not shown)" msgstr "(Algunas líneas no se muestran)" @@ -460,6 +475,14 @@ msgstr "(Algunas líneas no se muestran)" msgid "(Unknown)" msgstr "(Desconocido)" +#: src/slic3r/GUI/Plater.cpp:1401 +msgid "(including spool)" +msgstr "(incluyendo la bobina)" + +#: src/libslic3r/PrintConfig.cpp:1985 +msgid "(minimum)" +msgstr "(mínimo)" + #: src/slic3r/GUI/MainFrame.cpp:1625 msgid ") not found." msgstr ") no encontrado." @@ -520,10 +543,6 @@ msgstr "3 (pesado)" msgid "3&D" msgstr "3&D" -#: src/slic3r/GUI/Plater.cpp:4438 -msgid "3D editor view" -msgstr "Vista editor 3D" - #: src/libslic3r/PrintConfig.cpp:1153 msgid "3D Honeycomb" msgstr "Panal de abeja 3D" @@ -532,6 +551,10 @@ msgstr "Panal de abeja 3D" msgid "3D Mouse disconnected." msgstr "Ratón 3D desconectado." +#: src/slic3r/GUI/Plater.cpp:4438 +msgid "3D editor view" +msgstr "Vista editor 3D" + #: src/slic3r/GUI/Mouse3DController.cpp:453 msgid "3Dconnexion settings" msgstr "Ajustes 3Dconnexion" @@ -572,10 +595,6 @@ msgstr "" "Se creará una copia del preajuste del sistema actual, que se separará del " "preajuste del sistema." -#: src/slic3r/GUI/ConfigWizard.cpp:2717 -msgid "A new filament was installed and it will be activated." -msgstr "Un nuevo filamento se instaló y se activará." - #: src/slic3r/GUI/ConfigWizard.cpp:2691 msgid "A new Printer was installed and it will be activated." msgstr "Una nueva Impresora se instaló y se activará." @@ -584,6 +603,10 @@ msgstr "Una nueva Impresora se instaló y se activará." msgid "A new SLA material was installed and it will be activated." msgstr "Un nuevo material SLA se instaló y se activará." +#: src/slic3r/GUI/ConfigWizard.cpp:2717 +msgid "A new filament was installed and it will be activated." +msgstr "Un nuevo filamento se instaló y se activará." + #: src/slic3r/GUI/ConfigWizard.cpp:2596 msgid "A new vendor was installed and one of its printers will be activated" msgid_plural "" @@ -619,6 +642,14 @@ msgstr "" msgid "A toolpath outside the print area was detected." msgstr "Ha sido detectada una trayectoria fuera del área de impresión." +#: src/libslic3r/PrintConfig.cpp:291 +msgid "API Key / Password" +msgstr "Clave API / Contraseña" + +#: src/libslic3r/PrintConfig.cpp:351 +msgid "API key" +msgstr "Clave API" + #: src/slic3r/Config/Snapshot.cpp:601 msgid "Abort" msgstr "Abortar" @@ -628,10 +659,6 @@ msgstr "Abortar" msgid "About %s" msgstr "Acerca de %s" -#: src/slic3r/GUI/GCodeViewer.cpp:3182 -msgid "above" -msgstr "sobre" - #: src/libslic3r/PrintConfig.cpp:2161 msgid "Above Z" msgstr "Encima de Z" @@ -664,10 +691,6 @@ msgstr "Activar" msgid "Active" msgstr "Activo" -#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 -msgid "active" -msgstr "activo" - #: src/slic3r/GUI/GLCanvas3D.cpp:248 msgid "Adaptive" msgstr "Adaptativa" @@ -699,6 +722,60 @@ msgstr "" "Añade \"%1%\" como siguiente ajuste preestablecido para la impresora física " "\"%2%\"" +#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 +msgid "Add Generic Subobject" +msgstr "Añadir Subobjeto Genérico" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 +msgid "Add Height Range" +msgstr "Añadir Rango de Alturas" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 +msgid "Add Instance of the selected object" +msgstr "Añadir instancia del objeto seleccionado" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 +msgid "Add Layers" +msgstr "Añadir Capas" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 +msgid "Add Settings Bundle for Height range" +msgstr "Añadir Conjunto de Ajustes para Rango de Alturas" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 +msgid "Add Settings Bundle for Object" +msgstr "Añadir Conjunto de Ajustes para Objeto" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 +msgid "Add Settings Bundle for Sub-object" +msgstr "Añadir Conjunto de Ajustes para Sub-objeto" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 +msgid "Add Settings for Layers" +msgstr "Añadir Ajustes para Capas" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 +msgid "Add Settings for Object" +msgstr "Agregar Ajustes para Objeto" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 +msgid "Add Settings for Sub-object" +msgstr "Agregar Ajustes para Sub-objeto" + +#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 +msgid "Add Shape" +msgstr "Añadir forma" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shape from Gallery" +msgstr "Añadir Forma desde la Galería" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shapes from Gallery" +msgstr "Añadir Formas desde la Galería" + #: src/libslic3r/PrintConfig.cpp:3607 msgid "Add a pad underneath the supported model" msgstr "Añade un pad debajo del modelo compatible" @@ -768,33 +845,15 @@ msgstr "Añadir cambio de extrusor - Clic izquierdo" msgid "Add extruder to sequence" msgstr "Añadir extrusor a la secuencia" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 -msgid "Add Generic Subobject" -msgstr "Añadir Subobjeto Genérico" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 -msgid "Add Height Range" -msgstr "Añadir Rango de Alturas" - #: src/slic3r/GUI/GLCanvas3D.cpp:4541 src/slic3r/GUI/GUI_Factories.cpp:1084 #: src/slic3r/GUI/GUI_Factories.cpp:1108 src/slic3r/GUI/GUI_Factories.cpp:1119 msgid "Add instance" msgstr "Añadir instancia" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 -msgid "Add Instance of the selected object" -msgstr "Añadir instancia del objeto seleccionado" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:164 msgid "Add layer range" msgstr "Añadir rango de capas" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 -msgid "Add Layers" -msgstr "Añadir Capas" - #: src/slic3r/GUI/GUI_Factories.cpp:162 msgid "Add modifier" msgstr "Añadir modificador" @@ -854,42 +913,6 @@ msgstr "Añadir la(s) forma(s) seleccionada(s) a la base" msgid "Add settings" msgstr "Añadir ajustes" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 -msgid "Add Settings Bundle for Height range" -msgstr "Añadir Conjunto de Ajustes para Rango de Alturas" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 -msgid "Add Settings Bundle for Object" -msgstr "Añadir Conjunto de Ajustes para Objeto" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 -msgid "Add Settings Bundle for Sub-object" -msgstr "Añadir Conjunto de Ajustes para Sub-objeto" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 -msgid "Add Settings for Layers" -msgstr "Añadir Ajustes para Capas" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 -msgid "Add Settings for Object" -msgstr "Agregar Ajustes para Objeto" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 -msgid "Add Settings for Sub-object" -msgstr "Agregar Ajustes para Sub-objeto" - -#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 -msgid "Add Shape" -msgstr "Añadir forma" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shape from Gallery" -msgstr "Añadir Forma desde la Galería" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shapes from Gallery" -msgstr "Añadir Formas desde la Galería" - #: src/libslic3r/PrintConfig.cpp:686 msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " @@ -944,14 +967,14 @@ msgstr "Añadir/Quitar ajustes preestablecidos" msgid "Add/Remove printers" msgstr "Añade/Quita impresoras" -#: src/slic3r/GUI/Tab.cpp:1369 -msgid "Additional information:" -msgstr "Información adicional:" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:63 msgid "Additional Settings" msgstr "Ajustes adicionales" +#: src/slic3r/GUI/Tab.cpp:1369 +msgid "Additional information:" +msgstr "Información adicional:" + #: src/slic3r/GUI/ConfigWizard.cpp:1236 msgid "" "Additionally a backup snapshot of the whole configuration is created before " @@ -964,26 +987,19 @@ msgstr "" msgid "Address" msgstr "Dirección" -#: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 -#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 -#: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4661 -#: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 -#: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 -#: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 -#: src/libslic3r/PrintConfig.cpp:2490 src/libslic3r/PrintConfig.cpp:3028 -#: src/libslic3r/PrintConfig.cpp:3224 +#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 +msgctxt "Mode" msgid "Advanced" msgstr "Avanzado" -#: src/slic3r/GUI/ConfigWizard.cpp:1280 -msgid "Advanced mode" -msgstr "Modo avanzado" - #: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Advanced View Mode" msgstr "Modo vista avanzada" +#: src/slic3r/GUI/ConfigWizard.cpp:1280 +msgid "Advanced mode" +msgstr "Modo avanzado" + #: src/slic3r/GUI/FirmwareDialog.cpp:851 msgid "Advanced: Output log" msgstr "Avanzado: Registro de salida" @@ -1008,14 +1024,14 @@ msgstr "" msgid "After layer change G-code" msgstr "Código G tras un cambio de capa" -#: src/libslic3r/PrintConfig.cpp:4322 -msgid "Align the model to the given point." -msgstr "Alinear el modelo a un punto dado." - #: src/libslic3r/PrintConfig.cpp:4321 msgid "Align XY" msgstr "Alinear XY" +#: src/libslic3r/PrintConfig.cpp:4322 +msgid "Align the model to the given point." +msgstr "Alinear el modelo a un punto dado." + #: src/libslic3r/PrintConfig.cpp:2223 msgid "Aligned" msgstr "Alineado" @@ -1082,10 +1098,6 @@ msgstr "Se borrarán todos los ajustes del usuario." msgid "All walls" msgstr "Todas las paredes" -#: src/libslic3r/miniz_extension.cpp:121 -msgid "allocation failed" -msgstr "asignación fallida" - #: src/slic3r/GUI/Preferences.cpp:208 src/slic3r/GUI/Preferences.cpp:212 msgid "Allow just a single PrusaSlicer instance" msgstr "Permitir una sola instancia de PrusaSlicer" @@ -1178,6 +1190,10 @@ msgstr "" "Un objeto tiene reforzadores de soporte personalizados que no se utilizarán " "porque los soportes están desactivados." +#: src/slic3r/GUI/GLCanvas3D.cpp:6367 +msgid "An object outside the print area was detected." +msgstr "Se detectó un objeto fuera del área de impresión." + #: src/slic3r/GUI/GLCanvas3D.cpp:6372 msgid "" "An object outside the print area was detected.\n" @@ -1186,10 +1202,6 @@ msgstr "" "Se detectó un objeto fuera del área de impresión.\n" "Resuelve el problema actual para seguir laminando." -#: src/slic3r/GUI/GLCanvas3D.cpp:6367 -msgid "An object outside the print area was detected." -msgstr "Se detectó un objeto fuera del área de impresión." - #: src/slic3r/GUI/Jobs/PlaterJob.cpp:13 msgid "An unexpected error occured" msgstr "Se ha producido un error inesperado" @@ -1209,14 +1221,6 @@ msgid "" msgstr "" "Cualquier modificación debe guardarse como un nuevo preset heredado de este." -#: src/libslic3r/PrintConfig.cpp:351 -msgid "API key" -msgstr "Clave API" - -#: src/libslic3r/PrintConfig.cpp:291 -msgid "API Key / Password" -msgstr "Clave API / Contraseña" - #: src/slic3r/GUI/GUI_App.cpp:2232 msgid "Application preferences" msgstr "Preferencias de la aplicación" @@ -1239,18 +1243,10 @@ msgstr "Aplicar el cambio de color automáticamente" msgid "Apply to all the remaining small objects being loaded." msgstr "Aplicar a todos los objetos pequeños restantes que se cargan." -#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 -msgid "approximate seconds" -msgstr "segundos aproximadamente" - #: src/libslic3r/PrintConfig.cpp:709 src/libslic3r/PrintConfig.cpp:1156 msgid "Archimedean Chords" msgstr "Acordes de Arquímedes" -#: src/libslic3r/miniz_extension.cpp:147 -msgid "archive is too large" -msgstr "el archivo es demasiado grande" - #: src/slic3r/GUI/Tab.cpp:3731 #, boost-format msgid "Are you sure you want to %1% the selected preset?" @@ -1282,6 +1278,10 @@ msgstr "" msgid "Are you sure you want to delete \"%1%\" printer?" msgstr "¿Estás seguro de que quieres borrar la impresora \"%1%\"?" +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "¿Está seguro de que quiere eliminar todas las sustituciones?" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1132 msgid "Are you sure you want to do it?" msgstr "¿Estás seguro de que quieres hacerlo?" @@ -1533,14 +1533,22 @@ msgstr "Salir en caso de valores de configuración desconocidos" msgid "Balanced" msgstr "Balanceado" -#: src/slic3r/GUI/MainFrame.cpp:655 -msgid "based on Slic3r" -msgstr "basado en Slic3r" - #: src/slic3r/GUI/Tab.cpp:1989 msgid "Bed" msgstr "Base" +#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape" +msgstr "Forma de la base de impresión" + +#: src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape and Size" +msgstr "Tamaño y forma de la base" + +#: src/slic3r/GUI/ConfigWizard.cpp:1581 +msgid "Bed Temperature:" +msgstr "Temperatura de la base:" + #: src/libslic3r/PrintConfig.cpp:241 msgid "Bed custom model" msgstr "Modelo de base personalizado" @@ -1557,18 +1565,10 @@ msgstr "Relleno de base cancelado." msgid "Bed filling done." msgstr "Relleno de la base realizado." -#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape" -msgstr "Forma de la base de impresión" - #: src/libslic3r/PrintConfig.cpp:231 msgid "Bed shape" msgstr "Forma de la base de impresión" -#: src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape and Size" -msgstr "Tamaño y forma de la base" - #: src/libslic3r/PrintConfig.cpp:396 msgid "Bed temperature" msgstr "Temperatura de la base" @@ -1582,10 +1582,6 @@ msgstr "" "Ajusta esto a cero para deshabilitar los comandos de control de temperatura " "de la base calefactable en la salida." -#: src/slic3r/GUI/ConfigWizard.cpp:1581 -msgid "Bed Temperature:" -msgstr "Temperatura de la base:" - #: src/slic3r/GUI/Tab.cpp:2422 src/libslic3r/GCode.cpp:709 #: src/libslic3r/PrintConfig.cpp:402 msgid "Before layer change G-code" @@ -1595,14 +1591,14 @@ msgstr "Código G para antes del cambio de capa" msgid "Before roll back" msgstr "Antes de volver atrás" -#: src/slic3r/GUI/Plater.cpp:579 -msgid "Below object" -msgstr "Por debajo del objeto" - #: src/libslic3r/PrintConfig.cpp:2170 msgid "Below Z" msgstr "Por debajo de Z" +#: src/slic3r/GUI/Plater.cpp:579 +msgid "Below object" +msgstr "Por debajo del objeto" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:21 msgid "Best surface quality" msgstr "La mejor calidad de superficie" @@ -1641,14 +1637,15 @@ msgstr "Volumen de la botella" msgid "Bottle weight" msgstr "Peso botella" -#. 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:1121 src/libslic3r/PrintConfig.cpp:423 -#: src/libslic3r/PrintConfig.cpp:432 +#: src/slic3r/GUI/OptionsGroup.cpp:352 +msgctxt "Layers" msgid "Bottom" msgstr "Inferior" +#: src/slic3r/GUI/MainFrame.cpp:1121 +msgid "Bottom View" +msgstr "Vista inferior" + #: src/libslic3r/PrintConfig.cpp:2566 msgid "Bottom contact Z distance" msgstr "Distancia Z de contacto inferior " @@ -1675,10 +1672,6 @@ msgstr "" msgid "Bottom solid layers" msgstr "Capas sólidas inferiores" -#: src/slic3r/GUI/MainFrame.cpp:1121 -msgid "Bottom View" -msgstr "Vista inferior" - #: src/slic3r/GUI/GUI_Factories.cpp:461 src/slic3r/GUI/GUI_Factories.cpp:501 #: src/slic3r/GUI/GUI_Factories.cpp:505 msgid "Box" @@ -1777,10 +1770,6 @@ msgstr "Tamaño del pincel" msgid "Bucket fill" msgstr "Relleno de cubos" -#: src/libslic3r/miniz_extension.cpp:141 -msgid "buffer too small" -msgstr "buffer demasiado pequeño" - #: src/slic3r/GUI/GUI_App.cpp:1660 msgid "" "But since this version of PrusaSlicer we don't show this information in " @@ -1806,18 +1795,30 @@ msgstr "" "Nota: Este nombre se puede cambiar posteriormente en los ajustes de " "impresora física" -#: src/slic3r/GUI/PresetHints.cpp:191 -msgid "by the print profile maximum" -msgstr "por el máximo perfil de impresión" +#: src/slic3r/GUI/NotificationManager.cpp:890 +msgid "CANCELED" +msgstr "CANCELADO" + +#: src/slic3r/GUI/NotificationManager.cpp:895 +msgid "COMPLETED" +msgstr "COMPLETADO" + +#: src/libslic3r/miniz_extension.cpp:117 +msgid "CRC-32 check failed" +msgstr "Comprobación con CRC-32 fallida" + +#: src/slic3r/Utils/Http.cpp:91 +msgid "" +"CURL init has failed. PrusaSlicer will be unable to establish network " +"connections. See logs for additional details." +msgstr "" +"CURL init ha fallado. PrusaSlicer no podrá establecer conexiones de red. " +"Consulta los registros para obtener detalles adicionales." #: src/slic3r/GUI/Preferences.cpp:314 msgid "Camera" msgstr "Cámara" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 -msgid "Camera view" -msgstr "Vista de cámara" - #: resources/data/hints.ini: [hint:Camera Views] msgid "" "Camera Views\n" @@ -1828,6 +1829,10 @@ msgstr "" "¿Sabías que puedes utilizar las teclas numéricas 0-6 para cambiar " "rápidamente entre los ángulos de cámara predefinidos?" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 +msgid "Camera view" +msgstr "Vista de cámara" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:322 msgid "Can't apply when proccess preview." msgstr "No se puede aplicar cuando la vista previa del proceso." @@ -1850,10 +1855,6 @@ msgstr "Cancelar selección" msgid "Cancel upload" msgstr "Cancelar subida" -#: src/slic3r/GUI/NotificationManager.cpp:890 -msgid "CANCELED" -msgstr "CANCELADO" - #: src/slic3r/GUI/PrintHostDialogs.cpp:375 msgid "Cancelled" msgstr "Cancelado" @@ -1956,30 +1957,10 @@ msgstr "Archivos de certificados (*.crt, *.pem)|*.crt;*.pem|Todos|*.*" msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"" msgstr "Cambia \"%1%\" a \"%2%\" para esta impresora física \"%3%\"" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 -msgid "Change camera type (perspective, orthographic)" -msgstr "Cambiar tipo de cámara (perspectiva, ortográfica)" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 -msgid "Change drainage hole diameter" -msgstr "Cambiar diámetro orificio de drenaje" - -#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 -msgid "Change extruder" -msgstr "Cambiar extrusor" - #: src/slic3r/GUI/GUI_ObjectList.cpp:616 msgid "Change Extruder" msgstr "Cambiar Extrusor" -#: src/slic3r/GUI/DoubleSlider.cpp:1613 -msgid "Change extruder (N/A)" -msgstr "Cambiar extrusor (N/A)" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:722 -msgid "Change extruder color" -msgstr "Cambiar color del extrusor" - #: src/slic3r/GUI/GUI_ObjectList.cpp:4267 msgid "Change Extruders" msgstr "Cambiar Extrusores" @@ -1993,6 +1974,26 @@ msgstr "Cambiar opción %s" msgid "Change Part Type" msgstr "Cambiar Tipo de Pieza" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 +msgid "Change camera type (perspective, orthographic)" +msgstr "Cambiar tipo de cámara (perspectiva, ortográfica)" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 +msgid "Change drainage hole diameter" +msgstr "Cambiar diámetro orificio de drenaje" + +#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 +msgid "Change extruder" +msgstr "Cambiar extrusor" + +#: src/slic3r/GUI/DoubleSlider.cpp:1613 +msgid "Change extruder (N/A)" +msgstr "Cambiar extrusor (N/A)" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:722 +msgid "Change extruder color" +msgstr "Cambiar color del extrusor" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:702 msgid "Change point head diameter" msgstr "Cambiar diámetro de la cabeza de punta" @@ -2029,6 +2030,10 @@ msgstr "" "El cambio de algunas opciones hará que se reinicie la aplicación.\n" "Se perderá el contenido de la plataforma." +#: src/slic3r/GUI/GUI_App.cpp:2219 +msgid "Check for Configuration Updates" +msgstr "Comprobación de las Actualizaciones de la Configuración" + #: src/slic3r/GUI/ConfigWizard.cpp:1214 msgid "Check for application updates" msgstr "Comprueba si hay actualizaciones de la aplicación" @@ -2037,9 +2042,9 @@ msgstr "Comprueba si hay actualizaciones de la aplicación" msgid "Check for configuration updates" msgstr "Comprueba si hay actualizaciones de configuración" -#: src/slic3r/GUI/GUI_App.cpp:2219 -msgid "Check for Configuration Updates" -msgstr "Comprobación de las Actualizaciones de la Configuración" +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 +msgid "Choose SLA archive:" +msgstr "Elegir archivo SLA:" #: src/slic3r/GUI/BedShapeDialog.cpp:552 msgid "Choose a file to import bed texture from (PNG/SVG):" @@ -2058,6 +2063,10 @@ msgstr "Escoge un archivo STL para importar el modelo de la base de impresión:" msgid "Choose an STL file to import bed shape from:" msgstr "Escoge un archivo STL para importar la forma de la base:" +#: src/slic3r/GUI/GalleryDialog.cpp:453 +msgid "Choose one PNG file:" +msgstr "Elije un archivo PNG:" + #: src/slic3r/GUI/GUI_App.cpp:1836 msgid "Choose one file (3MF/AMF):" msgstr "Selecciona un archivo (3MF/AMF):" @@ -2074,14 +2083,6 @@ msgstr "Elije uno o varios archivos (STL, OBJ):" msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Escoje uno o más archivos (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GalleryDialog.cpp:453 -msgid "Choose one PNG file:" -msgstr "Elije un archivo PNG:" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 -msgid "Choose SLA archive:" -msgstr "Elegir archivo SLA:" - #: src/slic3r/GUI/ConfigWizard.cpp:1361 msgid "Choose the type of firmware used by your printer." msgstr "Selecciona el tipo de firmware que usa tu impresora." @@ -2096,10 +2097,6 @@ msgstr "Círculo" msgid "Circular" msgstr "Circular" -#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 -msgid "Clear all" -msgstr "Borrar todo" - #: src/slic3r/GUI/Preferences.cpp:295 msgid "Clear Undo / Redo stack on new project" msgstr "Borrar la pila de Deshacer / Rehacer en el nuevo proyecto" @@ -2111,6 +2108,10 @@ msgstr "" "Borrar la pila de Deshacer / Rehacer en un nuevo proyecto o cuando se carga " "un proyecto existente." +#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 +msgid "Clear all" +msgstr "Borrar todo" + #: src/slic3r/GUI/GLCanvas3D.cpp:4689 src/slic3r/GUI/GLCanvas3D.cpp:4728 msgid "Click right mouse button to open/close History" msgstr "Clic con botón derecho del ratón para abrir/cerrar Historia" @@ -2163,11 +2164,6 @@ msgstr "Cerrar" msgid "Close holes" msgstr "Cerrar agujeros" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 -#: src/libslic3r/PrintConfig.cpp:3759 -msgid "Closing distance" -msgstr "Distancia de cierre" - #: src/slic3r/GUI/MainFrame.cpp:232 msgid "Closing PrusaSlicer while some presets are modified." msgstr "Cerrando PrusaSlicer mientras se modifican algunos ajustes." @@ -2176,6 +2172,11 @@ msgstr "Cerrando PrusaSlicer mientras se modifican algunos ajustes." msgid "Closing PrusaSlicer. Current project is modified." msgstr "Cerrando PrusaSlicer. Se modifica el proyecto actual." +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 +#: src/libslic3r/PrintConfig.cpp:3759 +msgid "Closing distance" +msgstr "Distancia de cierre" + #: src/libslic3r/PrintConfig.cpp:2667 msgid "Closing radius" msgstr "Radio de cierre" @@ -2192,6 +2193,15 @@ msgstr "Ocultar/Expandir barra lateral" msgid "Color" msgstr "Color" +#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 +msgid "Color Change G-code" +msgstr "Código G Cambio Color" + +#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 +#: src/slic3r/GUI/GUI_Preview.cpp:957 +msgid "Color Print" +msgstr "Color Print" + #: src/slic3r/GUI/GCodeViewer.cpp:3487 src/slic3r/GUI/GCodeViewer.cpp:3543 msgid "Color change" msgstr "Cambio de color" @@ -2206,10 +2216,6 @@ msgstr "Cambio de color (\"%1%\")" msgid "Color change (\"%1%\") for Extruder %2%" msgstr "Cambio de color (\"%1%\") para el Extrusor %2%" -#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 -msgid "Color Change G-code" -msgstr "Código G Cambio Color" - #: src/libslic3r/PrintConfig.cpp:2432 msgid "Color change G-code" msgstr "Código G Cambio color" @@ -2218,11 +2224,6 @@ msgstr "Código G Cambio color" msgid "Color changes" msgstr "Cambios de color" -#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 -#: src/slic3r/GUI/GUI_Preview.cpp:957 -msgid "Color Print" -msgstr "Color Print" - #: src/libslic3r/PrintConfig.cpp:537 msgid "Colorprint height" msgstr "Altura de Colorprint" @@ -2256,15 +2257,15 @@ msgstr "Comandos" msgid "Comment:" msgstr "Comentario:" -#: src/slic3r/GUI/MainFrame.cpp:1417 -msgid "Compare presets" -msgstr "Comparar justes" - #: src/slic3r/GUI/MainFrame.cpp:1417 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 msgid "Compare Presets" msgstr "Comparar Ajustes" +#: src/slic3r/GUI/MainFrame.cpp:1417 +msgid "Compare presets" +msgstr "Comparar justes" + #: src/slic3r/GUI/Tab.cpp:216 msgid "Compare this preset with some another" msgstr "Comparar este ajuste con algún otro" @@ -2297,14 +2298,6 @@ msgstr "Completar objetos individuales" msgid "Completed" msgstr "Completado" -#: src/slic3r/GUI/NotificationManager.cpp:895 -msgid "COMPLETED" -msgstr "COMPLETADO" - -#: src/libslic3r/miniz_extension.cpp:113 -msgid "compression failed" -msgstr "compresión fallida" - #: src/libslic3r/PrintConfig.cpp:707 src/libslic3r/PrintConfig.cpp:1151 #: src/libslic3r/PrintConfig.cpp:2722 msgid "Concentric" @@ -2322,6 +2315,23 @@ msgstr "Ayudante de co&nfiguración" msgid "Configuration Assistant" msgstr "Asistente de Configuración" +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 +msgid "Configuration Snapshots" +msgstr "Instantáneas de la Configuración" + +#: src/slic3r/Utils/PresetUpdater.cpp:777 +msgid "" +"Configuration Updates causes a lost of preset modification.\n" +"So, check unsaved changes and save them if necessary." +msgstr "" +"La actualización de la configuración hace que se pierda la modificación de " +"los ajustes.\n" +"Por lo tanto, comprueba los cambios no guardados y guárdalos si es necesario." + +#: src/slic3r/GUI/ConfigWizard.cpp:3039 +msgid "Configuration Wizard" +msgstr "Asistente de configuración" + #: src/slic3r/GUI/GUI.cpp:355 msgid "" "Configuration bundle was loaded, however some configuration values were not " @@ -2364,10 +2374,6 @@ msgstr "" "instantáneas utilizando la opción de Configuración - Menú de Instantáneas " "de la configuración." -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 -msgid "Configuration Snapshots" -msgstr "Instantáneas de la Configuración" - #: src/slic3r/GUI/UpdateDialogs.cpp:94 src/slic3r/GUI/UpdateDialogs.cpp:261 msgid "Configuration update" msgstr "Actualización de configuración" @@ -2384,19 +2390,6 @@ msgstr "Disponible la actualización de la configuración." msgid "Configuration updates" msgstr "Actualizaciones de la configuración" -#: src/slic3r/Utils/PresetUpdater.cpp:777 -msgid "" -"Configuration Updates causes a lost of preset modification.\n" -"So, check unsaved changes and save them if necessary." -msgstr "" -"La actualización de la configuración hace que se pierda la modificación de " -"los ajustes.\n" -"Por lo tanto, comprueba los cambios no guardados y guárdalos si es necesario." - -#: src/slic3r/GUI/ConfigWizard.cpp:3039 -msgid "Configuration Wizard" -msgstr "Asistente de configuración" - #: src/slic3r/GUI/FirmwareDialog.cpp:916 msgid "Confirmation" msgstr "Confirmación" @@ -2466,11 +2459,6 @@ msgstr "" msgid "Connection to OctoPrint works correctly." msgstr "La conexión a OctoPrint funciona correctamente." -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 -msgid "Connection to printers connected via the print host failed." -msgstr "" -"Falló la conexión a las impresoras conectadas a través del host de impresión." - #: src/slic3r/Utils/OctoPrint.cpp:292 msgid "Connection to Prusa SL1 / SL1S works correctly." msgstr "La conexión con la Prusa SL1 / SL1S funciona correctamente." @@ -2483,9 +2471,10 @@ msgstr "La conexión con PrusaLink funciona correctamente." msgid "Connection to Repetier works correctly." msgstr "La conexión con Repetier funciona correctamente." -#: src/slic3r/GUI/DoubleSlider.cpp:1458 -msgid "continue" -msgstr "continuar" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 +msgid "Connection to printers connected via the print host failed." +msgstr "" +"Falló la conexión a las impresoras conectadas a través del host de impresión." #: src/slic3r/Config/Snapshot.cpp:601 msgid "Continue" @@ -2573,25 +2562,26 @@ msgstr "Posición del tubo de refrigeración" msgid "Copies of the selected object" msgstr "Copias del objeto seleccionado" -#: src/slic3r/GUI/GLCanvas3D.cpp:4520 +#: src/slic3r/GUI/SavePresetDialog.cpp:221 +msgctxt "PresetName" msgid "Copy" msgstr "Copiar" +#: src/slic3r/GUI/AboutDialog.cpp:308 +msgid "Copy Version Info" +msgstr "Copiar Información de Versión" + #: src/slic3r/GUI/MainFrame.cpp:1343 msgid "Copy selection to clipboard" msgstr "Copiar selección al portapapeles" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 -msgid "Copy to clipboard" -msgstr "Copiar al portapapeles" - #: src/slic3r/GUI/SysInfoDialog.cpp:169 msgid "Copy to Clipboard" msgstr "Copiar al portapapeles" -#: src/slic3r/GUI/AboutDialog.cpp:308 -msgid "Copy Version Info" -msgstr "Copiar Información de Versión" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 +msgid "Copy to clipboard" +msgstr "Copiar al portapapeles" #: src/slic3r/Utils/PresetUpdater.cpp:61 #, boost-format @@ -2745,10 +2735,6 @@ msgstr "" "puede reducir la resolución de la impresión, por lo tanto es aconsejable " "mantener ese valor razonablemente bajo." -#: src/libslic3r/miniz_extension.cpp:117 -msgid "CRC-32 check failed" -msgstr "Comprobación con CRC-32 fallida" - #: src/libslic3r/PrintConfig.cpp:3682 msgid "Create pad around object and ignore the support elevation" msgstr "Crear pad alrededor del objeto e ignorar la elevación del soporte" @@ -2787,14 +2773,6 @@ msgstr "Ctrl + Rueda del ratón" msgid "Cubic" msgstr "Cúbico" -#: src/slic3r/Utils/Http.cpp:91 -msgid "" -"CURL init has failed. PrusaSlicer will be unable to establish network " -"connections. See logs for additional details." -msgstr "" -"CURL init ha fallado. PrusaSlicer no podrá establecer conexiones de red. " -"Consulta los registros para obtener detalles adicionales." - #: src/slic3r/GUI/wxExtensions.cpp:645 #, c-format, boost-format msgid "Current mode is %s" @@ -2912,10 +2890,6 @@ msgstr "Zona muerta:" msgid "Decimate ratio" msgstr "Relación de decimación" -#: src/libslic3r/miniz_extension.cpp:111 -msgid "decompression failed or archive is corrupted" -msgstr "descompresión fallida o archivo está dañado" - #: src/slic3r/GUI/Plater.cpp:5517 msgid "Decrease Instances" msgstr "Reducir Instancias" @@ -2926,16 +2900,9 @@ msgstr "Reducir Instancias" msgid "Default" msgstr "Por defecto" -#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 -#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 -msgid "default" -msgstr "por defecto" +#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 +msgid "Default SLA material profile" +msgstr "Perfil de material de SLA predeterminado" #: src/libslic3r/PrintConfig.cpp:1072 msgid "" @@ -2952,18 +2919,10 @@ msgstr "" msgid "Default color" msgstr "Color predeterminado" -#: src/slic3r/GUI/GCodeViewer.cpp:3388 -msgid "default color" -msgstr "color predeterminado" - #: src/libslic3r/PrintConfig.cpp:837 msgid "Default extrusion width" msgstr "Ancho de extrusión por defecto" -#: src/slic3r/GUI/Tab.cpp:1386 -msgid "default filament profile" -msgstr "perfil de filamento por defecto" - #: src/libslic3r/PrintConfig.cpp:622 msgid "Default filament profile" msgstr "Perfil de filamento por defecto" @@ -2978,10 +2937,6 @@ msgstr "" "Al seleccionar el perfil de impresora actual se activará este perfil de " "filamento." -#: src/slic3r/GUI/Tab.cpp:1383 -msgid "default print profile" -msgstr "perfil de impresión por defecto" - #: src/libslic3r/PrintConfig.cpp:629 msgid "Default print profile" msgstr "Perfil de impresión por defecto" @@ -2997,22 +2952,6 @@ msgstr "" "Al seleccionar el perfil de impresora actual se activará este perfil de " "impresión." -#: src/slic3r/GUI/Tab.cpp:1400 -msgid "default SLA material profile" -msgstr "perfil de material de SLA por defecto" - -#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 -msgid "Default SLA material profile" -msgstr "Perfil de material de SLA predeterminado" - -#: src/slic3r/GUI/Tab.cpp:1404 -msgid "default SLA print profile" -msgstr "perfil de impresión de SLA por defecto" - -#: src/slic3r/GUI/Field.cpp:190 -msgid "default value" -msgstr "valor por defecto" - #: src/slic3r/GUI/ConfigWizard.cpp:1177 msgid "Define a custom printer profile" msgstr "Definir un perfil de impresora personalizado" @@ -3034,10 +2973,6 @@ msgstr "" msgid "Delay after unloading" msgstr "Retardo tras la descarga" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "delete" -msgstr "borra" - #: src/slic3r/GUI/GalleryDialog.cpp:118 src/slic3r/GUI/GalleryDialog.cpp:508 #: src/slic3r/GUI/GLCanvas3D.cpp:4480 src/slic3r/GUI/GUI_Factories.cpp:444 #: src/slic3r/GUI/Tab.cpp:3734 @@ -3048,11 +2983,6 @@ msgstr "Borra" msgid "Delete &All" msgstr "Borrar &Todo" -#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 -msgid "Delete all" -msgstr "Eliminar todo" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1901 msgid "Delete All Instances from Object" msgstr "Eliminar todas las instancias del Objeto" @@ -3061,22 +2991,6 @@ msgstr "Eliminar todas las instancias del Objeto" msgid "Delete All Objects" msgstr "Borrar Todos Los Objetos" -#: src/slic3r/GUI/DoubleSlider.cpp:2012 -msgid "Delete color change" -msgstr "Eliminar cambio de color" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 -msgid "Delete color change marker for current layer" -msgstr "Eliminar marcador de cambio de color para la capa actual" - -#: src/slic3r/GUI/DoubleSlider.cpp:2015 -msgid "Delete custom G-code" -msgstr "Eliminar código G personalizado" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 -msgid "Delete drainage hole" -msgstr "Eliminar orificio de drenaje" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1917 msgid "Delete Height Range" msgstr "Eliminar Rango de Alturas" @@ -3089,33 +3003,15 @@ msgstr "Eliminar Instancia" msgid "Delete Object" msgstr "Eliminar Objeto" -#: src/slic3r/GUI/GalleryDialog.cpp:118 -msgid "Delete one or more custom shape. You can't delete system shapes" -msgstr "" -"Eliminar una o varias formas personalizadas. No se pueden eliminar las " -"formas del sistema" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:105 #, c-format, boost-format msgid "Delete Option %s" msgstr "Eliminar Opción %s" -#: src/slic3r/GUI/DoubleSlider.cpp:2014 -msgid "Delete pause print" -msgstr "Eliminar pausa de impresión" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:733 -msgid "Delete physical printer" -msgstr "Eliminar impresora física" - #: src/slic3r/GUI/PresetComboBoxes.cpp:340 msgid "Delete Physical Printer" msgstr "Eliminar Impresora Física" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 -msgid "Delete selected" -msgstr "Eliminar selección" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2934 msgid "Delete Selected" msgstr "Eliminar Selección" @@ -3136,6 +3032,45 @@ msgstr "Eliminar Ajustes" msgid "Delete Subobject" msgstr "Eliminar Subobjeto" +#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 +#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 +msgid "Delete all" +msgstr "Eliminar todo" + +#: src/slic3r/GUI/DoubleSlider.cpp:2012 +msgid "Delete color change" +msgstr "Eliminar cambio de color" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 +msgid "Delete color change marker for current layer" +msgstr "Eliminar marcador de cambio de color para la capa actual" + +#: src/slic3r/GUI/DoubleSlider.cpp:2015 +msgid "Delete custom G-code" +msgstr "Eliminar código G personalizado" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 +msgid "Delete drainage hole" +msgstr "Eliminar orificio de drenaje" + +#: src/slic3r/GUI/GalleryDialog.cpp:118 +msgid "Delete one or more custom shape. You can't delete system shapes" +msgstr "" +"Eliminar una o varias formas personalizadas. No se pueden eliminar las " +"formas del sistema" + +#: src/slic3r/GUI/DoubleSlider.cpp:2014 +msgid "Delete pause print" +msgstr "Eliminar pausa de impresión" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:733 +msgid "Delete physical printer" +msgstr "Eliminar impresora física" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 +msgid "Delete selected" +msgstr "Eliminar selección" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:522 msgid "Delete support point" msgstr "Borra punto de apoyo" @@ -3213,10 +3148,6 @@ msgstr "Deseleccionar todos los objetos" msgid "Desktop Integration" msgstr "Integración en el escritorio" -#: src/slic3r/GUI/NotificationManager.hpp:768 -msgid "Desktop integration failed." -msgstr "La integración en el escritorio ha fallado." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:466 msgid "" "Desktop Integration sets this binary to be searchable by the system.\n" @@ -3228,6 +3159,10 @@ msgstr "" "\n" "Pulse \"Realizar\" para continuar." +#: src/slic3r/GUI/NotificationManager.hpp:768 +msgid "Desktop integration failed." +msgstr "La integración en el escritorio ha fallado." + #: src/slic3r/GUI/NotificationManager.hpp:766 msgid "Desktop integration was successful." msgstr "La integración en el escritorio ha sido un éxito." @@ -3322,10 +3257,6 @@ msgstr "" "3D, elige Capas y Perímetros y ajusta los valores en el panel derecho. Lee " "más en la documentación." -#: src/slic3r/GUI/Plater.cpp:3652 -msgid "differs from the original file" -msgstr "difiere del archivo original" - #: src/libslic3r/PrintConfig.cpp:2231 msgid "Direction" msgstr "Dirección" @@ -3502,21 +3433,17 @@ msgstr "¿Quieres guardar los cambios en \"%1%\"?" msgid "Do you want to save your manually edited support points?" msgstr "¿Deseas guardar tus puntos de soporte editados manualmente?" -#: src/slic3r/GUI/ConfigWizard.cpp:2463 -msgid "Do you want to select default filaments for these FFF printer models?" -msgstr "" -"¿Desea seleccionar filamentos predeterminados para estos modelos de " -"impresoras FFF?" - #: src/slic3r/GUI/ConfigWizard.cpp:2481 msgid "Do you want to select default SLA materials for these printer models?" msgstr "" "¿Desea seleccionar materiales SLA predeterminados para estos modelos de " "impresora?" -#: src/slic3r/GUI/Plater.cpp:5202 -msgid "does not contain valid gcode." -msgstr "no contiene gcode válido." +#: src/slic3r/GUI/ConfigWizard.cpp:2463 +msgid "Do you want to select default filaments for these FFF printer models?" +msgstr "" +"¿Desea seleccionar filamentos predeterminados para estos modelos de " +"impresoras FFF?" #: src/libslic3r/PrintConfig.cpp:4353 msgid "Don't arrange" @@ -3611,10 +3538,37 @@ msgstr "Dinámico" msgid "E&xport" msgstr "E&xportar" +#: src/slic3r/GUI/NotificationManager.cpp:885 +msgid "ERROR" +msgstr "ERROR" + +#: src/slic3r/GUI/NotificationManager.cpp:1447 +#: src/slic3r/GUI/NotificationManager.cpp:1454 +#: src/slic3r/GUI/NotificationManager.cpp:1470 +#: src/slic3r/GUI/NotificationManager.cpp:1476 +#: src/slic3r/GUI/NotificationManager.cpp:1547 +msgid "ERROR:" +msgstr "ERROR:" + +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 +msgid "" +"ERROR: Please close all manipulators available from the left toolbar first" +msgstr "" +"ERROR: Por favor, cierre primero todos los manipuladores disponibles en la " +"barra de herramientas de la izquierda" + +#: src/slic3r/GUI/Jobs/Job.cpp:111 +msgid "ERROR: not enough resources to execute a new job." +msgstr "ERROR: no hay suficientes recursos para ejecutar el trabajo." + #: src/slic3r/GUI/ImGuiWrapper.cpp:527 msgid "Edit" msgstr "Editar" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 +msgid "Edit Height Range" +msgstr "Editar Rango de Alturas" + #: src/slic3r/GUI/DoubleSlider.cpp:2004 msgid "Edit color" msgstr "Editar color" @@ -3627,10 +3581,6 @@ msgstr "Editar color actual - Clic derecho en el segmento de color deslizante" msgid "Edit custom G-code" msgstr "Editar código G personalizado" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 -msgid "Edit Height Range" -msgstr "Editar Rango de Alturas" - #: src/slic3r/GUI/DoubleSlider.cpp:2005 msgid "Edit pause print message" msgstr "Editar mensaje de pausa de impresión" @@ -3663,10 +3613,6 @@ msgstr "Se admite la vectorización propia:" msgid "Ejec&t SD Card / Flash Drive" msgstr "Expul&sar Tarjeta SD / Unidad Flash" -#: src/slic3r/GUI/NotificationManager.cpp:701 -msgid "Eject drive" -msgstr "Expulsar la unidad" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:91 msgid "Eject SD card / Flash drive" msgstr "Expulsa la tarjeta SD / disco USB" @@ -3676,6 +3622,10 @@ 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/slic3r/GUI/NotificationManager.cpp:701 +msgid "Eject drive" +msgstr "Expulsar la unidad" + #: src/slic3r/GUI/Plater.cpp:2202 #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." @@ -3982,9 +3932,9 @@ msgstr "" msgid "Error" msgstr "Error" -#: src/slic3r/GUI/NotificationManager.cpp:885 -msgid "ERROR" -msgstr "ERROR" +#: src/slic3r/GUI/PrintHostDialogs.cpp:253 +msgid "Error Message" +msgstr "Mensaje de Error" #: src/slic3r/GUI/FirmwareDialog.cpp:650 #, c-format, boost-format @@ -4003,10 +3953,6 @@ msgstr "Error durante el reemplazo" msgid "Error loading shaders" msgstr "Error al cargar sombras" -#: src/slic3r/GUI/PrintHostDialogs.cpp:253 -msgid "Error Message" -msgstr "Mensaje de Error" - #: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " @@ -4046,30 +3992,11 @@ msgstr "¡Error!" msgid "Error! Invalid model" msgstr "Error! Modelo inválido" -#: src/slic3r/GUI/NotificationManager.cpp:1447 -#: src/slic3r/GUI/NotificationManager.cpp:1454 -#: src/slic3r/GUI/NotificationManager.cpp:1470 -#: src/slic3r/GUI/NotificationManager.cpp:1476 -#: src/slic3r/GUI/NotificationManager.cpp:1547 -msgid "ERROR:" -msgstr "ERROR:" - #: src/slic3r/GUI/FirmwareDialog.cpp:652 #, c-format, boost-format msgid "Error: %s" msgstr "Error: %s" -#: src/slic3r/GUI/Jobs/Job.cpp:111 -msgid "ERROR: not enough resources to execute a new job." -msgstr "ERROR: no hay suficientes recursos para ejecutar el trabajo." - -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 -msgid "" -"ERROR: Please close all manipulators available from the left toolbar first" -msgstr "" -"ERROR: Por favor, cierre primero todos los manipuladores disponibles en la " -"barra de herramientas de la izquierda" - #: src/slic3r/GUI/Plater.cpp:301 src/slic3r/GUI/Plater.cpp:1339 #: src/slic3r/GUI/Plater.cpp:1426 msgid "Estimated printing time" @@ -4091,15 +4018,6 @@ msgstr "Evento" msgid "Everywhere" msgstr "En todos los sitios" -#: src/slic3r/GUI/PresetHints.cpp:59 -#, boost-format -msgid "except for the first %1% layers." -msgstr "a excepción de las %1% primeras capas." - -#: src/slic3r/GUI/PresetHints.cpp:61 -msgid "except for the first layer." -msgstr "a excepción de la primera capa." - #: src/libslic3r/Print.cpp:575 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" @@ -4148,14 +4066,14 @@ msgstr "" msgid "Expert" msgstr "Experto" -#: src/slic3r/GUI/ConfigWizard.cpp:1281 -msgid "Expert mode" -msgstr "Modo experto" - #: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Expert View Mode" msgstr "Modo de visualización experto" +#: src/slic3r/GUI/ConfigWizard.cpp:1281 +msgid "Expert mode" +msgstr "Modo experto" + #: src/slic3r/GUI/Plater.cpp:6492 msgid "Export" msgstr "Exportar" @@ -4176,6 +4094,63 @@ msgstr "Exportar &Movimientos como OBJ" msgid "Export 3MF" msgstr "Exportar 3MF" +#: src/libslic3r/PrintConfig.cpp:4261 +msgid "Export AMF" +msgstr "Exportar AMF" + +#: src/slic3r/GUI/Plater.cpp:2853 +msgid "Export AMF file:" +msgstr "Exportar archivo AMF:" + +#: src/slic3r/GUI/MainFrame.cpp:1257 +msgid "Export Config &Bundle" +msgstr "Exportar Conjunto de A&justes" + +#: src/slic3r/GUI/MainFrame.cpp:1260 +msgid "Export Config Bundle With Physical Printers" +msgstr "Exportar Paquete de Configuración Con Impresoras Físicas" + +#: src/slic3r/GUI/NotificationManager.cpp:1113 +msgid "Export G-Code." +msgstr "Exportar Código G." + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 +#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +msgid "Export G-code" +msgstr "Exportar código G" + +#: src/slic3r/GUI/MainFrame.cpp:1235 +msgid "Export G-code to SD Card / Flash Drive" +msgstr "Exportar código G a la Tarjeta SD / Unidad Flash" + +#: src/libslic3r/PrintConfig.cpp:4238 +msgid "Export OBJ" +msgstr "Exportar OBJ" + +#: src/slic3r/GUI/Plater.cpp:2865 +msgid "Export OBJ file:" +msgstr "Exportar archivo OBJ:" + +#: src/slic3r/GUI/MainFrame.cpp:1239 +msgid "Export Plate as &STL" +msgstr "Exportar Plataforma como &STL" + +#: src/slic3r/GUI/MainFrame.cpp:1242 +msgid "Export Plate as STL &Including Supports" +msgstr "Exportar plataforma como STL &Incluyendo Soportes" + +#: src/libslic3r/PrintConfig.cpp:4250 +msgid "Export SLA" +msgstr "Exportar SLA" + +#: src/libslic3r/PrintConfig.cpp:4266 +msgid "Export STL" +msgstr "Exportar STL" + +#: src/slic3r/GUI/Plater.cpp:2846 +msgid "Export STL file:" +msgstr "Exportar archivo STL:" + #: src/slic3r/GUI/MainFrame.cpp:1260 msgid "Export all presets including physical printers to file" msgstr "" @@ -4186,14 +4161,6 @@ msgstr "" msgid "Export all presets to file" msgstr "Exportar todos los ajustes al archivo" -#: src/libslic3r/PrintConfig.cpp:4261 -msgid "Export AMF" -msgstr "Exportar AMF" - -#: src/slic3r/GUI/Plater.cpp:2853 -msgid "Export AMF file:" -msgstr "Exportar archivo AMF:" - #: src/slic3r/GUI/GUI_Factories.cpp:715 msgid "Export as STL" msgstr "Exportar como STL" @@ -4202,14 +4169,6 @@ msgstr "Exportar como STL" msgid "Export config" msgstr "Exportar configuración" -#: src/slic3r/GUI/MainFrame.cpp:1257 -msgid "Export Config &Bundle" -msgstr "Exportar Conjunto de A&justes" - -#: src/slic3r/GUI/MainFrame.cpp:1260 -msgid "Export Config Bundle With Physical Printers" -msgstr "Exportar Paquete de Configuración Con Impresoras Físicas" - #: src/slic3r/GUI/MainFrame.cpp:1254 msgid "Export current configuration to file" msgstr "Exportar la configuración actual al archivo" @@ -4237,55 +4196,14 @@ msgstr "" "Exportar nombres de ruta completos de las fuentes de los modelos y de piezas " "a archivos 3mf y amf" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 -msgid "Export G-code" -msgstr "Exportar código G" - -#: src/slic3r/GUI/MainFrame.cpp:1235 -msgid "Export G-code to SD Card / Flash Drive" -msgstr "Exportar código G a la Tarjeta SD / Unidad Flash" - -#: src/slic3r/GUI/NotificationManager.cpp:1113 -msgid "Export G-Code." -msgstr "Exportar Código G." - -#: src/libslic3r/PrintConfig.cpp:4238 -msgid "Export OBJ" -msgstr "Exportar OBJ" - -#: src/slic3r/GUI/Plater.cpp:2865 -msgid "Export OBJ file:" -msgstr "Exportar archivo OBJ:" - #: src/slic3r/Utils/FixModelByWin10.cpp:379 msgid "Export of a temporary 3mf file failed" msgstr "La exportación de un archivo temporal de 3mf falló" -#: src/slic3r/GUI/MainFrame.cpp:1239 -msgid "Export Plate as &STL" -msgstr "Exportar Plataforma como &STL" - -#: src/slic3r/GUI/MainFrame.cpp:1242 -msgid "Export Plate as STL &Including Supports" -msgstr "Exportar plataforma como STL &Incluyendo Soportes" - -#: src/libslic3r/PrintConfig.cpp:4250 -msgid "Export SLA" -msgstr "Exportar SLA" - #: src/slic3r/GUI/Preferences.cpp:148 msgid "Export sources full pathnames to 3mf and amf" msgstr "Exportar nombres de ruta completos de las fuentes a 3mf y amf" -#: src/libslic3r/PrintConfig.cpp:4266 -msgid "Export STL" -msgstr "Exportar STL" - -#: src/slic3r/GUI/Plater.cpp:2846 -msgid "Export STL file:" -msgstr "Exportar archivo STL:" - #: src/libslic3r/PrintConfig.cpp:4257 msgid "Export the model(s) as 3MF." msgstr "Exportar el(los) objeto(s) como 3MF." @@ -4314,6 +4232,10 @@ msgstr "Exportar trayectorias de herramientas como OBJ" msgid "Export." msgstr "Exportar." +#: src/libslic3r/Print.cpp:863 +msgid "Exporting G-code" +msgstr "Exportando código G" + #: src/slic3r/GUI/MainFrame.cpp:1809 msgid "Exporting configuration bundle" msgstr "Exportando el paquete de configuración" @@ -4322,10 +4244,6 @@ msgstr "Exportando el paquete de configuración" msgid "Exporting finished." msgstr "Exportación finalizada." -#: src/libslic3r/Print.cpp:863 -msgid "Exporting G-code" -msgstr "Exportando código G" - #: src/slic3r/Utils/FixModelByWin10.cpp:221 #: src/slic3r/Utils/FixModelByWin10.cpp:362 msgid "Exporting source model" @@ -4353,10 +4271,6 @@ msgstr "Tiempo de exposición" msgid "External perimeter" msgstr "Perímetro externo" -#: src/slic3r/GUI/PresetHints.cpp:170 -msgid "external perimeters" -msgstr "perímetros externos" - #: src/libslic3r/PrintConfig.cpp:727 src/libslic3r/PrintConfig.cpp:739 msgid "External perimeters" msgstr "Perímetros externos" @@ -4402,6 +4316,10 @@ msgstr "Extrusor %d" msgid "Extruder (tool) is changed to Extruder \"%1%\"" msgstr "El Extrusor (herramienta) se cambia al Extrusor \"%1%\"" +#: src/libslic3r/PrintConfig.cpp:804 +msgid "Extruder Color" +msgstr "Color del extrusor" + #: src/slic3r/GUI/WipeTowerDialog.cpp:300 msgid "Extruder changed to" msgstr "El extrusor cambia a" @@ -4410,10 +4328,6 @@ msgstr "El extrusor cambia a" msgid "Extruder clearance" msgstr "Separación del extrusor" -#: src/libslic3r/PrintConfig.cpp:804 -msgid "Extruder Color" -msgstr "Color del extrusor" - #: src/libslic3r/PrintConfig.cpp:811 msgid "Extruder offset" msgstr "Offset del extrusor" @@ -4435,22 +4349,10 @@ msgstr "Contador de extrusores" msgid "Extrusion" msgstr "Extrusión" -#: src/libslic3r/PrintConfig.cpp:821 -msgid "Extrusion axis" -msgstr "Eje de extrusión" - -#: src/libslic3r/PrintConfig.cpp:827 -msgid "Extrusion multiplier" -msgstr "Multiplicador de extrusión" - #: src/slic3r/GUI/ConfigWizard.cpp:1567 msgid "Extrusion Temperature:" msgstr "Temperatura de Extrusión:" -#: src/slic3r/GUI/Tab.cpp:1650 -msgid "Extrusion width" -msgstr "Ancho de extrusión" - #: src/slic3r/GUI/GUI_Factories.cpp:134 src/libslic3r/PrintConfig.cpp:728 #: src/libslic3r/PrintConfig.cpp:838 src/libslic3r/PrintConfig.cpp:1195 #: src/libslic3r/PrintConfig.cpp:1455 src/libslic3r/PrintConfig.cpp:1956 @@ -4459,6 +4361,22 @@ msgstr "Ancho de extrusión" msgid "Extrusion Width" msgstr "Ancho de Extrusión" +#: src/libslic3r/PrintConfig.cpp:821 +msgid "Extrusion axis" +msgstr "Eje de extrusión" + +#: src/libslic3r/PrintConfig.cpp:827 +msgid "Extrusion multiplier" +msgstr "Multiplicador de extrusión" + +#: src/slic3r/GUI/Tab.cpp:1650 +msgid "Extrusion width" +msgstr "Ancho de extrusión" + +#: src/slic3r/GUI/ConfigWizard.cpp:2097 +msgid "FFF Technology Printers" +msgstr "Impresoras de Tecnología FFF" + #: src/slic3r/GUI/Plater.cpp:213 msgid "Facets" msgstr "Facetas" @@ -4467,10 +4385,6 @@ msgstr "Facetas" msgid "Faded layers" msgstr "Capas descoloridas" -#: src/libslic3r/miniz_extension.cpp:103 -msgid "failed finding central directory" -msgstr "búsqueda de directorio central fallida" - #: src/slic3r/GUI/Plater.cpp:2516 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." @@ -4493,6 +4407,10 @@ msgstr "No se pudo activar la instantánea de configuración." msgid "Failed to drill some holes into the model" msgstr "Fallo en la perforación de algunos agujeros en el modelo" +#: src/slic3r/GUI/GCodeViewer.cpp:3296 +msgid "Fan Speed (%)" +msgstr "Velocidad Ventilador (%)" + #: src/slic3r/GUI/Tab.cpp:2007 msgid "Fan settings" msgstr "Configuración del ventilador" @@ -4501,10 +4419,6 @@ msgstr "Configuración del ventilador" msgid "Fan speed" msgstr "Velocidad del ventilador" -#: src/slic3r/GUI/GCodeViewer.cpp:3296 -msgid "Fan Speed (%)" -msgstr "Velocidad Ventilador (%)" - #: src/slic3r/GUI/PresetHints.cpp:55 #, boost-format msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%." @@ -4561,19 +4475,41 @@ msgstr "Tipo de función" msgid "Feature types" msgstr "Tipos de funciones" -#: src/slic3r/GUI/ConfigWizard.cpp:2097 -msgid "FFF Technology Printers" -msgstr "Impresoras de Tecnología FFF" - #: src/slic3r/GUI/GCodeViewer.cpp:3696 src/slic3r/GUI/GCodeViewer.cpp:3722 #: src/slic3r/GUI/GUI.cpp:339 src/slic3r/GUI/Plater.cpp:818 #: src/slic3r/GUI/Tab.cpp:1962 src/slic3r/GUI/Tab.cpp:1963 msgid "Filament" msgstr "Filamento" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 -msgid "filament" -msgstr "filamento" +#: src/slic3r/GUI/ConfigWizard.cpp:1489 +msgid "Filament Diameter:" +msgstr "Diámetro del filamento:" + +#: src/libslic3r/GCode.cpp:725 +msgid "Filament End G-code" +msgstr "Código G Final del Filamento" + +#: src/slic3r/GUI/Tab.cpp:1861 +msgid "Filament Overrides" +msgstr "Anulaciones de filamentos" + +#: src/slic3r/GUI/ConfigWizard.cpp:2912 +msgid "Filament Profiles Selection" +msgstr "Selección Perfiles de Filamento" + +#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 +#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 +#: src/slic3r/GUI/Tab.hpp:448 +msgid "Filament Settings" +msgstr "Configuración del filamento" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 +msgid "Filament Settings Tab" +msgstr "Pestaña Ajustes Filamento" + +#: src/libslic3r/GCode.cpp:718 +msgid "Filament Start G-code" +msgstr "Código G Inicial del Filamento" #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Filament and Nozzle Diameters" @@ -4584,14 +4520,6 @@ msgstr "Filamento y diámetros de boquilla" msgid "Filament at extruder %1%" msgstr "Filamento en extrusor %1%" -#: src/slic3r/GUI/ConfigWizard.cpp:1489 -msgid "Filament Diameter:" -msgstr "Diámetro del filamento:" - -#: src/libslic3r/GCode.cpp:725 -msgid "Filament End G-code" -msgstr "Código G Final del Filamento" - #: src/libslic3r/PrintConfig.cpp:936 msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " @@ -4608,36 +4536,14 @@ msgstr "Tiempo de carga de filamento" msgid "Filament notes" msgstr "Notas del filamento" -#: src/slic3r/GUI/Tab.cpp:1861 -msgid "Filament Overrides" -msgstr "Anulaciones de filamentos" - #: src/libslic3r/PrintConfig.cpp:1920 msgid "Filament parking position" msgstr "Posición de aparcar el filamento" -#: src/slic3r/GUI/ConfigWizard.cpp:2912 -msgid "Filament Profiles Selection" -msgstr "Selección Perfiles de Filamento" - #: src/slic3r/GUI/Tab.cpp:2024 msgid "Filament properties" msgstr "Propiedades del filamento" -#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 -#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 -msgid "Filament Settings" -msgstr "Configuración del filamento" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 -msgid "Filament Settings Tab" -msgstr "Pestaña Ajustes Filamento" - -#: src/libslic3r/GCode.cpp:718 -msgid "Filament Start G-code" -msgstr "Código G Inicial del Filamento" - #: src/libslic3r/PrintConfig.cpp:1011 msgid "Filament type" msgstr "Tipo de filamento" @@ -4646,58 +4552,18 @@ msgstr "Tipo de filamento" msgid "Filament unload time" msgstr "Tiempo de descarga del filamento" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 -msgid "filaments" -msgstr "filamentos" - #: src/slic3r/GUI/ConfigWizard.cpp:752 src/slic3r/GUI/ConfigWizard.cpp:2043 #: src/slic3r/GUI/ConfigWizard.cpp:2912 msgid "Filaments" msgstr "Filamentos" -#: src/libslic3r/miniz_extension.cpp:131 -msgid "file close failed" -msgstr "cierre del archivo fallido" - -#: src/libslic3r/miniz_extension.cpp:125 -msgid "file create failed" -msgstr "creación del archivo fallida" - -#: src/slic3r/GUI/Plater.cpp:3529 -msgid "File for the replace wasn't selected" -msgstr "El archivo para el reemplazo no fue seleccionado" - #: src/slic3r/GUI/MainFrame.cpp:1626 msgid "File Not Found" msgstr "Archivo no encontrado" -#: src/libslic3r/miniz_extension.cpp:145 -msgid "file not found" -msgstr "archivo no encontrado" - -#: src/libslic3r/miniz_extension.cpp:123 -msgid "file open failed" -msgstr "apertura de archivo fallida" - -#: src/libslic3r/miniz_extension.cpp:129 -msgid "file read failed" -msgstr "lectura del archivo fallida" - -#: src/libslic3r/miniz_extension.cpp:133 -msgid "file seek failed" -msgstr "búsqueda de archivo fallida" - -#: src/libslic3r/miniz_extension.cpp:135 -msgid "file stat failed" -msgstr "estadística de archivos fallida" - -#: src/libslic3r/miniz_extension.cpp:95 -msgid "file too large" -msgstr "archivo demasiado grande" - -#: src/libslic3r/miniz_extension.cpp:127 -msgid "file write failed" -msgstr "escritura del archivo fallida" +#: src/slic3r/GUI/Plater.cpp:3529 +msgid "File for the replace wasn't selected" +msgstr "El archivo para el reemplazo no fue seleccionado" #: src/slic3r/GUI/PrintHostDialogs.cpp:252 msgid "Filename" @@ -4776,14 +4642,6 @@ msgstr "Terminado" msgid "Firmware" msgstr "Firmware" -#: src/slic3r/GUI/FirmwareDialog.cpp:787 -msgid "Firmware flasher" -msgstr "Flasheador de firmware" - -#: src/slic3r/GUI/FirmwareDialog.cpp:812 -msgid "Firmware image:" -msgstr "Imagen del firmware:" - #: src/slic3r/GUI/Tab.cpp:3007 msgid "Firmware Retraction" msgstr "Retracción del firmware" @@ -4792,6 +4650,14 @@ msgstr "Retracción del firmware" msgid "Firmware Type" msgstr "Tipo de Firmware" +#: src/slic3r/GUI/FirmwareDialog.cpp:787 +msgid "Firmware flasher" +msgstr "Flasheador de firmware" + +#: src/slic3r/GUI/FirmwareDialog.cpp:812 +msgid "Firmware image:" +msgstr "Imagen del firmware:" + #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:116 msgid "First color" msgstr "Primer color" @@ -4901,10 +4767,6 @@ msgstr "Flujo" msgid "Flow rate" msgstr "Tasa de flujo" -#: src/slic3r/GUI/PresetHints.cpp:188 -msgid "flow rate is maximized" -msgstr "se maximiza el flujo de material" - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:670 #, boost-format msgid "" @@ -4974,16 +4836,6 @@ msgstr "" msgid "For support enforcers only" msgstr "Sólo para forzado de soportes" -#. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4266 -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 "" -"para el botón izquierdo: indica un ajuste que no es del sistema (o no " -"predeterminado),\n" -"para el botón derecho: indica que la configuración no se ha modificado." - #: src/slic3r/GUI/ConfigManipulation.cpp:142 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -5039,10 +4891,6 @@ msgstr "Encontradas palabras clave reservadas en" msgid "From" msgstr "Desde" -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "from" -msgstr "desde" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1949 msgid "From Object List You can't delete the last solid part from object." msgstr "" @@ -5061,10 +4909,6 @@ msgstr "Vista frontal" msgid "Full fan speed at layer" msgstr "Velocidad máxima del ventilador en la capa" -#: src/slic3r/GUI/Tab.cpp:1412 -msgid "full profile name" -msgstr "nombre completo perfil" - #: src/slic3r/GUI/MainFrame.cpp:1435 msgid "Fullscreen" msgstr "Pantalla completa" @@ -5079,6 +4923,12 @@ msgstr "" "¿Sabías que puedes poner el PrusaSlicer en modo de pantalla completa? " "Utiliza la tecla de acceso rápido F11." +#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 +#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 +#: src/libslic3r/PrintConfig.cpp:1286 +msgid "Fuzzy Skin" +msgstr "Piel Difusa" + #: resources/data/hints.ini: [hint:Fuzzy skin] msgid "" "Fuzzy skin\n" @@ -5092,12 +4942,6 @@ msgstr "" "puedes utilizar modificadores para aplicar la piel difusa sólo a una parte " "de tu modelo." -#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 -#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 -#: src/libslic3r/PrintConfig.cpp:1286 -msgid "Fuzzy Skin" -msgstr "Piel Difusa" - #: src/slic3r/GUI/Tab.cpp:1500 msgid "Fuzzy skin (experimental)" msgstr "Piel difusa (experimental)" @@ -5114,10 +4958,6 @@ msgstr "Espesor de la piel difusa" msgid "Fuzzy skin type." msgstr "Tipo de Piel difusa." -#: src/libslic3r/PrintConfig.cpp:1057 -msgid "g" -msgstr "g" - #: src/slic3r/GUI/MainFrame.cpp:1661 msgid "G-code" msgstr "Código G" @@ -5160,13 +5000,13 @@ msgstr "Miniaturas de código G" msgid "G-code viewer" msgstr "Visor código G" -#: src/libslic3r/PrintConfig.cpp:1006 -msgid "g/cm³" -msgstr "g/cm³" +#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 +msgid "GNU Affero General Public License, version 3" +msgstr "GNU Affero General Public License, versión 3" -#: src/libslic3r/PrintConfig.cpp:3288 -msgid "g/ml" -msgstr "g/ml" +#: src/slic3r/GUI/Preferences.cpp:343 +msgid "GUI" +msgstr "IU" #: src/slic3r/GUI/GUI_Factories.cpp:471 msgid "Gallery" @@ -5219,10 +5059,6 @@ msgstr "Generar soportes" msgid "Generate supports for the models" msgstr "Generar soportes para los modelos" -#: src/slic3r/GUI/Plater.cpp:4107 -msgid "generated warnings" -msgstr "avisos generados" - #: src/libslic3r/Print.cpp:867 msgid "Generating G-code" msgstr "Generando G-code" @@ -5267,10 +5103,6 @@ msgstr "Generando buffer de vértice" msgid "Generic" msgstr "Genérico" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 -msgid "Gizmo cut" -msgstr "Herramienta de Corte" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:155 msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM pintado de costuras" @@ -5279,14 +5111,6 @@ msgstr "Gizmo FDM pintado de costuras" msgid "Gizmo FDM paint-on supports" msgstr "Gizmo Soportes pintables FDM" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 -msgid "Gizmo move" -msgstr "Herramienta de Movimiento" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 -msgid "Gizmo move: Press to snap by 1mm" -msgstr "Herramienta de mover: Pulsa para ajustar en pasos de 1 mm" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:156 msgid "Gizmo Multi Material painting" msgstr "Gizmo Pintura multimaterial" @@ -5295,6 +5119,26 @@ msgstr "Gizmo Pintura multimaterial" msgid "Gizmo Place face on bed" msgstr "Gizmo Colocar cara en la base" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 +msgid "Gizmo SLA hollow" +msgstr "Herramienta de vaciado SLA" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 +msgid "Gizmo SLA support points" +msgstr "Herramienta de puntos de soporte SLA" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 +msgid "Gizmo cut" +msgstr "Herramienta de Corte" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 +msgid "Gizmo move" +msgstr "Herramienta de Movimiento" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 +msgid "Gizmo move: Press to snap by 1mm" +msgstr "Herramienta de mover: Pulsa para ajustar en pasos de 1 mm" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:149 msgid "Gizmo rotate" msgstr "Herramienta de Rotación" @@ -5328,14 +5172,6 @@ msgstr "" "Herramienta de escala: Escala las piezas seleccionadas para ajustarse al " "volumen de impresión" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 -msgid "Gizmo SLA hollow" -msgstr "Herramienta de vaciado SLA" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 -msgid "Gizmo SLA support points" -msgstr "Herramienta de puntos de soporte SLA" - #: src/slic3r/GUI/GLCanvas3D.cpp:2557 #: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:560 msgid "Gizmo-Move" @@ -5358,10 +5194,6 @@ msgstr "Gizmo-Escalar" msgid "Gizmos" msgstr "Gizmos" -#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 -msgid "GNU Affero General Public License, version 3" -msgstr "GNU Affero General Public License, versión 3" - #: src/slic3r/GUI/ConfigWizard.cpp:1486 msgid "" "Good precision is required, so use a caliper and do multiple measurements " @@ -5382,14 +5214,36 @@ msgstr "Agrupar" msgid "Group manipulation" msgstr "Manipulación de grupos" -#: src/slic3r/GUI/Preferences.cpp:343 -msgid "GUI" -msgstr "IU" - #: src/libslic3r/PrintConfig.cpp:1154 msgid "Gyroid" msgstr "Giroide" +#: src/libslic3r/PrintConfig.cpp:352 +msgid "HTTP digest" +msgstr "HTTP digest" + +#: src/slic3r/Utils/Repetier.cpp:246 +#, boost-format +msgid "" +"HTTP status: %1%\n" +"Message body: \"%2%\"" +msgstr "" +"Estado HTTP: %1%\n" +"Cuerpo del mensaje: \"%2%\"" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 +#: src/libslic3r/PrintConfig.cpp:307 +msgid "HTTPS CA File" +msgstr "Archivo HTTPS CA" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" +"El archivo HTTPS CA es opcional. Sólo se necesita si vas a usar HTTPS con un " +"certificado auto-firmado." + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:39 msgid "Head diameter" msgstr "Diámetro de la cabeza" @@ -5563,14 +5417,14 @@ msgstr "Cambio del parámetro de vaciar el interior" msgid "Honeycomb" msgstr "Panal de abeja" -#: src/slic3r/GUI/Tab.cpp:1469 -msgid "Horizontal shells" -msgstr "Carcasas horizontales" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:254 msgid "Horizontal Slider" msgstr "Control Deslizante Horizontal" +#: src/slic3r/GUI/Tab.cpp:1469 +msgid "Horizontal shells" +msgstr "Carcasas horizontales" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:219 #: src/slic3r/GUI/KBShortcutsDialog.cpp:223 msgid "Horizontal slider - Move active thumb Left" @@ -5638,40 +5492,14 @@ msgstr "Cómo aplicar límites" msgid "How to apply the Machine Limits" msgstr "Cómo aplicar los Límites Máquina" -#: src/libslic3r/PrintConfig.cpp:352 -msgid "HTTP digest" -msgstr "HTTP digest" - -#: src/slic3r/Utils/Repetier.cpp:246 -#, boost-format -msgid "" -"HTTP status: %1%\n" -"Message body: \"%2%\"" -msgstr "" -"Estado HTTP: %1%\n" -"Cuerpo del mensaje: \"%2%\"" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 -#: src/libslic3r/PrintConfig.cpp:307 -msgid "HTTPS CA File" -msgstr "Archivo HTTPS CA" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." -msgstr "" -"El archivo HTTPS CA es opcional. Sólo se necesita si vas a usar HTTPS con un " -"certificado auto-firmado." +#: src/slic3r/GUI/PrintHostDialogs.cpp:247 +msgid "ID" +msgstr "ID" #: src/slic3r/GUI/Preferences.cpp:694 msgid "Icon size in a respect to the default size" msgstr "Tamaño del icono respecto al tamaño original" -#: src/slic3r/GUI/PrintHostDialogs.cpp:247 -msgid "ID" -msgstr "ID" - #: src/libslic3r/PrintConfig.cpp:2511 msgid "" "If checked, supports will be generated automatically based on the overhang " @@ -5708,6 +5536,42 @@ msgstr "" "temporal. Cuando hay un nuevo ajuste disponible, este se podrá incorporar y " "usar cuando la aplicación se vuelva a iniciar." +#: src/slic3r/GUI/Preferences.cpp:289 +msgid "If enabled, PrusaSlicer will be open at the position it was closed" +msgstr "Si se activa, PrusaSlicer se abrirá en la posición en la que se cerró" + +#: src/slic3r/GUI/Preferences.cpp:384 +msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." +msgstr "" +"Si está activado, PrusaSlicer no abrirá los hipervínculos en tu navegador." + +#: src/slic3r/GUI/Preferences.cpp:410 +msgid "" +"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " +"will be used." +msgstr "" +"Si se activa, las Pestañas de Configuración se colocarán como elementos de " +"menú. Si se desactiva, se utilizará la antigua interfaz de usuario." + +#: src/slic3r/GUI/Preferences.cpp:177 +msgid "" +"If enabled, Slic3r 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, Slic3r 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." + +#: src/slic3r/GUI/Preferences.cpp:498 +msgid "" +"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." +msgstr "" +"Si se activa, la interfaz de usuario utilizará los colores del modo oscuro. " +"Si se desactiva, se utilizará la antigua interfaz de usuario." + #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:174 msgid "If enabled, a repetition of the next random color will be allowed." msgstr "" @@ -5721,6 +5585,14 @@ 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/Preferences.cpp:150 +msgid "" +"If enabled, allows the Reload from disk command to automatically find and " +"load the files when invoked." +msgstr "" +"Si está activado, permite que la orden de Recarga desde el disco busque y " +"cargue los ficheros cuando se invoque." + #: src/slic3r/GUI/ConfigWizard.cpp:1250 msgid "" "If enabled, allows the Reload from disk command to automatically find and " @@ -5733,14 +5605,6 @@ msgstr "" "Si 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:150 -msgid "" -"If enabled, allows the Reload from disk command to automatically find and " -"load the files when invoked." -msgstr "" -"Si está activado, permite que la orden de Recarga desde el disco busque y " -"cargue los ficheros cuando se invoque." - #: src/slic3r/GUI/Preferences.cpp:509 msgid "" "If enabled, application will use the standard Windows system menu,\n" @@ -5773,15 +5637,6 @@ msgstr "" "desactiva, los cambios realizados con el deslizador secuencial, en la vista " "previa, se aplican a todo el código G." -#: src/slic3r/GUI/Preferences.cpp:289 -msgid "If enabled, PrusaSlicer will be open at the position it was closed" -msgstr "Si se activa, PrusaSlicer se abrirá en la posición en la que se cerró" - -#: src/slic3r/GUI/Preferences.cpp:384 -msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." -msgstr "" -"Si está activado, PrusaSlicer no abrirá los hipervínculos en tu navegador." - #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:166 msgid "If enabled, random sequence of the selected extruders will be used." msgstr "" @@ -5797,6 +5652,14 @@ msgid "If enabled, reverses the direction of zoom with mouse wheel" msgstr "" "Si está habilitado, invierte la dirección del zoom con la rueda del mouse" +#: src/slic3r/GUI/Preferences.cpp:260 +msgid "" +"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." +"gcode files." +msgstr "" +"Si está habilitado, establece el Visor de CódigoG de PrusaSlicer como " +"aplicación predeterminada para abrir archivos .gcode." + #: src/slic3r/GUI/Preferences.cpp:159 msgid "If enabled, sets PrusaSlicer as default application to open .3mf files." msgstr "" @@ -5809,34 +5672,6 @@ msgstr "" "Si está habilitado, establece a PrusaSlicer como aplicación predeterminada " "para abrir archivos .stl." -#: src/slic3r/GUI/Preferences.cpp:260 -msgid "" -"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." -"gcode files." -msgstr "" -"Si está habilitado, establece el Visor de CódigoG de PrusaSlicer como " -"aplicación predeterminada para abrir archivos .gcode." - -#: src/slic3r/GUI/Preferences.cpp:410 -msgid "" -"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " -"will be used." -msgstr "" -"Si se activa, las Pestañas de Configuración se colocarán como elementos de " -"menú. Si se desactiva, se utilizará la antigua interfaz de usuario." - -#: src/slic3r/GUI/Preferences.cpp:177 -msgid "" -"If enabled, Slic3r 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, Slic3r 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." - #: src/slic3r/GUI/Preferences.cpp:270 msgid "" "If enabled, the 3D scene will be rendered in Retina resolution. If you are " @@ -5893,13 +5728,6 @@ msgstr "" "hacia abajo para imprimir la torre de limpieza. El usuario es responsable de " "garantizar que no haya colisión con la impresión." -#: src/slic3r/GUI/Preferences.cpp:498 -msgid "" -"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." -msgstr "" -"Si se activa, la interfaz de usuario utilizará los colores del modo oscuro. " -"Si se desactiva, se utilizará la antigua interfaz de usuario." - #: src/slic3r/GUI/Preferences.cpp:328 msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" @@ -6009,15 +5837,6 @@ msgstr "" "segundos, la velocidad de los movimientos de impresión se reducirá para " "extender la duración a este valor." -#: src/libslic3r/PrintConfig.cpp:852 -msgid "" -"If this is enabled, fan will never be disabled and will be kept running at " -"least at its minimum speed. Useful for PLA, harmful for ABS." -msgstr "" -"Si esto está habilitado, el ventilador nunca se desactivará y se mantendrá " -"funcionando al menos a su velocidad mínima. Útil para PLA, no recomendado " -"para ABS." - #: src/slic3r/GUI/Preferences.cpp:131 msgid "" "If this is enabled, Slic3r will auto-center objects around the print bed " @@ -6042,6 +5861,15 @@ msgstr "" "Si esto está habilitado, Slic3r solicitará el último directorio de salida en " "lugar del que contiene los archivos de entrada." +#: src/libslic3r/PrintConfig.cpp:852 +msgid "" +"If this is enabled, fan will never be disabled and will be kept running at " +"least at its minimum speed. Useful for PLA, harmful for ABS." +msgstr "" +"Si esto está habilitado, el ventilador nunca se desactivará y se mantendrá " +"funcionando al menos a su velocidad mínima. Útil para PLA, no recomendado " +"para ABS." + #: src/slic3r/GUI/Preferences.cpp:214 msgid "" "If this is enabled, when starting PrusaSlicer and another instance of the " @@ -6180,26 +6008,6 @@ msgstr "Importar configuración desde un &Proyecto" msgid "Import Config from ini/amf/3mf/gcode" msgstr "Importar Configuración desde ini/amf/3mf/gcode" -#: src/slic3r/GUI/Plater.cpp:5265 -msgid "Import config only" -msgstr "Importar configuración solo" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 -msgid "Import file" -msgstr "Importar archivo" - -#: src/slic3r/GUI/Plater.cpp:5264 -msgid "Import geometry only" -msgstr "Importar geometría solo" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 -msgid "Import model and profile" -msgstr "Importar modelo y perfil" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 -msgid "Import model only" -msgstr "Importar modelo únicamente" - #: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 msgid "Import Object" msgstr "Importar Objeto" @@ -6208,14 +6016,6 @@ msgstr "Importar Objeto" msgid "Import Objects" msgstr "Importar Objetos" -#: src/slic3r/Utils/FixModelByWin10.cpp:395 -msgid "Import of the repaired 3mf file failed" -msgstr "La importación del archivo 3mf reparado ha fallado" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 -msgid "Import profile only" -msgstr "Importar perfil únicamente" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Import SL1 / SL1S Archive" msgstr "Importar Archivo SL1 / SL1S" @@ -6236,6 +6036,38 @@ msgstr "Importar STL/OBJ/AM&F/3MF" 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/Plater.cpp:5265 +msgid "Import config only" +msgstr "Importar configuración solo" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 +msgid "Import file" +msgstr "Importar archivo" + +#: src/slic3r/GUI/Plater.cpp:5264 +msgid "Import geometry only" +msgstr "Importar geometría solo" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 +msgid "Import model and profile" +msgstr "Importar modelo y perfil" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 +msgid "Import model only" +msgstr "Importar modelo únicamente" + +#: src/slic3r/Utils/FixModelByWin10.cpp:395 +msgid "Import of the repaired 3mf file failed" +msgstr "La importación del archivo 3mf reparado ha fallado" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 +msgid "Import profile only" +msgstr "Importar perfil únicamente" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 +msgid "Importing SLA archive" +msgstr "Importando archivo SLA" + #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:164 msgid "Importing canceled." msgstr "Importación cancelada." @@ -6244,18 +6076,6 @@ msgstr "Importación cancelada." msgid "Importing done." msgstr "Importación finalizada." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 -msgid "Importing SLA archive" -msgstr "Importando archivo SLA" - -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -msgid "in" -msgstr "en" - #: src/libslic3r/GCode.cpp:764 msgid "In the custom G-code were found reserved keywords:" msgstr "En el código G personalizado se encontraron palabras clave reservadas:" @@ -6290,41 +6110,6 @@ msgstr "Aumentar Instancias" msgid "Increase/decrease edit area" msgstr "Incrementar/reducir area edición" -#. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4259 -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)." - -#. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4255 -msgid "" -"indicates that the settings are the same as the system (or default) values " -"for the current option group" -msgstr "" -"indica que los ajustes son los mismos que los valores del sistema (o por " -"defecto) para el grupo de opciones actual" - -#. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4271 -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.\n" -"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." - #: src/slic3r/GUI/ConfigManipulation.cpp:199 #: src/slic3r/GUI/GUI_Factories.cpp:55 src/slic3r/GUI/GUI_Factories.cpp:128 #: src/slic3r/GUI/Plater.cpp:460 src/slic3r/GUI/Tab.cpp:1506 @@ -6338,10 +6123,6 @@ msgstr "" msgid "Infill" msgstr "Relleno" -#: src/slic3r/GUI/PresetHints.cpp:174 -msgid "infill" -msgstr "relleno" - #: src/libslic3r/PrintConfig.cpp:1467 msgid "Infill before perimeters" msgstr "Rellenar antes que los perímetros" @@ -6389,6 +6170,11 @@ msgstr "Altura de la capa inicial" msgid "Inner brim only" msgstr "Sólo el borde interior" +#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 +#: src/slic3r/GUI/Field.cpp:1575 +msgid "Input value is out of range" +msgstr "El valor introducido está fuera de rango" + #: src/slic3r/GUI/Field.cpp:266 #, c-format, boost-format msgid "" @@ -6398,11 +6184,6 @@ msgstr "" "El valor introducido está fuera de rango\n" "¿Está seguro de que %s es un valor correcto y que deseas continuar?" -#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 -#: src/slic3r/GUI/Field.cpp:1575 -msgid "Input value is out of range" -msgstr "El valor introducido está fuera de rango" - #: resources/data/hints.ini: [hint:Insert Custom G-code] msgid "" "Insert Custom G-code\n" @@ -6476,10 +6257,6 @@ msgstr "Separación de patrón de interfaz" msgid "Interface shells" msgstr "Carcasas de interfaz" -#: src/libslic3r/miniz_extension.cpp:143 -msgid "internal error" -msgstr "error interno" - #: src/slic3r/GUI/GUI_App.cpp:713 #, boost-format msgid "Internal error: %1%" @@ -6490,6 +6267,10 @@ msgstr "Error interno: %1%" msgid "Internal infill" msgstr "Relleno interno" +#: src/slic3r/GUI/ConfigManipulation.cpp:329 +msgid "Invalid Head penetration" +msgstr "Penetración inválida de la cabeza" + #: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 msgid "Invalid data" msgstr "Datos inválidos" @@ -6499,18 +6280,6 @@ msgstr "Datos inválidos" msgid "Invalid file format." msgstr "Formato inválido de archivo." -#: src/libslic3r/miniz_extension.cpp:139 -msgid "invalid filename" -msgstr "nombre de archivo inválido" - -#: src/slic3r/GUI/ConfigManipulation.cpp:329 -msgid "Invalid Head penetration" -msgstr "Penetración inválida de la cabeza" - -#: src/libslic3r/miniz_extension.cpp:107 -msgid "invalid header or archive is corrupted" -msgstr "encabezado inválido o archivo está dañado" - #: src/slic3r/GUI/Field.cpp:397 #, boost-format msgid "" @@ -6526,14 +6295,19 @@ msgstr "" msgid "Invalid numeric input." msgstr "Entrada numérica no válida." -#: src/libslic3r/miniz_extension.cpp:137 -msgid "invalid parameter" -msgstr "parámetro inválido" - #: src/slic3r/GUI/ConfigManipulation.cpp:342 msgid "Invalid pinhead diameter" msgstr "Diámetro de la cabeza del pin inválido" +#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 +#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 +#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 +#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 +#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 +#: src/libslic3r/PrintConfig.cpp:1577 +msgid "Ironing" +msgstr "Alisado" + #: resources/data/hints.ini: [hint:Ironing] msgid "" "Ironing\n" @@ -6549,32 +6323,14 @@ msgstr "" "levantado. Lee más en la documentación. (Requiere el modo avanzado o " "experto). " -#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 -#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 -#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 -#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 -#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 -#: src/libslic3r/PrintConfig.cpp:1577 -msgid "Ironing" -msgstr "Alisado" - #: src/libslic3r/PrintConfig.cpp:1542 src/libslic3r/PrintConfig.cpp:1544 msgid "Ironing Type" msgstr "Tipo de alisado" -#: src/slic3r/GUI/GUI_App.cpp:266 -msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." -msgstr "está basado en Slic3r de Alessandro Ranellucci y la comunidad RepRap." - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:588 msgid "Is it safe?" msgstr "¿Es seguro?" -#. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 -msgid "is licensed under the" -msgstr "está licenciado bajo el/los" - #: src/slic3r/GUI/MainFrame.cpp:1114 msgid "Iso" msgstr "Iso" @@ -6633,15 +6389,6 @@ msgstr "Jitter" msgid "Jump to height" msgstr "Salta a la altura" -#: src/slic3r/GUI/DoubleSlider.cpp:1391 -#, c-format, boost-format -msgid "" -"Jump to height %s\n" -"or Set ruler mode" -msgstr "" -"Salta a la altura %s\n" -"o Fija el modo regla" - #: src/slic3r/GUI/DoubleSlider.cpp:1388 #, c-format, boost-format msgid "" @@ -6653,6 +6400,15 @@ msgstr "" "Fija el modo regla\n" "o Fija la secuencia del extrusor para toda la impresión" +#: src/slic3r/GUI/DoubleSlider.cpp:1391 +#, c-format, boost-format +msgid "" +"Jump to height %s\n" +"or Set ruler mode" +msgstr "" +"Salta a la altura %s\n" +"o Fija el modo regla" + #: src/slic3r/GUI/DoubleSlider.cpp:1385 src/slic3r/GUI/DoubleSlider.cpp:2254 msgid "Jump to move" msgstr "Saltar al movimiento" @@ -6695,9 +6451,25 @@ msgstr "Atajos de teclado" msgid "Keyboard shortcuts" msgstr "Atajos de teclado" -#: src/libslic3r/PrintConfig.cpp:3281 -msgid "kg" -msgstr "kg" +#: src/slic3r/GUI/Tab.cpp:4253 +msgid "LOCKED LOCK" +msgstr "CANDADO CERRADO" + +#: src/slic3r/GUI/Tab.cpp:4281 +msgid "" +"LOCKED LOCK icon indicates that the settings are the same as the system (or " +"default) values for the current option group" +msgstr "" +"El icono de CANDADO BLOQUEADO indica que los ajustes son los mismos que los " +"valores del sistema (por defecto) para el grupo de opciones actual" + +#: src/slic3r/GUI/Tab.cpp:4297 +msgid "" +"LOCKED LOCK icon indicates that the value is the same as the system (or " +"default) value." +msgstr "" +"El icono de CANDADO BLOQUEADO indica que el valor es el mismo que el del " +"sistema (por defecto)" #: src/libslic3r/PrintConfig.cpp:1353 msgid "Label objects" @@ -6751,23 +6523,11 @@ msgstr "Límites de altura de la capa" msgid "Layer range Settings to modify" msgstr "Ajustes del Rango de capas a modificar" -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 -#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 -#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 -#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 -#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 -msgid "layers" -msgstr "capas" - #: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4500 #: src/slic3r/GUI/Tab.cpp:4591 msgid "Layers" msgstr "Capas" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 -msgid "Layers and perimeters" -msgstr "Capas y perímetros" - #: src/slic3r/GUI/GUI_Factories.cpp:54 src/slic3r/GUI/GUI_Factories.cpp:127 #: src/libslic3r/PrintConfig.cpp:264 src/libslic3r/PrintConfig.cpp:381 #: src/libslic3r/PrintConfig.cpp:424 src/libslic3r/PrintConfig.cpp:433 @@ -6781,15 +6541,9 @@ msgstr "Capas y perímetros" msgid "Layers and Perimeters" msgstr "Capas y Perímetros" -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Bottom" -msgstr "Inferior" - -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Top" -msgstr "Superior" +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 +msgid "Layers and perimeters" +msgstr "Capas y perímetros" #: src/slic3r/GUI/Preferences.cpp:763 msgid "Layout Options" @@ -6804,6 +6558,14 @@ msgstr "Dejar \"%1%\" activado" msgid "Left" msgstr "Izquierda" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +msgid "Left Preset Value" +msgstr "Valor del Ajuste Izquierdo" + +#: src/slic3r/GUI/MainFrame.cpp:1127 +msgid "Left View" +msgstr "Vista izquierda" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 @@ -6820,14 +6582,6 @@ msgstr "Botón izquierdo del ratón" msgid "Left mouse button:" msgstr "Botón izquierdo del ratón:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 -msgid "Left Preset Value" -msgstr "Valor del Ajuste Izquierdo" - -#: src/slic3r/GUI/MainFrame.cpp:1127 -msgid "Left View" -msgstr "Vista izquierda" - #: src/slic3r/GUI/GUI_Preview.cpp:1060 msgid "Legend/Estimated printing time" msgstr "Leyenda/Tiempo de impresión estimado" @@ -6855,6 +6609,10 @@ msgstr "" "Los acuerdos de licencia de todos los programas (bibliotecas) siguientes " "forman parte del acuerdo de licencia de la aplicación" +#: src/libslic3r/PrintConfig.cpp:2153 +msgid "Lift Z" +msgstr "Levantar Z" + #: src/libslic3r/PrintConfig.cpp:4358 msgid "" "Lift the object above the bed when it is partially below. Enabled by " @@ -6863,10 +6621,6 @@ msgstr "" "Eleva el objeto por encima de la cama cuando está parcialmente debajo. " "Activado por defecto, usa --no-ensure-on-bed para desactivarlo." -#: src/libslic3r/PrintConfig.cpp:2153 -msgid "Lift Z" -msgstr "Levantar Z" - #: src/libslic3r/PrintConfig.cpp:1161 msgid "Lightning" msgstr "Lightning" @@ -6883,18 +6637,42 @@ msgstr "Lineal" msgid "Load" msgstr "Cargar" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 +msgid "Load Config from ini/amf/3mf/gcode and merge" +msgstr "Carga Configuración desde ini/amf/3mf/gcode y mezcla" + +#: src/slic3r/GUI/Plater.cpp:5408 +msgid "Load File" +msgstr "Cargar Archivo" + +#: src/slic3r/GUI/Plater.cpp:5413 +msgid "Load Files" +msgstr "Cargar Archivos" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Modifier" +msgstr "Cargar Modificador" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Part" +msgstr "Cargar pieza" + +#: src/slic3r/GUI/Plater.cpp:5100 +msgid "Load Project" +msgstr "Cargar Proyecto" + #: src/slic3r/GUI/MainFrame.cpp:1201 msgid "Load a model" msgstr "Cargar un modelo" -#: src/slic3r/GUI/MainFrame.cpp:1205 -msgid "Load an model saved with imperial units" -msgstr "Cargar un modelo guardado con unidades imperiales" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Load an SL1 / Sl1S archive" msgstr "Cargar un archivo SL1 / SL1S" +#: src/slic3r/GUI/MainFrame.cpp:1205 +msgid "Load an model saved with imperial units" +msgstr "Cargar un modelo guardado con unidades imperiales" + #: src/libslic3r/PrintConfig.cpp:4454 msgid "" "Load and store settings at the given directory. This is useful for " @@ -6923,10 +6701,6 @@ msgstr "" "mismo modo, puedes utilizar Archivo-Importar-Importar archivo SL1 / SL1S, " "que también te permite reconstruir modelos 3D a partir de los datos de voxel." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 -msgid "Load Config from ini/amf/3mf/gcode and merge" -msgstr "Carga Configuración desde ini/amf/3mf/gcode y mezcla" - #: src/slic3r/GUI/MainFrame.cpp:1217 msgid "Load configuration from project file" msgstr "Cargar configuración desde archivo de proyecto" @@ -6943,30 +6717,10 @@ msgstr "" msgid "Load exported configuration file" msgstr "Cargar archivo de configuración exportado" -#: src/slic3r/GUI/Plater.cpp:5408 -msgid "Load File" -msgstr "Cargar Archivo" - -#: src/slic3r/GUI/Plater.cpp:5413 -msgid "Load Files" -msgstr "Cargar Archivos" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Modifier" -msgstr "Cargar Modificador" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Part" -msgstr "Cargar pieza" - #: src/slic3r/GUI/MainFrame.cpp:1221 msgid "Load presets from a bundle" msgstr "Cargar ajustes de un paquete" -#: src/slic3r/GUI/Plater.cpp:5100 -msgid "Load Project" -msgstr "Cargar Proyecto" - #: src/slic3r/GUI/BedShapeDialog.cpp:203 msgid "Load shape from STL..." msgstr "Cargar forma desde STL..." @@ -6975,10 +6729,6 @@ msgstr "Cargar forma desde STL..." msgid "Load..." msgstr "Cargar..." -#: src/slic3r/GUI/WipeTowerDialog.cpp:309 -msgid "loaded" -msgstr "cargado" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1509 src/slic3r/GUI/Plater.cpp:2379 msgid "Loading" msgstr "Carga" @@ -7042,26 +6792,6 @@ msgstr "Coordenadas locales" msgid "Lock supports under new islands" msgstr "Bloquear soportes bajo nuevas islas" -#: src/slic3r/GUI/Tab.cpp:4253 -msgid "LOCKED LOCK" -msgstr "CANDADO CERRADO" - -#: src/slic3r/GUI/Tab.cpp:4281 -msgid "" -"LOCKED LOCK icon indicates that the settings are the same as the system (or " -"default) values for the current option group" -msgstr "" -"El icono de CANDADO BLOQUEADO indica que los ajustes son los mismos que los " -"valores del sistema (por defecto) para el grupo de opciones actual" - -#: src/slic3r/GUI/Tab.cpp:4297 -msgid "" -"LOCKED LOCK icon indicates that the value is the same as the system (or " -"default) value." -msgstr "" -"El icono de CANDADO BLOQUEADO indica que el valor es el mismo que el del " -"sistema (por defecto)" - #: src/libslic3r/PrintConfig.cpp:4457 msgid "Logging level" msgstr "Nivel de registro" @@ -7095,13 +6825,6 @@ msgstr "" "Los límites de la máquina no están establecidos, por lo tanto, el tiempo " "estimado de impresión puede no ser exacto." -#: src/slic3r/GUI/Tab.cpp:4224 -msgid "" -"Machine limits will be emitted to G-code and used to estimate print time." -msgstr "" -"Los límites de la máquina se emitirán al código G y se utilizarán para " -"calcular el tiempo de impresión." - #: src/slic3r/GUI/Tab.cpp:4227 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " @@ -7113,6 +6836,13 @@ msgstr "" "que la impresora puede aplicar un conjunto diferente de límites de la " "máquina." +#: src/slic3r/GUI/Tab.cpp:4224 +msgid "" +"Machine limits will be emitted to G-code and used to estimate print time." +msgstr "" +"Los límites de la máquina se emitirán al código G y se utilizarán para " +"calcular el tiempo de impresión." + #: src/libslic3r/GCode.cpp:576 msgid "" "Make sure the object is printable. This is usually caused by negligibly " @@ -7144,10 +6874,6 @@ msgstr "Pestaña Ajustes de Mate&rial" msgid "Material" msgstr "Material" -#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 -msgid "Material printing profile" -msgstr "Perfil de impresión del material" - #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 #: src/slic3r/GUI/Tab.hpp:522 @@ -7158,6 +6884,10 @@ msgstr "Configuraciones del material" msgid "Material Settings Tab" msgstr "Pestaña Ajustes de Material" +#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 +msgid "Material printing profile" +msgstr "Perfil de impresión del material" + #: src/libslic3r/PrintConfig.cpp:1749 src/libslic3r/PrintConfig.cpp:1758 msgid "Max" msgstr "Max" @@ -7186,10 +6916,6 @@ msgstr "Máxima altura de impresión" msgid "Max print speed" msgstr "Velocidad máxima de impresión" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 -msgid "max PrusaSlicer version" -msgstr "máxima versión PrusaSlicer" - #: src/libslic3r/PrintConfig.cpp:1800 msgid "Max volumetric slope negative" msgstr "Máx. Pendiente volumétrica negativa" @@ -7214,6 +6940,18 @@ msgstr "Distancia máxima entre soportes en las secciones con relleno ligero." msgid "Maximum acceleration E" msgstr "Máxima aceleración E" +#: src/libslic3r/PrintConfig.cpp:1661 +msgid "Maximum acceleration X" +msgstr "Máxima aceleración X" + +#: src/libslic3r/PrintConfig.cpp:1662 +msgid "Maximum acceleration Y" +msgstr "Máxima aceleración Y" + +#: src/libslic3r/PrintConfig.cpp:1663 +msgid "Maximum acceleration Z" +msgstr "Máxima aceleración Z" + #: src/libslic3r/PrintConfig.cpp:1740 msgid "Maximum acceleration for travel moves" msgstr "Aceleración máxima para movimientos de desplazamiento" @@ -7262,18 +7000,6 @@ msgstr "Aceleración máxima al retraer" msgid "Maximum acceleration when retracting (M204 R)" msgstr "Aceleración máxima al retraer (M204 R)" -#: src/libslic3r/PrintConfig.cpp:1661 -msgid "Maximum acceleration X" -msgstr "Máxima aceleración X" - -#: src/libslic3r/PrintConfig.cpp:1662 -msgid "Maximum acceleration Y" -msgstr "Máxima aceleración Y" - -#: src/libslic3r/PrintConfig.cpp:1663 -msgid "Maximum acceleration Z" -msgstr "Máxima aceleración Z" - #: src/slic3r/GUI/Tab.cpp:2655 msgid "Maximum accelerations" msgstr "Aceleraciones máximas" @@ -7305,6 +7031,18 @@ msgstr "Tiempo de exposición máximo" msgid "Maximum feedrate E" msgstr "Máximo avance E" +#: src/libslic3r/PrintConfig.cpp:1644 +msgid "Maximum feedrate X" +msgstr "Máxima velocidad en X" + +#: src/libslic3r/PrintConfig.cpp:1645 +msgid "Maximum feedrate Y" +msgstr "Máxima velocidad en Y" + +#: src/libslic3r/PrintConfig.cpp:1646 +msgid "Maximum feedrate Z" +msgstr "Máximo avance en Z" + #: src/libslic3r/PrintConfig.cpp:1653 msgid "Maximum feedrate of the E axis" msgstr "Máximo avance del eje E" @@ -7321,18 +7059,6 @@ msgstr "Máximo avance del eje Y" msgid "Maximum feedrate of the Z axis" msgstr "Máximo avance del eje Z" -#: src/libslic3r/PrintConfig.cpp:1644 -msgid "Maximum feedrate X" -msgstr "Máxima velocidad en X" - -#: src/libslic3r/PrintConfig.cpp:1645 -msgid "Maximum feedrate Y" -msgstr "Máxima velocidad en Y" - -#: src/libslic3r/PrintConfig.cpp:1646 -msgid "Maximum feedrate Z" -msgstr "Máximo avance en Z" - #: src/slic3r/GUI/Tab.cpp:2650 msgid "Maximum feedrates" msgstr "Avance máximo" @@ -7345,6 +7071,18 @@ msgstr "Tiempo de exposición inicial máximo" msgid "Maximum jerk E" msgstr "Máximo jerk E" +#: src/libslic3r/PrintConfig.cpp:1678 +msgid "Maximum jerk X" +msgstr "Máximo jerk X" + +#: src/libslic3r/PrintConfig.cpp:1679 +msgid "Maximum jerk Y" +msgstr "Máximo jerk Y" + +#: src/libslic3r/PrintConfig.cpp:1680 +msgid "Maximum jerk Z" +msgstr "Máximo jerk Z" + #: src/libslic3r/PrintConfig.cpp:1687 msgid "Maximum jerk of the E axis" msgstr "Maximo jerk del eje E" @@ -7361,18 +7099,6 @@ msgstr "Maximo jerk del eje Y" msgid "Maximum jerk of the Z axis" msgstr "Maximo jerk del eje Z" -#: src/libslic3r/PrintConfig.cpp:1678 -msgid "Maximum jerk X" -msgstr "Máximo jerk X" - -#: src/libslic3r/PrintConfig.cpp:1679 -msgid "Maximum jerk Y" -msgstr "Máximo jerk Y" - -#: src/libslic3r/PrintConfig.cpp:1680 -msgid "Maximum jerk Z" -msgstr "Máximo jerk Z" - #: src/libslic3r/PrintConfig.cpp:1423 msgid "Maximum length of the infill anchor" msgstr "Máxima longitud del relleno del anclaje" @@ -7466,10 +7192,6 @@ msgstr "Min" msgid "Min print speed" msgstr "Velocidad de impresión mínima" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 -msgid "min PrusaSlicer version" -msgstr "mínima versión PrusaSlicer" - #: src/libslic3r/PrintConfig.cpp:3597 msgid "Minimal distance of the support points" msgstr "Distancia mínima de los puntos de apoyo" @@ -7532,6 +7254,10 @@ msgstr "Avances míninos" msgid "Minimum initial exposure time" msgstr "Tiempo de exposición inicial mínimo" +#: src/slic3r/GUI/Tab.cpp:1475 +msgid "Minimum shell thickness" +msgstr "Espesor mínimo de pared" + #: resources/data/hints.ini: [hint:Minimum shell thickness] msgid "" "Minimum shell thickness\n" @@ -7545,10 +7271,6 @@ msgstr "" "característica es especialmente útil cuando se utiliza la función de altura " "de capa variable." -#: src/slic3r/GUI/Tab.cpp:1475 -msgid "Minimum shell thickness" -msgstr "Espesor mínimo de pared" - #: src/libslic3r/PrintConfig.cpp:2374 src/libslic3r/PrintConfig.cpp:2375 msgid "Minimum thickness of a top / bottom shell" msgstr "Espesor mínimo de una carcasa superior / inferior" @@ -7585,6 +7307,10 @@ msgstr "" "Ancho mínimo característico para mantener al realizar la compensación de pie " "de elefante." +#: src/slic3r/GUI/GUI_Factories.cpp:885 +msgid "Mirror" +msgstr "Reflejar" + #: resources/data/hints.ini: [hint:Mirror] msgid "" "Mirror\n" @@ -7595,18 +7321,14 @@ msgstr "" "Did you know that you can mirror the selected model to create a reversed " "version of it? Right-click the model, select Mirror and pick the mirror axis." -#: src/slic3r/GUI/GUI_Factories.cpp:885 -msgid "Mirror" -msgstr "Reflejar" +#: src/slic3r/GUI/GLCanvas3D.cpp:1684 +msgid "Mirror Object" +msgstr "Reflejar objeto" #: src/libslic3r/PrintConfig.cpp:3131 msgid "Mirror horizontally" msgstr "Reflejar horizontalmente" -#: src/slic3r/GUI/GLCanvas3D.cpp:1684 -msgid "Mirror Object" -msgstr "Reflejar objeto" - #: src/slic3r/GUI/GUI_Factories.cpp:885 msgid "Mirror the selected object" msgstr "Duplicar el objeto seleccionado" @@ -7637,133 +7359,10 @@ msgstr "Tipo de host de impresión no coincidente: %s" msgid "Mixed" msgstr "Mezclado" -#: src/libslic3r/PrintConfig.cpp:3274 -msgid "ml" -msgstr "ml" - -#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 -#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 -#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 -#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 -#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 -#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 -#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 -#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 -#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 -#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 -#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 -#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 -#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 -#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 -#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 -#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 -#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 -#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 -#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 -#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 -#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 -#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 -#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 -#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 -#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 -#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 -#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 -#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 -#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 -#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 -#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 -#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 -#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 -#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 -#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 -#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 -#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 -#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 -#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 -#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 -#: src/libslic3r/PrintConfig.cpp:3767 -msgid "mm" -msgstr "mm" - -#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 -#: src/libslic3r/PrintConfig.cpp:2148 -msgid "mm (zero to disable)" -msgstr "mm (cero para deshabilitar)" - -#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 -#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 -#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 -#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 -#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 -#: src/libslic3r/PrintConfig.cpp:2845 -msgid "mm or %" -msgstr "mm o %" - -#: src/libslic3r/PrintConfig.cpp:385 -msgid "mm or % (zero to disable)" -msgstr "mm or % (cero para deshabilitar)" - -#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 -#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 -#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 -#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 -#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 -#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 -#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 -#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 -#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 -#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 -#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 -msgid "mm/s" -msgstr "mm/s" - -#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 -#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 -#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 -#: src/libslic3r/PrintConfig.cpp:2859 -msgid "mm/s or %" -msgstr "mm/s o %" - -#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 -#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 -#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 -#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 -#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 -msgid "mm/s²" -msgstr "mm/s²" - -#: src/libslic3r/PrintConfig.cpp:2316 -msgid "mm²" -msgstr "mm²" - -#: src/libslic3r/PrintConfig.cpp:957 -msgid "mm³" -msgstr "mm³" - -#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 -#: src/libslic3r/PrintConfig.cpp:1782 -msgid "mm³/s" -msgstr "mm³/s" - -#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 -msgid "mm³/s²" -msgstr "mm³/s²" - #: src/slic3r/GUI/GUI_App.cpp:2245 msgid "Mode" msgstr "&Modo" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "model" -msgstr "modelo" - #: src/slic3r/GUI/BedShapeDialog.cpp:344 msgid "Model" msgstr "Modelo" @@ -7776,19 +7375,10 @@ msgstr "Reparación del modelo cancelada" msgid "Model repair finished" msgstr "Reparación del modelo terminada" -#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 -msgctxt "Mode" -msgid "Advanced" -msgstr "Avanzado" - #: src/slic3r/GUI/Tab.cpp:1319 msgid "Modifications to the current profile will be saved." msgstr "Se guardarán las modificaciones al perfil actual." -#: src/slic3r/GUI/GUI_App.cpp:2159 -msgid "modified" -msgstr "modificado" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Modifier" msgstr "Modificador" @@ -7797,14 +7387,6 @@ msgstr "Modificador" msgid "Modifiers" msgstr "Modificadores" -#: src/libslic3r/PrintConfig.cpp:3295 -msgid "money/bottle" -msgstr "dinero/botella" - -#: src/libslic3r/PrintConfig.cpp:1047 -msgid "money/kg" -msgstr "dinero/kg" - #: src/libslic3r/PrintConfig.cpp:705 msgid "Monotonic" msgstr "Monotónico" @@ -7836,6 +7418,10 @@ msgstr "Rueda del ratón:" msgid "Move" msgstr "Mover" +#: src/slic3r/GUI/GLCanvas3D.cpp:3245 +msgid "Move Object" +msgstr "Mover Objeto" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:234 msgid "Move active thumb Down" msgstr "Mover el pulgar activo hacia Abajo" @@ -7860,10 +7446,6 @@ msgstr "Mover plano de recorte" msgid "Move drainage hole" msgstr "Mover orificio de drenaje" -#: src/slic3r/GUI/GLCanvas3D.cpp:3245 -msgid "Move Object" -msgstr "Mover Objeto" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 msgid "Move point" msgstr "Mover punto" @@ -7958,6 +7540,14 @@ msgstr "Multiplicar las copias por este factor." msgid "N/A" msgstr "N/A" +#: src/slic3r/GUI/RammingChart.cpp:29 +msgid "NO RAMMING AT ALL" +msgstr "NO EMPUJAR EN ABSOLUTO" + +#: src/slic3r/GUI/GUI_Preview.cpp:728 +msgid "NOTE:" +msgstr "NOTA:" + #: src/slic3r/GUI/GUI_ObjectList.cpp:297 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:139 msgid "Name" @@ -7991,6 +7581,10 @@ msgstr "Nombres de ajustes relacionados con la impresora física" msgid "Nearest" msgstr "Más cercano" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 +msgid "Negative Volume" +msgstr "Volumen negativo" + #: resources/data/hints.ini: [hint:Negative volume] msgid "" "Negative volume\n" @@ -8005,14 +7599,18 @@ msgstr "" "fácilmente redimensionables directamente en PrusaSlicer. Lee más en la " "documentación. (Requiere el modo Avanzado o Experto)." -#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 -msgid "Negative Volume" -msgstr "Volumen negativo" - #: src/slic3r/GUI/BonjourDialog.cpp:55 msgid "Network lookup" msgstr "Búsqueda en la red" +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +msgid "New Project" +msgstr "Nuevo proyecto" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +msgid "New Value" +msgstr "Nuevo Valor" + #: src/slic3r/GUI/Preferences.cpp:744 msgid "New layout, access via settings button in the top menu" msgstr "" @@ -8027,10 +7625,6 @@ msgstr "La nueva versión prelanzamiento %1% está disponible." msgid "New printer preset selected" msgstr "Se ha seleccionado un nuevo ajuste de la impresora" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 -msgid "New Project" -msgstr "Nuevo proyecto" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:77 msgid "New project, clear plater" msgstr "Nuevo proyecto, limpiar plataforma" @@ -8040,10 +7634,6 @@ msgstr "Nuevo proyecto, limpiar plataforma" msgid "New release version %1% is available." msgstr "La nueva versión %1% está disponible." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 -msgid "New Value" -msgstr "Nuevo Valor" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 #, c-format, boost-format msgid "New version of %s is available" @@ -8096,10 +7686,6 @@ msgstr "" msgid "No previously sliced file." msgstr "Ningún archivo previamente laminado." -#: src/slic3r/GUI/RammingChart.cpp:29 -msgid "NO RAMMING AT ALL" -msgstr "NO EMPUJAR EN ABSOLUTO" - #: src/libslic3r/PrintConfig.cpp:2471 msgid "No sparse layers (EXPERIMENTAL)" msgstr "Sin capas dispersas (EXPERIMENTAL)" @@ -8124,18 +7710,10 @@ msgstr "Ninguno" msgid "Normal" msgstr "Normal" -#: src/slic3r/GUI/Plater.cpp:1428 -msgid "normal mode" -msgstr "modo normal" - #: src/slic3r/GUI/GCodeViewer.cpp:3754 msgid "Normal mode" msgstr "Modo normal" -#: src/libslic3r/miniz_extension.cpp:105 -msgid "not a ZIP archive" -msgstr "no es un archivo ZIP" - #: src/slic3r/GUI/BedShapeDialog.cpp:317 src/slic3r/GUI/BedShapeDialog.cpp:388 msgid "Not found:" msgstr "No encontrado:" @@ -8167,10 +7745,6 @@ msgstr[1] "" "Ten en cuenta que estas impresoras se eliminarán después de borrar el ajuste " "seleccionado." -#: src/slic3r/GUI/GUI_Preview.cpp:728 -msgid "NOTE:" -msgstr "NOTA:" - #: src/slic3r/GUI/Tab.cpp:2249 msgid "" "Note: All parameters from this group are moved to the Physical Printer " @@ -8214,14 +7788,14 @@ msgstr "Nota: Se necesita al menos la versión 1.1.0 de OctoPrint." msgid "Note: Repetier version at least 0.90.0 is required." msgstr "Nota: Se requiere la versión 0.90.0 de Repetier como mínimo." -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1197 -msgid "Note: some shortcuts work in (non)editing mode only." -msgstr "Nota: algunos accesos directos funcionan solo en modo de (no)edición." - #: src/slic3r/GUI/SavePresetDialog.cpp:137 msgid "Note: This preset will be replaced after saving" msgstr "Nota: Este ajuste se reemplazará tras guardar" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1197 +msgid "Note: some shortcuts work in (non)editing mode only." +msgstr "Nota: algunos accesos directos funcionan solo en modo de (no)edición." + #: src/slic3r/GUI/Tab.cpp:1716 src/slic3r/GUI/Tab.cpp:1717 #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 @@ -8240,14 +7814,14 @@ msgstr "Date cuenta" msgid "Notify about new releases" msgstr "Notificar sobre nuevos lanzamientos" -#: src/slic3r/GUI/ConfigWizard.cpp:262 -msgid "nozzle" -msgstr "boquilla" - #: src/slic3r/GUI/Tab.cpp:1984 msgid "Nozzle" msgstr "Boquilla" +#: src/slic3r/GUI/ConfigWizard.cpp:1475 +msgid "Nozzle Diameter:" +msgstr "Diámetro de la boquilla:" + #: src/slic3r/GUI/ConfigWizard.cpp:1547 msgid "Nozzle and Bed Temperatures" msgstr "Temperaturas de la Base y la Boquilla" @@ -8257,10 +7831,6 @@ msgstr "Temperaturas de la Base y la Boquilla" msgid "Nozzle diameter" msgstr "Diámetro de la boquilla" -#: src/slic3r/GUI/ConfigWizard.cpp:1475 -msgid "Nozzle Diameter:" -msgstr "Diámetro de la boquilla:" - #: src/libslic3r/PrintConfig.cpp:2793 msgid "Nozzle temperature" msgstr "Temperatura de la boquilla" @@ -8355,11 +7925,9 @@ msgstr "" msgid "Number of tool changes" msgstr "Número de cambios de herramienta" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "object" -msgid_plural "objects" -msgstr[0] "objeto" -msgstr[1] "objetos" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 +msgid "Object Settings to modify" +msgstr "Configuraciones de objetos para modificar" #: src/slic3r/GUI/Tab.cpp:4709 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" @@ -8386,10 +7954,6 @@ msgstr "Objeto o instancia" msgid "Object reordered" msgstr "Objetos reordenados" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 -msgid "Object Settings to modify" -msgstr "Configuraciones de objetos para modificar" - #: src/slic3r/GUI/Plater.cpp:2536 #, c-format, boost-format msgid "" @@ -8420,10 +7984,6 @@ msgstr "" "torre de limpieza y disminuir el tiempo de impresión. Los colores de los " "objetos se mezclarán como resultado." -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "objects" -msgstr "objetos" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:201 msgid "Objects List" msgstr "Lista de Objetos" @@ -8436,15 +7996,6 @@ msgstr "Octagram Spiral" msgid "OctoPrint version" msgstr "Versión de OctoPrint" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 -msgid "of a current Object" -msgstr "del Objeto actual" - -#: src/slic3r/GUI/PrintHostDialogs.cpp:251 -msgctxt "OfFile" -msgid "Size" -msgstr "OfFile||Tamaño" - #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:32 msgid "Offset" msgstr "Desplazamiento" @@ -8457,14 +8008,14 @@ msgstr "" "Desplazamiento del borde respecto al objeto impreso. El desplazamiento se " "aplica después de la compensación de la pie de elefante." -#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 -msgid "Old regular layout with the tab bar" -msgstr "Diseño regular antiguo con la barra de pestañas" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 msgid "Old Value" msgstr "Valor Antiguo" +#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 +msgid "Old regular layout with the tab bar" +msgstr "Diseño regular antiguo con la barra de pestañas" + #: src/slic3r/GUI/Preferences.cpp:210 msgid "" "On OSX there is always only one instance of app running by default. However " @@ -8548,14 +8099,6 @@ msgstr "Solo levantar Z menor que" msgid "Only retract when crossing perimeters" msgstr "Solo retraer al cruzar perímetros" -#: src/slic3r/GUI/ConfigWizard.cpp:778 -msgid "" -"Only the following installed printers are compatible with the selected " -"filaments" -msgstr "" -"Sólo las siguientes impresoras instaladas son compatibles con los filamentos " -"seleccionados" - #: src/slic3r/GUI/ConfigWizard.cpp:779 msgid "" "Only the following installed printers are compatible with the selected SLA " @@ -8564,6 +8107,14 @@ msgstr "" "Sólo las siguientes impresoras instaladas son compatibles con los materiales " "SLA seleccionados" +#: src/slic3r/GUI/ConfigWizard.cpp:778 +msgid "" +"Only the following installed printers are compatible with the selected " +"filaments" +msgstr "" +"Sólo las siguientes impresoras instaladas son compatibles con los filamentos " +"seleccionados" + #: src/slic3r/GUI/Tab.cpp:1630 msgid "Ooze prevention" msgstr "Prevención de goteo" @@ -8578,6 +8129,38 @@ msgstr "" msgid "Open &PrusaSlicer" msgstr "Abrir &PrusaSlicer" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 +msgid "Open CA certificate file" +msgstr "Abrir archivo de certificado CA" + +#: src/slic3r/GUI/HintNotification.cpp:1000 +msgid "Open Documentation in web browser." +msgstr "Abrir la documentación en el navegador web." + +#: src/slic3r/GUI/NotificationManager.cpp:664 +msgid "Open Folder." +msgstr "Abrir carpeta." + +#: src/slic3r/Utils/Process.cpp:157 +msgid "Open G-code file:" +msgstr "Abrir archivo código G:" + +#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 +msgid "Open G-code viewer" +msgstr "Abrir visor código G" + +#: src/slic3r/GUI/MainFrame.cpp:1413 +msgid "Open New Instance" +msgstr "Abrir Nueva Instancia" + +#: src/slic3r/GUI/HintNotification.cpp:908 +msgid "Open Preferences." +msgstr "Abrir Preferencias." + +#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 +msgid "Open PrusaSlicer" +msgstr "Abrir PrusaSlicer" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:205 src/slic3r/GUI/MainFrame.cpp:1518 msgid "Open a G-code file" msgstr "Abrir un archivo código G" @@ -8595,35 +8178,15 @@ msgstr "Abrir un archivo de proyecto" msgid "Open as project" msgstr "Abrir como proyecto" -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 -msgid "Open CA certificate file" -msgstr "Abrir archivo de certificado CA" - #: src/slic3r/GUI/UpdateDialogs.cpp:59 src/slic3r/GUI/UpdateDialogs.cpp:133 #: src/slic3r/GUI/UpdateDialogs.cpp:191 msgid "Open changelog page" msgstr "Abrir la página del registro de cambios" -#: src/slic3r/GUI/HintNotification.cpp:1000 -msgid "Open Documentation in web browser." -msgstr "Abrir la documentación en el navegador web." - #: src/slic3r/GUI/UpdateDialogs.cpp:65 msgid "Open download page" msgstr "Abrir página de descarga" -#: src/slic3r/GUI/NotificationManager.cpp:664 -msgid "Open Folder." -msgstr "Abrir carpeta." - -#: src/slic3r/Utils/Process.cpp:157 -msgid "Open G-code file:" -msgstr "Abrir archivo código G:" - -#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 -msgid "Open G-code viewer" -msgstr "Abrir visor código G" - #: src/slic3r/GUI/GUI_App.cpp:3067 src/slic3r/GUI/GUI_App.cpp:3090 msgid "Open hyperlink in default browser?" msgstr "¿Abrir el hipervínculo en el navegador por defecto?" @@ -8636,36 +8199,24 @@ msgstr "Abrir visor código G nuevo" msgid "Open new instance" msgstr "Abrir instancia nueva" -#: src/slic3r/GUI/MainFrame.cpp:1413 -msgid "Open New Instance" -msgstr "Abrir Nueva Instancia" - -#: src/slic3r/GUI/HintNotification.cpp:908 -msgid "Open Preferences." -msgstr "Abrir Preferencias." - #: src/slic3r/GUI/KBShortcutsDialog.cpp:78 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:89 src/slic3r/GUI/MainFrame.cpp:1534 -msgid "Open PrusaSlicer" -msgstr "Abrir PrusaSlicer" - #: src/slic3r/GUI/MainFrame.cpp:1079 #, c-format, boost-format msgid "Open the %s website in your browser" msgstr "Abrir el sitio web de %s en su navegador" -#: src/slic3r/GUI/MainFrame.cpp:1397 -msgid "Open the dialog to modify shape gallery" -msgstr "Abre el diálogo para modificar la galería de formas" - #: src/slic3r/GUI/MainFrame.cpp:1070 msgid "Open the Prusa3D drivers download page in your browser" msgstr "" "Abrir la página de descarga de los controladores Prusa3D en su navegador" +#: src/slic3r/GUI/MainFrame.cpp:1397 +msgid "Open the dialog to modify shape gallery" +msgstr "Abre el diálogo para modificar la galería de formas" + #: src/slic3r/GUI/MainFrame.cpp:1072 msgid "Open the software releases page in your browser" msgstr "Abre la página de lanzamientos de software en tu navegador" @@ -8690,6 +8241,10 @@ msgstr "" msgid "Operation already cancelling. Please wait few seconds." msgstr "Operación ya cancelada. Por favor, espere unos segundos." +#: src/slic3r/GUI/Plater.cpp:1678 +msgid "Optimize Rotation" +msgstr "Optimizar Rotación" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:23 msgid "Optimize object rotation for best surface quality." msgstr "" @@ -8711,10 +8266,6 @@ msgstr "" msgid "Optimize orientation" msgstr "Optimizar la orientación" -#: src/slic3r/GUI/Plater.cpp:1678 -msgid "Optimize Rotation" -msgstr "Optimizar Rotación" - #: src/libslic3r/PrintConfig.cpp:373 msgid "" "Optimize travel moves in order to minimize the crossing of perimeters. This " @@ -8739,10 +8290,6 @@ msgstr "Opciones de material de soporte y balsa" msgid "Options:" msgstr "Opciones:" -#: src/slic3r/GUI/DoubleSlider.cpp:1431 -msgid "or press \"+\" key" -msgstr "o presiona la tecla \"+\"" - #: src/slic3r/GUI/Preferences.cpp:399 msgid "Order object volumes by types" msgstr "Ordenar los volúmenes de objetos por tipos" @@ -8763,14 +8310,14 @@ msgstr "Origen" msgid "Other" msgstr "Otro" -#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 -msgid "Other layers" -msgstr "Otras capas" - #: src/slic3r/GUI/ConfigWizard.cpp:1322 msgid "Other Vendors" msgstr "Otras Marcas" +#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 +msgid "Other layers" +msgstr "Otras capas" + #: src/libslic3r/PrintConfig.cpp:515 msgid "Outer and inner brim" msgstr "Borde interior y exterior" @@ -8779,22 +8326,22 @@ msgstr "Borde interior y exterior" msgid "Outer brim only" msgstr "Sólo el borde exterior" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 -msgid "Output file" -msgstr "Archivo de salida" - #: src/libslic3r/PrintConfig.cpp:4436 msgid "Output File" msgstr "Archivo de salida" +#: src/libslic3r/PrintConfig.cpp:4305 +msgid "Output Model Info" +msgstr "Información del modelo de salida" + +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 +msgid "Output file" +msgstr "Archivo de salida" + #: src/libslic3r/PrintConfig.cpp:1902 msgid "Output filename format" msgstr "Formato de nombre de salida" -#: src/libslic3r/PrintConfig.cpp:4305 -msgid "Output Model Info" -msgstr "Información del modelo de salida" - #: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4666 msgid "Output options" msgstr "Opciones de salida" @@ -8907,6 +8454,10 @@ msgstr "" "alrededor del eje Z en el sentido de las agujas del reloj o en sentido " "contrario pulsando Re Pag o Av Pag respectivamente?" +#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 +msgid "Paint-on seam" +msgstr "Pintado de costuras" + #: resources/data/hints.ini: [hint:Paint-on seam] msgid "" "Paint-on seam\n" @@ -8919,9 +8470,10 @@ msgstr "" "colocar el punto de inicio/fin de cada bucle perimetral? Prueba la " "funciónPintado de costuras. (Requiere el modo Avanzado o Experto)." -#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 -msgid "Paint-on seam" -msgstr "Pintado de costuras" +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 +msgid "Paint-on supports" +msgstr "Soportes pintables" #: resources/data/hints.ini: [hint:Paint-on supports] msgid "" @@ -8935,11 +8487,6 @@ msgstr "" "en las que deben reforzarse o bloquearse los soportes? Prueba la función " "Soportes pintables. (Requiere el modo Avanzado o Experto)." -#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 -msgid "Paint-on supports" -msgstr "Soportes pintables" - #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:674 #, boost-format msgid "Painted using: Extruder %1%" @@ -8974,10 +8521,6 @@ msgstr "" msgid "Paints only one facet." msgstr "Pinta sólo una faceta." -#: src/slic3r/GUI/Field.cpp:193 -msgid "parameter name" -msgstr "nombre del parámetro" - #: src/slic3r/GUI/Field.cpp:269 src/slic3r/GUI/Field.cpp:343 msgid "Parameter validation" msgstr "Validación de parámetros" @@ -8998,14 +8541,14 @@ msgstr "" msgid "Part" msgstr "Pieza" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 -msgid "Part manipulation" -msgstr "Manipulación de piezas" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2481 msgid "Part Settings to modify" msgstr "Configuraciones de piezas para modificar" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 +msgid "Part manipulation" +msgstr "Manipulación de piezas" + #: src/libslic3r/PrintConfig.cpp:324 msgid "Password" msgstr "Contraseña" @@ -9014,6 +8557,10 @@ msgstr "Contraseña" msgid "Paste" msgstr "Pegar" +#: src/slic3r/GUI/Plater.cpp:6640 +msgid "Paste From Clipboard" +msgstr "Pegar Desde Portapapeles" + #: src/slic3r/GUI/MainFrame.cpp:1346 msgid "Paste clipboard" msgstr "Pegar portapapeles" @@ -9022,10 +8569,6 @@ msgstr "Pegar portapapeles" msgid "Paste from clipboard" msgstr "Pegar desde el portapapeles" -#: src/slic3r/GUI/Plater.cpp:6640 -msgid "Paste From Clipboard" -msgstr "Pegar Desde Portapapeles" - #: src/libslic3r/PrintConfig.cpp:2697 msgid "Pattern" msgstr "Patrón" @@ -9056,16 +8599,16 @@ msgstr "Patrón utilizado para generar material de soporte." msgid "Pause" msgstr "Pausa" -#: src/slic3r/GUI/DoubleSlider.cpp:1469 -#, boost-format -msgid "Pause print (\"%1%\")" -msgstr "Pausar impresión (\"%1%\")" - #: src/slic3r/GUI/Tab.cpp:2471 src/libslic3r/GCode.cpp:714 #: src/libslic3r/PrintConfig.cpp:2441 msgid "Pause Print G-code" msgstr "Pausar Código G de Impresión" +#: src/slic3r/GUI/DoubleSlider.cpp:1469 +#, boost-format +msgid "Pause print (\"%1%\")" +msgstr "Pausar impresión (\"%1%\")" + #: src/libslic3r/PrintConfig.cpp:1558 msgid "Percent of a flow rate relative to object's normal layer height." msgstr "" @@ -9100,6 +8643,11 @@ msgstr "" "Rendimiento vs precisión de cálculo. Los valores más bajos pueden producir " "artefactos no deseados." +#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 +msgid "Performing desktop integration failed - Could not find executable." +msgstr "" +"Falló la integración del escritorio - No se pudo encontrar el ejecutable." + #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:232 msgid "" "Performing desktop integration failed - boost::filesystem::canonical did not " @@ -9117,11 +8665,6 @@ msgstr "" "escritorio de Gcodeviewer. El archivo de escritorio de PrusaSlicer se creó " "probablemente con éxito." -#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 -msgid "Performing desktop integration failed - Could not find executable." -msgstr "" -"Falló la integración del escritorio - No se pudo encontrar el ejecutable." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:378 msgid "" "Performing desktop integration failed because the application directory was " @@ -9139,10 +8682,6 @@ msgstr "Perímetro" msgid "Perimeter extruder" msgstr "Extrusor para perímetros" -#: src/slic3r/GUI/PresetHints.cpp:171 -msgid "perimeters" -msgstr "perímetros" - #: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1955 #: src/libslic3r/PrintConfig.cpp:1969 src/libslic3r/PrintConfig.cpp:1979 msgid "Perimeters" @@ -9220,6 +8759,10 @@ msgstr "Ancho de la cabeza" msgid "Place bearings in slots and resume printing" msgstr "Coloca los rodamientos en las ranuras y sigue imprimiendo" +#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 +msgid "Place on face" +msgstr "Colocar en la cara" + #: resources/data/hints.ini: [hint:Place on face] msgid "" "Place on face\n" @@ -9232,10 +8775,6 @@ msgstr "" "se sitúe en la cama de impresión? Selecciona la función Colocar en la " "cara o pulse la tecla F." -#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 -msgid "Place on face" -msgstr "Colocar en la cara" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:181 src/slic3r/GUI/MainFrame.cpp:284 #: src/slic3r/GUI/MainFrame.cpp:333 src/slic3r/GUI/MainFrame.cpp:445 #: src/slic3r/GUI/MainFrame.cpp:448 src/slic3r/GUI/MainFrame.cpp:470 @@ -9279,10 +8818,6 @@ msgstr "Posición" msgid "Position (for multi-extruder printers)" msgstr "Posición (para impresoras con múltiples extrusores )" -#: src/libslic3r/PrintConfig.cpp:2215 -msgid "Position of perimeters starting points." -msgstr "Posición de los puntos de inicio del perímetro." - #: src/libslic3r/PrintConfig.cpp:2968 msgid "Position X" msgstr "Posición X" @@ -9291,6 +8826,10 @@ msgstr "Posición X" msgid "Position Y" msgstr "Posición Y" +#: src/libslic3r/PrintConfig.cpp:2215 +msgid "Position of perimeters starting points." +msgstr "Posición de los puntos de inicio del perímetro." + #: src/slic3r/GUI/Tab.cpp:1763 msgid "Post processing scripts shall modify G-code file in place." msgstr "" @@ -9394,11 +8933,6 @@ msgstr "" msgid "Preset with name \"%1%\" already exists." msgstr "Ya existe un preset con el nombre \"%1%\"." -#: src/slic3r/GUI/SavePresetDialog.cpp:221 -msgctxt "PresetName" -msgid "Copy" -msgstr "Copiar" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 msgid "" "Presets are different.\n" @@ -9461,10 +8995,6 @@ msgstr "Archivo anterior laminado (" msgid "Prime all printing extruders" msgstr "Cebar todos los extrusores de impresión" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 -msgid "print" -msgstr "imprimir" - #: src/slic3r/GUI/GCodeViewer.cpp:3506 src/slic3r/GUI/GCodeViewer.cpp:3541 msgid "Print" msgstr "Imprimir" @@ -9473,14 +9003,6 @@ msgstr "Imprimir" msgid "Print &Host Upload Queue" msgstr "Cola de subida al &host de impresión" -#: src/libslic3r/PrintConfig.cpp:753 -msgid "" -"Print contour perimeters from the outermost one to the innermost one instead " -"of the default inverse order." -msgstr "" -"Imprimir perímetros de contorno desde el más externo hasta el más interno en " -"lugar del orden inverso predeterminado." - #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Print Diameters" msgstr "Diámetros de impresión" @@ -9489,6 +9011,23 @@ msgstr "Diámetros de impresión" msgid "Print Host upload" msgstr "Subida al host de impresión" +#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 +#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +msgid "Print Settings" +msgstr "Configuración de Impresión" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 +msgid "Print Settings Tab" +msgstr "Pestaña Ajustes Impresión" + +#: src/libslic3r/PrintConfig.cpp:753 +msgid "" +"Print contour perimeters from the outermost one to the innermost one instead " +"of the default inverse order." +msgstr "" +"Imprimir perímetros de contorno desde el más externo hasta el más interno en " +"lugar del orden inverso predeterminado." + #: src/slic3r/GUI/KBShortcutsDialog.cpp:114 #: src/slic3r/GUI/PrintHostDialogs.cpp:217 msgid "Print host upload queue" @@ -9502,20 +9041,11 @@ msgstr "Modo de impresión" msgid "Print pauses" msgstr "Pausas de impresión" -#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 -msgid "Print Settings" -msgstr "Configuración de Impresión" - #: src/slic3r/GUI/GCodeViewer.cpp:3693 src/slic3r/GUI/GCodeViewer.cpp:3715 #: src/slic3r/GUI/GUI.cpp:337 src/slic3r/GUI/Plater.cpp:817 msgid "Print settings" msgstr "Configuración de impresión" -#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 -msgid "Print Settings Tab" -msgstr "Pestaña Ajustes Impresión" - #: src/libslic3r/PrintConfig.cpp:3774 msgid "Print speed" msgstr "Velocidad de impresión" @@ -9550,9 +9080,14 @@ msgstr "" msgid "Printer" msgstr "Impresora" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 -msgid "printer" -msgstr "impresora" +#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 +#: src/slic3r/GUI/Tab.hpp:490 +msgid "Printer Settings" +msgstr "Configuración de la Impresora" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 +msgid "Printer Settings Tab" +msgstr "Pestaña Ajustes Impresora" #: src/libslic3r/PrintConfig.cpp:3215 src/libslic3r/PrintConfig.cpp:3216 msgid "Printer absolute correction" @@ -9562,10 +9097,6 @@ msgstr "Corrección absoluta de la impresora" msgid "Printer gamma correction" msgstr "Corrección gamma de la impresora" -#: src/slic3r/GUI/Tab.cpp:1375 -msgid "printer model" -msgstr "modelo de impresora" - #: src/libslic3r/PrintConfig.cpp:2011 msgid "Printer notes" msgstr "Notas de la impresora" @@ -9574,6 +9105,18 @@ msgstr "Notas de la impresora" msgid "Printer preset names" msgstr "Nombres de ajustes de la impresora" +#: src/libslic3r/PrintConfig.cpp:3192 +msgid "Printer scaling X axis correction" +msgstr "Corrección del escalado de la impresora en el eje X" + +#: src/libslic3r/PrintConfig.cpp:3200 +msgid "Printer scaling Y axis correction" +msgstr "Corrección del escalado de la impresora en el eje Y" + +#: src/libslic3r/PrintConfig.cpp:3208 +msgid "Printer scaling Z axis correction" +msgstr "Corrección del escalado de la impresora en el eje Z" + #: src/libslic3r/PrintConfig.cpp:3183 src/libslic3r/PrintConfig.cpp:3184 #: src/libslic3r/PrintConfig.cpp:3185 msgid "Printer scaling correction" @@ -9591,27 +9134,6 @@ msgstr "Corrección del escalado de la impresora en el eje Y" msgid "Printer scaling correction in Z axis" msgstr "Corrección del escalado de la impresora en el eje Z" -#: src/libslic3r/PrintConfig.cpp:3192 -msgid "Printer scaling X axis correction" -msgstr "Corrección del escalado de la impresora en el eje X" - -#: src/libslic3r/PrintConfig.cpp:3200 -msgid "Printer scaling Y axis correction" -msgstr "Corrección del escalado de la impresora en el eje Y" - -#: src/libslic3r/PrintConfig.cpp:3208 -msgid "Printer scaling Z axis correction" -msgstr "Corrección del escalado de la impresora en el eje Z" - -#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 -msgid "Printer Settings" -msgstr "Configuración de la Impresora" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 -msgid "Printer Settings Tab" -msgstr "Pestaña Ajustes Impresora" - #: src/libslic3r/PrintConfig.cpp:223 src/libslic3r/PrintConfig.cpp:224 msgid "Printer technology" msgstr "Tecnología de la impresora" @@ -9703,6 +9225,10 @@ msgstr "Impresoras Prusa de tecnología FFF" msgid "Prusa MSLA Technology Printers" msgstr "Impresoras Prusa de tecnología MSLA" +#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 +msgid "PrusaSlicer GUI initialization failed" +msgstr "Hubo un error al abrir el GUI de PrusaSlicer" + #: src/slic3r/GUI/GUI_App.cpp:1330 #, boost-format msgid "" @@ -9737,10 +9263,6 @@ msgstr "" msgid "PrusaSlicer error" msgstr "Error de PrusaSlicer" -#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 -msgid "PrusaSlicer GUI initialization failed" -msgstr "Hubo un error al abrir el GUI de PrusaSlicer" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:84 #, boost-format msgid "PrusaSlicer has encountered a fatal error: \"%1%\"" @@ -10086,6 +9608,16 @@ msgstr "Habitual" msgid "Regular expression" msgstr "Expresión regular" +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" +"El direccionamiento relativo del extrusor requiere restablecer la posición " +"del extrusor en cada capa para evitar la pérdida de la precisión del punto " +"flotante. Añadie \"G92 E0\" a layer_gcode." + #: src/slic3r/GUI/Preferences.cpp:435 msgid "Release only" msgstr "Solo lanzamiento" @@ -10094,6 +9626,11 @@ msgstr "Solo lanzamiento" msgid "Reload all from disk" msgstr "Recargar todo desde el disco" +#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 +#: src/slic3r/GUI/Plater.cpp:3548 +msgid "Reload from disk" +msgstr "Recargar desde el disco" + #: resources/data/hints.ini: [hint:Reload from disk] msgid "" "Reload from disk\n" @@ -10107,11 +9644,6 @@ msgstr "" "ratón en el modelo en la vista 3D y elige Recargar desde el disco. Lee más " "en la documentación." -#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 -msgid "Reload from disk" -msgstr "Recargar desde el disco" - #: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 msgid "Reload from:" msgstr "Recargar desde:" @@ -10149,15 +9681,19 @@ msgstr "Recordar mi elección" msgid "Remember output directory" msgstr "Recordar el directorio de salida" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "remove" -msgstr "eliminar" - #: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/BedShapeDialog.cpp:362 #: src/slic3r/GUI/Tab.cpp:3734 msgid "Remove" msgstr "Eliminar" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 +msgid "Remove Instance of the selected object" +msgstr "Retirar instancia del objeto seleccionado" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 +msgid "Remove Multi Material painting" +msgstr "Eliminar el pintado Multi Material" + #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:38 msgid "Remove all holes" msgstr "Elimina todos los huecos" @@ -10183,18 +9719,10 @@ msgstr "Retirar extrusor de la secuencia" msgid "Remove instance" msgstr "Retirar una copia" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 -msgid "Remove Instance of the selected object" -msgstr "Retirar instancia del objeto seleccionado" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:160 msgid "Remove layer range" msgstr "Retirar rango de capas" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 -msgid "Remove Multi Material painting" -msgstr "Eliminar el pintado Multi Material" - #: src/slic3r/GUI/GUI_Factories.cpp:1087 msgid "Remove one instance of the selected object" msgstr "Eliminar una instancia del objeto seleccionado" @@ -10327,11 +9855,11 @@ msgid "Repairing was canceled" msgstr "La reparación fue cancelada" #: src/slic3r/GUI/MainFrame.cpp:1285 -msgid "Repeat last quick slice" +msgid "Repeat Last Quick Slice" msgstr "Repetir el último laminado rápido" #: src/slic3r/GUI/MainFrame.cpp:1285 -msgid "Repeat Last Quick Slice" +msgid "Repeat last quick slice" msgstr "Repetir el último laminado rápido" #: src/slic3r/GUI/Plater.cpp:3432 @@ -10367,21 +9895,6 @@ msgstr "Informar de un &problema" msgid "Report an issue on %s" msgstr "Reportar un problema a %s" -#: src/slic3r/Utils/PresetUpdater.cpp:815 -#, c-format, boost-format -msgid "requires max. %s" -msgstr "requiere max. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:812 -#, c-format, boost-format -msgid "requires min. %s" -msgstr "requiere min. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:808 -#, c-format, boost-format -msgid "requires min. %s and max. %s" -msgstr "requiere un min. %s y un max. %s" - #: src/slic3r/GUI/FirmwareDialog.cpp:820 msgid "Rescan" msgstr "Rescanear" @@ -10390,6 +9903,14 @@ msgstr "Rescanear" msgid "Reset" msgstr "Reset" +#: src/slic3r/GUI/Plater.cpp:3003 +msgid "Reset Project" +msgstr "Reiniciar Proyecto" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 +msgid "Reset Rotation" +msgstr "Reiniciar rotación" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1225 msgid "Reset clipping plane" msgstr "Restablecer plano de recorte" @@ -10402,18 +9923,10 @@ msgstr "Restablecer plano de recorte" msgid "Reset direction" msgstr "Restablecer dirección" -#: src/slic3r/GUI/Plater.cpp:3003 -msgid "Reset Project" -msgstr "Reiniciar Proyecto" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363 msgid "Reset rotation" msgstr "Reiniciar rotación" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 -msgid "Reset Rotation" -msgstr "Reiniciar rotación" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:398 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:400 msgid "Reset scale" @@ -10425,14 +9938,14 @@ msgstr "Reiniciar escala" msgid "Reset selection" msgstr "Reiniciar selección" -#: src/slic3r/GUI/GLCanvas3D.cpp:237 -msgid "Reset to base" -msgstr "Reiniciar a la base" - #: src/slic3r/GUI/Tab.cpp:2825 msgid "Reset to Filament Color" msgstr "Reiniciar Filament Color" +#: src/slic3r/GUI/GLCanvas3D.cpp:237 +msgid "Reset to base" +msgstr "Reiniciar a la base" + #: src/slic3r/GUI/GUI_App.cpp:2331 msgid "Restart application" msgstr "Reiniciar aplicación" @@ -10454,13 +9967,6 @@ msgstr "Retraer en el cambio de capa" msgid "Retraction" msgstr "Retracción" -#: src/libslic3r/PrintConfig.cpp:2115 -msgid "" -"Retraction is not triggered when travel moves are shorter than this length." -msgstr "" -"La retracción no se activa cuando los movimientos de desplazamiento son más " -"cortos que esta longitud." - #: src/libslic3r/PrintConfig.cpp:2136 msgid "Retraction Length" msgstr "Longitud de retracción" @@ -10473,6 +9979,13 @@ msgstr "Longitud de retracción (cambio de herramienta)" msgid "Retraction Speed" msgstr "Velocidad de retracción" +#: src/libslic3r/PrintConfig.cpp:2115 +msgid "" +"Retraction is not triggered when travel moves are shorter than this length." +msgstr "" +"La retracción no se activa cuando los movimientos de desplazamiento son más " +"cortos que esta longitud." + #: src/slic3r/GUI/Tab.cpp:2818 msgid "" "Retraction when tool is disabled (advanced settings for multi-extruder " @@ -10509,6 +10022,14 @@ msgstr "Revisalas sustituciones y ajústalas si es necesario." msgid "Right" msgstr "Derecha" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +msgid "Right Preset Value" +msgstr "Valor del Ajuste Derecho" + +#: src/slic3r/GUI/MainFrame.cpp:1129 +msgid "Right View" +msgstr "Vista derecha" + #: src/slic3r/GUI/GUI_ObjectList.cpp:488 msgid "Right button click the icon to change the object printable property" msgstr "" @@ -10538,14 +10059,6 @@ msgstr "Botón derecho del ratón" msgid "Right mouse button:" msgstr "Botón derecho del ratón:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 -msgid "Right Preset Value" -msgstr "Valor del Ajuste Derecho" - -#: src/slic3r/GUI/MainFrame.cpp:1129 -msgid "Right View" -msgstr "Vista derecha" - #: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:466 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:543 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562 @@ -10613,16 +10126,6 @@ msgstr "Ejecutar %s" msgid "Running post-processing scripts" msgstr "Ejecutando scripts de post-procesamiento" -#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 -#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 -#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 -#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 -#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 -#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 -#: src/libslic3r/PrintConfig.cpp:3349 -msgid "s" -msgstr "$" - #: src/slic3r/GUI/MainFrame.cpp:1231 src/slic3r/GUI/MainFrame.cpp:1580 msgid "S&end G-code" msgstr "&Enviar código G" @@ -10631,6 +10134,60 @@ msgstr "&Enviar código G" msgid "S&end to print" msgstr "E&nviar para imprimir" +#: src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Material Profiles Selection" +msgstr "Selección Perfiles de Material SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Materials" +msgstr "Materiales SLA" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 +msgid "SLA Support Points" +msgstr "Puntos de soporte SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:2102 +msgid "SLA Technology Printers" +msgstr "Impresoras de tecnología SLA" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 +msgid "SLA gizmo keyboard shortcuts" +msgstr "Herramienta de atajos de teclado SLA" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +msgid "SLA material" +msgstr "Material SLA" + +#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 +msgid "SLA material type" +msgstr "Tipo Material SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:752 +msgid "SLA materials" +msgstr "Materiales SLA" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +msgid "SLA print" +msgstr "Impresión SLA" + +#: src/libslic3r/PrintConfig.cpp:3382 +msgid "SLA print material notes" +msgstr "Notas del material de impresión de SLA" + +#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 +msgid "SLA print settings" +msgstr "Ajustes de impresión SLA" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6369 +msgid "SLA supports outside the print area were detected." +msgstr "Se detectaron soportes SLA fuera del área de impresión." + +#: src/slic3r/GUI/MainFrame.cpp:1661 +msgid "SVG" +msgstr "SVG" + #. TRN To be shown in Print Settings "Bottom contact Z distance". Have to be as short as possible #. TRN To be shown in Print Settings "Bottom interface layers". Have to be as short as possible #: src/libslic3r/PrintConfig.cpp:2576 src/libslic3r/PrintConfig.cpp:2661 @@ -10651,6 +10208,23 @@ msgstr "Guardar %s como:" msgid "Save %s file as:" msgstr "Guardar archivo %s como:" +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save G-code file as:" +msgstr "Guardar archivo Código G como:" + +#: src/slic3r/GUI/MainFrame.cpp:1736 +msgid "Save OBJ file (less prone to coordinate errors than STL) as:" +msgstr "" +"Guardar archivo OBJ (menos propenso a errores de coordinación que STL) como:" + +#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 +msgid "Save Project &as" +msgstr "Guardar Proyecto &como" + +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save SL1 / SL1S file as:" +msgstr "Guardar archivo SL1 / SL1S como:" + #: src/libslic3r/PrintConfig.cpp:4310 msgid "Save config file" msgstr "Guardar archivo de configuración" @@ -10681,15 +10255,6 @@ msgstr "Guardar archivo de proyecto actual como" msgid "Save file as:" msgstr "Guardar archivo como:" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save G-code file as:" -msgstr "Guardar archivo Código G como:" - -#: src/slic3r/GUI/MainFrame.cpp:1736 -msgid "Save OBJ file (less prone to coordinate errors than STL) as:" -msgstr "" -"Guardar archivo OBJ (menos propenso a errores de coordinación que STL) como:" - #: src/slic3r/GUI/SavePresetDialog.cpp:191 #: src/slic3r/GUI/SavePresetDialog.cpp:197 msgid "Save preset" @@ -10703,10 +10268,6 @@ msgstr "Guarde el conjunto de ajustes iniciales como:" msgid "Save project" msgstr "Guardar proyecto" -#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 -msgid "Save Project &as" -msgstr "Guardar Proyecto &como" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:79 msgid "Save project (3mf)" msgstr "Guardar proyecto (3mf)" @@ -10715,10 +10276,6 @@ msgstr "Guardar proyecto (3mf)" msgid "Save project as (3mf)" msgstr "Guarda el proyecto como (3mf)" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save SL1 / SL1S file as:" -msgstr "Guardar archivo SL1 / SL1S como:" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:898 msgid "Save support points?" msgstr "¿Guardar puntos de apoyo?" @@ -10750,6 +10307,10 @@ msgstr "Error al guardar la malla en el contenedor 3MF." msgid "Scale" msgstr "Escalar" +#: src/slic3r/GUI/Selection.cpp:950 +msgid "Scale To Fit" +msgstr "Escalar para Adaptarse" + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:523 msgid "Scale factors" msgstr "Factores de escala" @@ -10763,10 +10324,6 @@ msgstr "" msgid "Scale to Fit" msgstr "Escalar para Adaptarse" -#: src/slic3r/GUI/Selection.cpp:950 -msgid "Scale To Fit" -msgstr "Escalar para Adaptarse" - #: src/libslic3r/PrintConfig.cpp:4405 msgid "Scale to fit the given volume." msgstr "Escalar para ajustarse al volumen dado." @@ -10855,13 +10412,39 @@ msgstr "Segundo color" msgid "See Download page." msgstr "Ver página de Descargas." +#: src/slic3r/GUI/GUI_App.cpp:1219 +msgid "See Releases page." +msgstr "Consultar página de lanzamientos." + #: src/slic3r/GUI/NotificationManager.hpp:753 msgid "See more." msgstr "Ver más." -#: src/slic3r/GUI/GUI_App.cpp:1219 -msgid "See Releases page." -msgstr "Consultar página de lanzamientos." +#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 +msgid "Select Filament Settings Tab" +msgstr "Seleccionar pestaña de configuración de filamento" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 +msgid "Select Plater Tab" +msgstr "Seleccionar pestaña de la Base de impresión" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 +msgid "Select Print Settings Tab" +msgstr "Seleccione la pestaña Configuración de impresión" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 +msgid "Select Printer Settings Tab" +msgstr "Selecciona pestaña de ajustes de impresora" + +#: src/slic3r/GUI/DoubleSlider.cpp:2532 +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 "" +"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." #: src/slic3r/GUI/FirmwareDialog.cpp:813 msgid "Select a file" @@ -10900,26 +10483,10 @@ msgid "Select coordinate space, in which the transformation will be performed." msgstr "" "Escoge el espacio de coordenadas en el que se realizará la transformación." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 -msgid "Select Filament Settings Tab" -msgstr "Seleccionar pestaña de configuración de filamento" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 -msgid "Select Plater Tab" -msgstr "Seleccionar pestaña de la Base de impresión" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 msgid "Select presets to compare" msgstr "Selecciona los ajustes para comparar" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 -msgid "Select Print Settings Tab" -msgstr "Seleccione la pestaña Configuración de impresión" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 -msgid "Select Printer Settings Tab" -msgstr "Selecciona pestaña de ajustes de impresora" - #: src/slic3r/GUI/GalleryDialog.cpp:76 msgid "Select shape from the gallery" msgstr "Seleccionar la forma en la galería" @@ -10928,6 +10495,10 @@ msgstr "Seleccionar la forma en la galería" msgid "Select showing settings" msgstr "Seleccionar los ajustes mostrados" +#: src/slic3r/GUI/MainFrame.cpp:1726 +msgid "Select the STL file to repair:" +msgstr "Seleccione el archivo STL para reparar:" + #: src/slic3r/GUI/GUI_App.cpp:2010 msgid "Select the language" msgstr "Seleccione el idioma" @@ -10945,10 +10516,6 @@ msgstr "" msgid "Select the printers this profile is compatible with." msgstr "Seleccione las impresoras con las que este perfil es compatible." -#: src/slic3r/GUI/MainFrame.cpp:1726 -msgid "Select the STL file to repair:" -msgstr "Seleccione el archivo STL para reparar:" - #: src/slic3r/GUI/Preferences.cpp:709 msgid "Select toolbar icon size in respect to the default one." msgstr "" @@ -10967,16 +10534,6 @@ msgstr "Selecciona que tipo de pad necesitas" msgid "Select what kind of support do you need" msgstr "Selecciona qué clase de soporte necesitas" -#: src/slic3r/GUI/DoubleSlider.cpp:2532 -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 "" -"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." - #: src/slic3r/GUI/Selection.cpp:168 msgid "Selection-Add" msgstr "Selección-Añadir" @@ -10985,14 +10542,6 @@ msgstr "Selección-Añadir" msgid "Selection-Add All" msgstr "Selección-Añadir todos" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 -msgid "Selection-Add from list" -msgstr "Selección-Añadir de la lista" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6446 -msgid "Selection-Add from rectangle" -msgstr "Selección-Añadir del rectángulo" - #: src/slic3r/GUI/Selection.cpp:278 msgid "Selection-Add Instance" msgstr "Selección-Añadir Instancia" @@ -11001,6 +10550,14 @@ msgstr "Selección-Añadir Instancia" msgid "Selection-Add Object" msgstr "Selección-Añadir Objeto" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 +msgid "Selection-Add from list" +msgstr "Selección-Añadir de la lista" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6446 +msgid "Selection-Add from rectangle" +msgstr "Selección-Añadir del rectángulo" + #: src/slic3r/GUI/Selection.cpp:209 msgid "Selection-Remove" msgstr "Selección-Retirar" @@ -11009,14 +10566,6 @@ msgstr "Selección-Retirar" msgid "Selection-Remove All" msgstr "Selección-Retirar todo" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 -msgid "Selection-Remove from list" -msgstr "Selección-Retirar de la lista" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6461 -msgid "Selection-Remove from rectangle" -msgstr "Selección-Retirar del rectángulo" - #: src/slic3r/GUI/Selection.cpp:297 msgid "Selection-Remove Instance" msgstr "Selección-Retirar Instancia" @@ -11025,18 +10574,26 @@ msgstr "Selección-Retirar Instancia" msgid "Selection-Remove Object" msgstr "Selección-Retirar Objeto" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 +msgid "Selection-Remove from list" +msgstr "Selección-Retirar de la lista" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6461 +msgid "Selection-Remove from rectangle" +msgstr "Selección-Retirar del rectángulo" + #: src/slic3r/GUI/MainFrame.cpp:1320 msgid "Selects all objects" msgstr "Seleccionar todos los objetos" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 -msgid "Send G-code" -msgstr "Enviar código G" - #: src/slic3r/GUI/PrintHostDialogs.cpp:40 msgid "Send G-Code to printer host" msgstr "Enviar el código G al host de impresión" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +msgid "Send G-code" +msgstr "Enviar código G" + #: src/slic3r/GUI/SendSystemInfoDialog.cpp:550 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:618 msgid "Send system info" @@ -11086,6 +10643,46 @@ msgstr "Nombre del servicio" msgid "Set" msgstr "Ajuste" +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 +msgid "Set Mirror" +msgstr "Establecer Reflejo" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 +msgid "Set Orientation" +msgstr "Establecer Orientación" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 +msgid "Set Position" +msgstr "Establecer Posición" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Printable" +msgstr "Establecer Imprimible" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Printable Instance" +msgstr "Establecer Instancia imprimible" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Printable group" +msgstr "Establecer Grupo imprimible" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 +msgid "Set Scale" +msgstr "Establecer Escala" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Unprintable" +msgstr "Establecer No imprimible" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Unprintable Instance" +msgstr "Establecer Instancia No Imprimible" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Unprintable group" +msgstr "Establecer Grupo No imprimible" + #: src/slic3r/GUI/GUI_Factories.cpp:636 src/slic3r/GUI/GUI_Factories.cpp:648 msgid "Set as a Separated Object" msgstr "Establecer como Objeto Separado" @@ -11134,9 +10731,9 @@ msgstr "Establecer el pulgar izquierdo como activo" msgid "Set lower thumb as active" msgstr "Establecer el pulgar inferior como activo" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 -msgid "Set Mirror" -msgstr "Establecer Reflejo" +#: src/slic3r/GUI/GUI_Factories.cpp:1090 +msgid "Set number of instances" +msgstr "Establecer número de instancias" #: resources/data/hints.ini: [hint:Set number of instances] msgid "" @@ -11148,35 +10745,11 @@ msgstr "" "¿Sabías que puedes hacer clic con el botón derecho en un modelo y establecer " "un número exacto de instancias en lugar de copiar y pegar varias veces?" -#: src/slic3r/GUI/GUI_Factories.cpp:1090 -msgid "Set number of instances" -msgstr "Establecer número de instancias" - #: src/slic3r/GUI/Plater.cpp:5573 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Establecer el número de copias a %d" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 -msgid "Set Orientation" -msgstr "Establecer Orientación" - -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 -msgid "Set Position" -msgstr "Establecer Posición" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Printable" -msgstr "Establecer Imprimible" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Printable group" -msgstr "Establecer Grupo imprimible" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Printable Instance" -msgstr "Establecer Instancia imprimible" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:249 msgid "Set right thumb as active" msgstr "Establecer el pulgar derecho como activo" @@ -11185,10 +10758,6 @@ msgstr "Establecer el pulgar derecho como activo" msgid "Set ruler mode" msgstr "Establecer modo de regla" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 -msgid "Set Scale" -msgstr "Establecer Escala" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:196 msgid "Set selected items as Printable/Unprintable" msgstr "Establecer los elementos seleccionados como Imprimibles/No imprimibles" @@ -11356,18 +10925,6 @@ msgstr "" "profundidad máxima que el extrusor puede asomar antes de colisionar con " "otros objetos impresos." -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Unprintable" -msgstr "Establecer No imprimible" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Unprintable group" -msgstr "Establecer Grupo No imprimible" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Unprintable Instance" -msgstr "Establecer Instancia No Imprimible" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:235 msgid "Set upper thumb as active" msgstr "Establecer el pulgar superior como activo" @@ -11391,6 +10948,10 @@ msgstr "Ajustes" msgid "Settings for height range" msgstr "Ajustes para rango de alturas" +#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 +msgid "Settings in non-modal window" +msgstr "Configuración en ventana no modal" + #: resources/data/hints.ini: [hint:Settings in non-modal window] msgid "" "Settings in non-modal window\n" @@ -11404,10 +10965,6 @@ msgstr "" "la Vista previa del código G en la otra. Ves a Preferencias y " "selecciona Configuración en la ventana no modal." -#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 -msgid "Settings in non-modal window" -msgstr "Configuración en ventana no modal" - #: src/slic3r/GUI/ConfigManipulation.cpp:167 msgid "Shall I adjust those settings for supports?" msgstr "¿Debo ajustar esa configuración para los soportes?" @@ -11489,6 +11046,10 @@ msgstr "Mostrar carpeta &Configuración" msgid "Show &Labels" msgstr "Mostrar &Etiquetas" +#: src/slic3r/GUI/MainFrame.cpp:1097 +msgid "Show Tip of the Day" +msgstr "Mostrar Consejo del día" + #: src/slic3r/GUI/MainFrame.cpp:1092 src/slic3r/GUI/MainFrame.cpp:1095 msgid "Show about dialog" msgstr "Mostrar Acerca de" @@ -11577,16 +11138,16 @@ msgstr "Muestra la vista 3D preliminar del laminado" msgid "Show the filament settings" msgstr "Mostrar los ajustes de filamento" -#: src/libslic3r/PrintConfig.cpp:4296 -msgid "Show the full list of print/G-code configuration options." -msgstr "" -"Muestra la lista completa de opciones de configuración de impresión/G-code." - #: src/libslic3r/PrintConfig.cpp:4301 msgid "Show the full list of SLA print configuration options." msgstr "" "Muestra la lista completa de opciones de configuración de impresión SLA." +#: src/libslic3r/PrintConfig.cpp:4296 +msgid "Show the full list of print/G-code configuration options." +msgstr "" +"Muestra la lista completa de opciones de configuración de impresión/G-code." + #: src/slic3r/GUI/MainFrame.cpp:1100 msgid "Show the list of the keyboard shortcuts" msgstr "Mostrar la lista de los atajos de teclado" @@ -11607,10 +11168,6 @@ msgstr "Mostrar la configuración de la impresora" msgid "Show this help." msgstr "Mostrar esta ayuda." -#: src/slic3r/GUI/MainFrame.cpp:1097 -msgid "Show Tip of the Day" -msgstr "Mostrar Consejo del día" - #: src/slic3r/GUI/MainFrame.cpp:1087 msgid "Show user configuration folder (datadir)" msgstr "Mostrar carpeta de configuración de usuario (datadir)" @@ -11650,14 +11207,14 @@ msgstr "Muestra/Oculta etiquetas de pieza/repetición" msgid "Simple" msgstr "Sencillo" -#: src/slic3r/GUI/ConfigWizard.cpp:1279 -msgid "Simple mode" -msgstr "Modo Simple" - #: src/slic3r/GUI/GUI_App.cpp:2237 msgid "Simple View Mode" msgstr "Modo de visualización sencillo" +#: src/slic3r/GUI/ConfigWizard.cpp:1279 +msgid "Simple mode" +msgstr "Modo Simple" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:156 msgid "Simplification is currently only allowed when a single part is selected" msgstr "" @@ -11690,10 +11247,6 @@ msgstr "" msgid "Simplify model" msgstr "Simplificar el modelo" -#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 -msgid "Single extruder MM setup" -msgstr "Ajuste para MM con un solo extrusor" - #: src/libslic3r/PrintConfig.cpp:2459 msgid "Single Extruder Multi Material" msgstr "Extrusor único Multi Material" @@ -11710,6 +11263,10 @@ msgstr "" "¿Deseas cambiar el diámetro de todos los extrusores al valor del diámetro " "del nozzle del primer extrusor?" +#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 +msgid "Single extruder MM setup" +msgstr "Ajuste para MM con un solo extrusor" + #: src/slic3r/GUI/Tab.cpp:2734 msgid "Single extruder multimaterial parameters" msgstr "Parámetros multimaterial para un sólo extrusor" @@ -11740,6 +11297,10 @@ msgstr "Tamaño en X e Y de la placa rectangular." msgid "Skirt" msgstr "Falda" +#: src/libslic3r/PrintConfig.cpp:2282 +msgid "Skirt Loops" +msgstr "Vueltas de la falda" + #: src/slic3r/GUI/GUI_Factories.cpp:136 src/slic3r/GUI/Tab.cpp:1536 #: src/libslic3r/PrintConfig.cpp:494 src/libslic3r/PrintConfig.cpp:505 #: src/libslic3r/PrintConfig.cpp:521 @@ -11750,65 +11311,11 @@ msgstr "Falda y balsa" msgid "Skirt height" msgstr "Altura de la falda" -#: src/libslic3r/PrintConfig.cpp:2282 -msgid "Skirt Loops" -msgstr "Vueltas de la falda" - #: src/slic3r/GUI/GUI_Preview.cpp:248 src/libslic3r/ExtrusionEntity.cpp:327 #: src/libslic3r/ExtrusionEntity.cpp:358 msgid "Skirt/Brim" msgstr "Falda/Balsa" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 -msgid "SLA gizmo keyboard shortcuts" -msgstr "Herramienta de atajos de teclado SLA" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 -msgid "SLA material" -msgstr "Material SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Material Profiles Selection" -msgstr "Selección Perfiles de Material SLA" - -#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 -msgid "SLA material type" -msgstr "Tipo Material SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Materials" -msgstr "Materiales SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:752 -msgid "SLA materials" -msgstr "Materiales SLA" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 -msgid "SLA print" -msgstr "Impresión SLA" - -#: src/libslic3r/PrintConfig.cpp:3382 -msgid "SLA print material notes" -msgstr "Notas del material de impresión de SLA" - -#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 -msgid "SLA print settings" -msgstr "Ajustes de impresión SLA" - -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 -msgid "SLA Support Points" -msgstr "Puntos de soporte SLA" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6369 -msgid "SLA supports outside the print area were detected." -msgstr "Se detectaron soportes SLA fuera del área de impresión." - -#: src/slic3r/GUI/ConfigWizard.cpp:2102 -msgid "SLA Technology Printers" -msgstr "Impresoras de tecnología SLA" - #: src/slic3r/GUI/GUI_Factories.cpp:461 msgid "Slab" msgstr "Losa" @@ -11902,7 +11409,15 @@ msgstr "El objeto laminado \"%1%\" parece un logotipo o un cartel" #: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 #: src/slic3r/GUI/Tab.cpp:4662 msgid "Slicing" -msgstr "Laminando" +msgstr "Laminado" + +#: src/slic3r/GUI/MainFrame.cpp:1710 +msgid "Slicing Done!" +msgstr "¡Laminado realizado!" + +#: src/libslic3r/PrintConfig.cpp:2489 +msgid "Slicing Mode" +msgstr "Modo de laminado" #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:162 #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:204 @@ -11913,10 +11428,6 @@ msgstr "Laminado terminado" msgid "Slicing done" msgstr "Laminado terminado" -#: src/slic3r/GUI/MainFrame.cpp:1710 -msgid "Slicing Done!" -msgstr "¡Laminado realizado!" - #: src/slic3r/GUI/NotificationManager.cpp:1113 msgid "Slicing finished." msgstr "Laminado finalizado." @@ -11928,10 +11439,6 @@ msgstr "" "El laminado se ha tenido que parar debido a un error interno: Índice de " "laminado inconsistente." -#: src/libslic3r/PrintConfig.cpp:2489 -msgid "Slicing Mode" -msgstr "Modo de laminado" - #: src/libslic3r/SLAPrintSteps.cpp:47 msgid "Slicing model" msgstr "Laminando modelo" @@ -11991,10 +11498,6 @@ msgstr "Ajustado" msgid "Software &Releases" msgstr "Lanzamientos de Softwa&re" -#: src/slic3r/GUI/PresetHints.cpp:176 -msgid "solid infill" -msgstr "relleno sólido" - #: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:322 #: src/libslic3r/ExtrusionEntity.cpp:348 src/libslic3r/PrintConfig.cpp:2342 #: src/libslic3r/PrintConfig.cpp:2354 @@ -12009,6 +11512,10 @@ msgstr "Relleno sólido cada" msgid "Solid infill extruder" msgstr "Extrusor para el relleno sólido" +#: src/libslic3r/PrintConfig.cpp:2313 +msgid "Solid infill threshold area" +msgstr "Área del umbral de relleno sólido" + #: resources/data/hints.ini: [hint:Solid infill threshold area] msgid "" "Solid infill threshold area\n" @@ -12021,10 +11528,6 @@ msgstr "" "transversal pequeña se rellenen con relleno sólido automáticamente? Ajusta " "el Área umbral de relleno sólido. (Sólo en modo Experto.)" -#: src/libslic3r/PrintConfig.cpp:2313 -msgid "Solid infill threshold area" -msgstr "Área del umbral de relleno sólido" - #: src/slic3r/GUI/Tab.cpp:1470 src/libslic3r/PrintConfig.cpp:2367 msgid "Solid layers" msgstr "Capas sólidas" @@ -12037,17 +11540,6 @@ msgstr "Material soluble" msgid "Soluble material is most likely used for a soluble support." msgstr "El material soluble se usa muy probablemente para un soporte soluble." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 -msgid "" -"Some fields are too long to fit. Right mouse click reveals the full text." -msgstr "" -"Algunos campos son demasiado largos para caber. El clic derecho del mouse " -"muestra el texto completo." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some filaments were uninstalled." -msgstr "Se han desinstalado algunos filamentos." - #: src/libslic3r/PrintConfig.cpp:1321 msgid "" "Some G/M-code commands, including temperature control and others, are not " @@ -12060,6 +11552,25 @@ msgstr "" "impresora para obtener una salida compatible. El tipo \"Sin extrusión\" " "evita que PrusaSlicer exporte ningún valor de extrusión." +#: src/slic3r/GUI/ConfigWizard.cpp:2696 +msgid "Some Printers were uninstalled." +msgstr "Se han desinstalado algunas impresoras." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some SLA materials were uninstalled." +msgstr "Se han desinstalado algunos materiales SLA." + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +msgid "" +"Some fields are too long to fit. Right mouse click reveals the full text." +msgstr "" +"Algunos campos son demasiado largos para caber. El clic derecho del mouse " +"muestra el texto completo." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some filaments were uninstalled." +msgstr "Se han desinstalado algunos filamentos." + #: src/slic3r/GUI/GLCanvas3D.cpp:6370 msgid "Some objects are not visible during editing." msgstr "Algunos objetos no son visibles durante la edición." @@ -12111,14 +11622,6 @@ msgstr "" "Algunas impresoras o configuraciones de impresora pueden tener dificultades " "para imprimir con una altura de capa variable. Habilitado por defecto." -#: src/slic3r/GUI/ConfigWizard.cpp:2696 -msgid "Some Printers were uninstalled." -msgstr "Se han desinstalado algunas impresoras." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some SLA materials were uninstalled." -msgstr "Se han desinstalado algunos materiales SLA." - #: src/slic3r/GUI/GLCanvas3D.cpp:4041 msgid "Spacing" msgstr "Separación" @@ -12284,14 +11787,14 @@ msgstr "Velocidad:" msgid "Sphere" msgstr "Esfera" -#: src/libslic3r/PrintConfig.cpp:2381 -msgid "Spiral vase" -msgstr "Modo vaso" - #: src/slic3r/GUI/ConfigManipulation.cpp:91 msgid "Spiral Vase" msgstr "Modo Vaso Espiral" +#: src/libslic3r/PrintConfig.cpp:2381 +msgid "Spiral vase" +msgstr "Modo vaso" + #: src/slic3r/GUI/GUI_Factories.cpp:944 src/slic3r/GUI/GUI_Factories.cpp:954 #: src/slic3r/GUI/GUI_Factories.cpp:975 src/libslic3r/PrintConfig.cpp:4400 msgid "Split" @@ -12315,22 +11818,22 @@ msgstr "Dividir el objeto seleccionado en objetos individuales" msgid "Split the selected object into individual parts" msgstr "Divide el objeto seleccionado en partes individuales" -#: src/slic3r/GUI/GLCanvas3D.cpp:4565 -msgid "Split to objects" -msgstr "Partir en varias piezas" - #: src/slic3r/GUI/Plater.cpp:3095 msgid "Split to Objects" msgstr "Partir en Varias Piezas" -#: src/slic3r/GUI/GLCanvas3D.cpp:4575 -msgid "Split to parts" -msgstr "Separar en piezas" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2008 msgid "Split to Parts" msgstr "Separar en Piezas" +#: src/slic3r/GUI/GLCanvas3D.cpp:4565 +msgid "Split to objects" +msgstr "Partir en varias piezas" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4575 +msgid "Split to parts" +msgstr "Separar en piezas" + #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:66 #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:132 msgid "Split triangles" @@ -12358,6 +11861,12 @@ msgstr "Estándar" msgid "Stars" msgstr "Estrellas" +#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 +#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 +#: src/libslic3r/PrintConfig.cpp:2415 +msgid "Start G-code" +msgstr "Código G inicial" + #: src/slic3r/GUI/MainFrame.cpp:1142 msgid "Start a new project" msgstr "Empezar un nuevo proyecto" @@ -12366,12 +11875,6 @@ msgstr "Empezar un nuevo proyecto" msgid "Start at height" msgstr "Comenzar en altura" -#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 -#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 -#: src/libslic3r/PrintConfig.cpp:2415 -msgid "Start G-code" -msgstr "Código G inicial" - #: src/slic3r/GUI/MainFrame.cpp:1293 msgid "Start new slicing process" msgstr "Comenzar un nuevo proceso de laminado" @@ -12428,10 +11931,6 @@ msgstr "Estado:" msgid "Stealth" msgstr "Silencio" -#: src/slic3r/GUI/Plater.cpp:1435 -msgid "stealth mode" -msgstr "modo silencioso" - #: src/slic3r/GUI/GCodeViewer.cpp:3755 msgid "Stealth mode" msgstr "Modo silencioso" @@ -12471,22 +11970,6 @@ msgstr "" "Desmontado con éxito. El dispositivo %s (%s) ahora se puede retirar de forma " "segura del ordenador." -#: src/slic3r/GUI/PresetHints.cpp:181 -msgid "support" -msgstr "soporte" - -#: src/libslic3r/PrintConfig.cpp:3517 -msgid "Support base diameter" -msgstr "Diámetro de la base del soporte" - -#: src/libslic3r/PrintConfig.cpp:3527 -msgid "Support base height" -msgstr "Altura de la base del soporte" - -#: src/libslic3r/PrintConfig.cpp:3536 -msgid "Support base safety distance" -msgstr "Distancia de seguridad de la base de soportes" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Support Blocker" msgstr "Bloqueo de soporte" @@ -12503,14 +11986,22 @@ msgstr "Forzado de Soporte" msgid "Support Generator" msgstr "Generador de Soportes" +#: src/libslic3r/PrintConfig.cpp:3517 +msgid "Support base diameter" +msgstr "Diámetro de la base del soporte" + +#: src/libslic3r/PrintConfig.cpp:3527 +msgid "Support base height" +msgstr "Altura de la base del soporte" + +#: src/libslic3r/PrintConfig.cpp:3536 +msgid "Support base safety distance" +msgstr "Distancia de seguridad de la base de soportes" + #: src/slic3r/GUI/Tab.cpp:4599 msgid "Support head" msgstr "Cabeza del soporte" -#: src/slic3r/GUI/PresetHints.cpp:183 -msgid "support interface" -msgstr "interfaz de soporte" - #: src/slic3r/GUI/GUI_Factories.cpp:56 src/slic3r/GUI/GUI_Factories.cpp:131 #: src/slic3r/GUI/GUI_Preview.cpp:249 src/slic3r/GUI/Tab.cpp:1550 #: src/slic3r/GUI/Tab.cpp:1552 src/libslic3r/ExtrusionEntity.cpp:328 @@ -12596,10 +12087,6 @@ msgstr "Edición de puntos de soporte" msgid "Supports" msgstr "Soportes" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "supports and pad" -msgstr "soportes y pad" - #: src/libslic3r/PrintConfig.cpp:1596 msgid "Supports remaining times" msgstr "Compatible con tiempos restantes" @@ -12634,10 +12121,6 @@ msgstr "" msgid "Suppress to open hyperlink in browser" msgstr "Suprimir para abrir hipervínculo en el navegador" -#: src/slic3r/GUI/MainFrame.cpp:1661 -msgid "SVG" -msgstr "SVG" - #: src/slic3r/GUI/Mouse3DController.cpp:508 msgid "Swap Y/Z axes" msgstr "Alternar ejes Y/Z" @@ -12659,10 +12142,6 @@ msgstr "Código para cambiar de color (%1%) para:" msgid "Switch to 3D" msgstr "Cambiar a 3D" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 -msgid "Switch to editing mode" -msgstr "Cambiar al modo edición" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:113 msgid "Switch to Preview" msgstr "Cambiar a Previsualización" @@ -12671,6 +12150,10 @@ msgstr "Cambiar a Previsualización" msgid "Switch to Settings" msgstr "Cambiar a Ajustes" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 +msgid "Switch to editing mode" +msgstr "Cambiar al modo edición" + #: src/slic3r/GUI/wxExtensions.cpp:644 #, c-format, boost-format msgid "Switch to the %s mode" @@ -12711,10 +12194,6 @@ msgstr "" "\n" "¿Quiere continuar?" -#: src/slic3r/GUI/Tab.cpp:1413 -msgid "symbolic profile name" -msgstr "nombre perfil simbólico" - #: src/libslic3r/PrintConfig.cpp:2761 msgid "" "Synchronize support layers with the object print layers. This is useful with " @@ -12732,14 +12211,14 @@ msgstr "Sincronizar con las capas del objeto" msgid "System &Info" msgstr "&Información del Sistema" -#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 -msgid "System info sent successfully. Thank you." -msgstr "Info del sistema enviada con éxito. Gracias." - #: src/slic3r/GUI/SysInfoDialog.cpp:84 msgid "System Information" msgstr "Información del sistema" +#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 +msgid "System info sent successfully. Thank you." +msgstr "Info del sistema enviada con éxito. Gracias." + #: src/slic3r/GUI/PresetComboBoxes.cpp:249 #: src/slic3r/GUI/PresetComboBoxes.cpp:287 #: src/slic3r/GUI/PresetComboBoxes.cpp:794 @@ -12825,6 +12304,146 @@ msgstr "" "Si el dispositivo está conectado, presione el botón Reset al lado del " "conector USB ..." +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 +msgid "" +"The SLA archive doesn't contain any presets. Please activate some SLA " +"printer preset first before importing that SLA archive." +msgstr "" +"El archivo SLA no contiene ningún ajuste. Por favor, activa primero algún " +"preajuste de la impresora SLA antes de importar ese archivo SLA." + +#: src/slic3r/GUI/ConfigManipulation.cpp:82 +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:469 +msgid "" +"The Spiral Vase option can only be used when printing single material " +"objects." +msgstr "" +"La opción Vaso en espiral solo puede ser usada al imprimir objetos de un " +"solo material." + +#: src/libslic3r/Print.cpp:494 +msgid "" +"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." +msgstr "" +"La Torre de Limpieza actualmente no es compatible con E volumétrico " +"(use_volumetric_e=0)." + +#: src/slic3r/GUI/ConfigManipulation.cpp:121 +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)." + +#: src/libslic3r/Print.cpp:598 +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)." +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. " +"(Tanto support_material_extruder como support_material_interface_extruder " +"deben configurarse en 0)." + +#: src/libslic3r/Print.cpp:496 +msgid "" +"The Wipe Tower is currently not supported for multimaterial sequential " +"prints." +msgstr "" +"La Torre de Limpieza no se permite ahora para impresiones secuenciales " +"multimaterial." + +#: src/libslic3r/Print.cpp:488 +msgid "" +"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." +msgstr "" +"La Torre de Limpieza solo es compatible con las variantes de código G usadas " +"por Marlin, RepRap/Sprinter, RepRapFirmware y Repetier." + +#: src/libslic3r/Print.cpp:490 +msgid "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." +msgstr "" +"En la actualidad, Wipe Tower solo es compatible con el direccionamiento " +"relativo del extrusor (use_relative_e_distances=1)." + +#: src/libslic3r/Print.cpp:519 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"over an equal number of raft layers" +msgstr "" +"La torre de limpieza sólo se permite para varios objetos si se imprimen " +"sobre un número igual de capas de balsa" + +#: src/libslic3r/Print.cpp:522 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"with the same support_material_contact_distance" +msgstr "" +"La torre de limpieza sólo es compatible con varios objetos si se imprimen " +"con la misma support_material_contact_distance" + +#: src/libslic3r/Print.cpp:524 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are sliced " +"equally." +msgstr "" +"La torre de limpieza sólo es compatible con varios objetos si se cortan por " +"igual." + +#: src/libslic3r/Print.cpp:517 +msgid "" +"The Wipe Tower is only supported for multiple objects if they have equal " +"layer heights" +msgstr "" +"La torre de limpieza sólo es compatible con varios objetos si tienen alturas " +"de capas iguales" + +#: src/slic3r/GUI/Tab.cpp:3005 +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 "" +"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:537 +msgid "" +"The Wipe tower is only supported if all objects have the same variable layer " +"height" +msgstr "" +"La Torre de Limpieza solo es compatible si todos los objetos tienen la misma " +"altura de capa variable" + #: src/slic3r/GUI/GUI_App.cpp:957 #, boost-format msgid "" @@ -12983,20 +12602,21 @@ msgstr "" "compensar el aplatamiento de la 1ª capa, también conocido como efecto Pie de " "Elefante." -#: src/slic3r/GUI/Plater.cpp:5717 -msgid "The following characters are not allowed by a FAT file system:" -msgstr "" -"Los siguientes caracteres no están permitidos por un sistema de archivos FAT:" - -#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 -msgid "the following characters are not allowed:" -msgstr "los siguientes caracteres no están permitidos:" - #: src/slic3r/GUI/ConfigWizard.cpp:2459 msgid "The following FFF printer models have no filament selected:" msgstr "" "Los siguientes modelos de impresoras FFF no tienen filamento seleccionado:" +#: src/slic3r/GUI/ConfigWizard.cpp:2477 +msgid "The following SLA printer models have no materials selected:" +msgstr "" +"Los siguientes modelos de impresoras SLA no tienen filamento seleccionado:" + +#: src/slic3r/GUI/Plater.cpp:5717 +msgid "The following characters are not allowed by a FAT file system:" +msgstr "" +"Los siguientes caracteres no están permitidos por un sistema de archivos FAT:" + #: src/slic3r/GUI/Tab.cpp:1842 #, c-format, boost-format msgid "" @@ -13052,15 +12672,6 @@ msgid "" msgstr "" "Los siguientes atajos son aplicables cuando el gizmo especificado está activo" -#: src/slic3r/GUI/ConfigWizard.cpp:2477 -msgid "The following SLA printer models have no materials selected:" -msgstr "" -"Los siguientes modelos de impresoras SLA no tienen filamento seleccionado:" - -#: src/slic3r/GUI/SavePresetDialog.cpp:110 -msgid "the following suffix is not allowed:" -msgstr "el siguiente sufijo no está permitido:" - #: src/slic3r/GUI/GUI.cpp:327 msgid "The following values were substituted:" msgstr "Se sustituyeron los siguientes valores:" @@ -13388,6 +12999,15 @@ msgstr "" "El proyecto seleccionado no está disponible.\n" "¿Desea eliminarlo de la lista de proyectos recientes?" +#: src/slic3r/GUI/DoubleSlider.cpp:1408 +msgid "" +"The sequential print is on.\n" +"It's impossible to apply any custom G-code for objects printing sequentually." +msgstr "" +"La impresión secuencial está activada.\n" +"Es imposible aplicar cualquier código G personalizado para los objetos que " +"se imprimen secuencialmente." + #: src/slic3r/GUI/DoubleSlider.cpp:1440 msgid "" "The sequential print is on.\n" @@ -13400,15 +13020,6 @@ msgstr "" "secuencialmente.\n" "Este código no se procesará durante la generación del G-code." -#: src/slic3r/GUI/DoubleSlider.cpp:1408 -msgid "" -"The sequential print is on.\n" -"It's impossible to apply any custom G-code for objects printing sequentually." -msgstr "" -"La impresión secuencial está activada.\n" -"Es imposible aplicar cualquier código G personalizado para los objetos que " -"se imprimen secuencialmente." - #: src/slic3r/GUI/ConfigWizard.cpp:1287 msgid "The size of the object can be specified in inches" msgstr "El tamaño del objeto puede ser especificado en pulgadas" @@ -13417,14 +13028,6 @@ msgstr "El tamaño del objeto puede ser especificado en pulgadas" msgid "The size of the object is zero" msgstr "El tamaño del objeto es cero" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 -msgid "" -"The SLA archive doesn't contain any presets. Please activate some SLA " -"printer preset first before importing that SLA archive." -msgstr "" -"El archivo SLA no contiene ningún ajuste. Por favor, activa primero algún " -"preajuste de la impresora SLA antes de importar ese archivo SLA." - #: src/libslic3r/PrintConfig.cpp:3671 msgid "" "The slope of the pad wall relative to the bed plane. 90 degrees means " @@ -13448,32 +13051,6 @@ msgid "The speed for retractions (it only applies to the extruder motor)." msgstr "" "La velocidad para las retracciones (solo se aplica al motor del extrusor)." -#: src/slic3r/GUI/ConfigManipulation.cpp:82 -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:469 -msgid "" -"The Spiral Vase option can only be used when printing single material " -"objects." -msgstr "" -"La opción Vaso en espiral solo puede ser usada al imprimir objetos de un " -"solo material." - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:630 msgid "The supplied name is empty. It can't be saved." msgstr "El nombre proporcionado está vacío. No se puede guardar." @@ -13527,104 +13104,6 @@ msgstr "" "support_material_contact_distance se utilizará para las distancias Z de " "contacto superior e inferior." -#: src/slic3r/GUI/Tab.cpp:3005 -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 "" -"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:494 -msgid "" -"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." -msgstr "" -"La Torre de Limpieza actualmente no es compatible con E volumétrico " -"(use_volumetric_e=0)." - -#: src/slic3r/GUI/ConfigManipulation.cpp:121 -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)." - -#: src/libslic3r/Print.cpp:598 -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)." -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. " -"(Tanto support_material_extruder como support_material_interface_extruder " -"deben configurarse en 0)." - -#: src/libslic3r/Print.cpp:496 -msgid "" -"The Wipe Tower is currently not supported for multimaterial sequential " -"prints." -msgstr "" -"La Torre de Limpieza no se permite ahora para impresiones secuenciales " -"multimaterial." - -#: src/libslic3r/Print.cpp:488 -msgid "" -"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " -"RepRapFirmware and Repetier G-code flavors." -msgstr "" -"La Torre de Limpieza solo es compatible con las variantes de código G usadas " -"por Marlin, RepRap/Sprinter, RepRapFirmware y Repetier." - -#: src/libslic3r/Print.cpp:490 -msgid "" -"The Wipe Tower is currently only supported with the relative extruder " -"addressing (use_relative_e_distances=1)." -msgstr "" -"En la actualidad, Wipe Tower solo es compatible con el direccionamiento " -"relativo del extrusor (use_relative_e_distances=1)." - -#: src/libslic3r/Print.cpp:519 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"over an equal number of raft layers" -msgstr "" -"La torre de limpieza sólo se permite para varios objetos si se imprimen " -"sobre un número igual de capas de balsa" - -#: src/libslic3r/Print.cpp:522 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"with the same support_material_contact_distance" -msgstr "" -"La torre de limpieza sólo es compatible con varios objetos si se imprimen " -"con la misma support_material_contact_distance" - -#: src/libslic3r/Print.cpp:524 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are sliced " -"equally." -msgstr "" -"La torre de limpieza sólo es compatible con varios objetos si se cortan por " -"igual." - -#: src/libslic3r/Print.cpp:517 -msgid "" -"The Wipe Tower is only supported for multiple objects if they have equal " -"layer heights" -msgstr "" -"La torre de limpieza sólo es compatible con varios objetos si tienen alturas " -"de capas iguales" - #: src/libslic3r/Print.cpp:482 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " @@ -13633,14 +13112,6 @@ msgstr "" "La torre de limpieza solo es compatible si todos los extrusores tienen el " "mismo diámetro del nozzle y usan filamento del mismo diámetro." -#: src/libslic3r/Print.cpp:537 -msgid "" -"The Wipe tower is only supported if all objects have the same variable layer " -"height" -msgstr "" -"La Torre de Limpieza solo es compatible si todos los objetos tienen la misma " -"altura de capa variable" - #: src/slic3r/GUI/Plater.cpp:4096 msgid "There are active warnings concerning sliced models:" msgstr "Hay avisos activos respecto a los modelos laminados:" @@ -13692,6 +13163,18 @@ msgstr "Puentes gruesos" msgid "This %s version: %s" msgstr "Esta %s versión: %s" +#: src/libslic3r/PrintConfig.cpp:2433 +msgid "This G-code will be used as a code for the color change" +msgstr "Este código G se utilizará como código para el cambio de color" + +#: src/libslic3r/PrintConfig.cpp:2442 +msgid "This G-code will be used as a code for the pause print" +msgstr "Este código G se utilizará como código para la pausa de impresión" + +#: src/libslic3r/PrintConfig.cpp:2451 +msgid "This G-code will be used as a custom code" +msgstr "Este código G se utilizará como código personalizado" + #: src/slic3r/GUI/DoubleSlider.cpp:2087 src/slic3r/GUI/Tab.cpp:1322 msgid "" "This action is not revertible.\n" @@ -13963,18 +13446,6 @@ msgstr "" "Esta bandera moverá la boquilla mientras se retrae para minimizar la posible " "mancha en los extrusores con fugas." -#: src/libslic3r/PrintConfig.cpp:2433 -msgid "This G-code will be used as a code for the color change" -msgstr "Este código G se utilizará como código para el cambio de color" - -#: src/libslic3r/PrintConfig.cpp:2442 -msgid "This G-code will be used as a code for the pause print" -msgstr "Este código G se utilizará como código para la pausa de impresión" - -#: src/libslic3r/PrintConfig.cpp:2451 -msgid "This G-code will be used as a custom code" -msgstr "Este código G se utilizará como código personalizado" - #: src/slic3r/GUI/Tab.cpp:1351 msgid "This is a default preset." msgstr "Este es un ajuste por defecto." @@ -14409,10 +13880,6 @@ msgstr "" "para conseguir cambios de herramienta fiables con materiales flexibles que " "pueden necesitar más tiempo para encogerse a su tamaño original." -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "to" -msgstr "a" - #: src/slic3r/GUI/Tab.cpp:1365 msgid "To do that please specify a new name for the preset." msgstr "Para hacerlo por favor especifique un nuevo nombre para esos ajustes." @@ -14448,10 +13915,6 @@ msgstr "" msgid "Toggle %c axis mirroring" msgstr "Activar reflejo del eje %c" -#: src/libslic3r/miniz_extension.cpp:93 -msgid "too many files" -msgstr "demasiados archivos" - #: src/libslic3r/SLAPrintSteps.cpp:426 msgid "Too many overlapping holes." msgstr "Demasiados agujeros superpuestos." @@ -14506,6 +13969,10 @@ msgstr "" "Sugerencia de grosor de la carcasa superior / inferior: no disponible debido " "a una altura de capa inválida." +#: src/slic3r/GUI/MainFrame.cpp:1118 +msgid "Top View" +msgstr "Vista superior" + #: src/libslic3r/PrintConfig.cpp:2548 msgid "Top contact Z distance" msgstr "Distancia Z de contacto superior" @@ -14528,10 +13995,6 @@ msgid "Top shell is %1% mm thick for layer height %2% mm." msgstr "" "La tapa superior es de %1% mm de espesor con una altura de capa de %2% mm." -#: src/slic3r/GUI/PresetHints.cpp:178 -msgid "top solid infill" -msgstr "relleno sólido superior" - #: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:323 #: src/libslic3r/ExtrusionEntity.cpp:350 src/libslic3r/PrintConfig.cpp:2839 #: src/libslic3r/PrintConfig.cpp:2852 @@ -14542,10 +14005,6 @@ msgstr "Relleno sólido superior" msgid "Top solid layers" msgstr "Capas solidas superiores" -#: src/slic3r/GUI/MainFrame.cpp:1118 -msgid "Top View" -msgstr "Vista superior" - #: src/libslic3r/PrintConfig.cpp:1550 msgid "Topmost surface only" msgstr "Solo en la superficie superior" @@ -14627,6 +14086,34 @@ msgstr "Tipo de impresora." msgid "Type:" msgstr "Tipo:" +#: src/slic3r/GUI/Tab.cpp:4257 +msgid "UNLOCKED LOCK" +msgstr "CANDADO ABIERTO" + +#: src/slic3r/GUI/Tab.cpp:4283 +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)." + +#: src/slic3r/GUI/Tab.cpp:4298 +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)" + #: src/libslic3r/SLAPrintSteps.cpp:441 msgid "Unable to drill the current configuration of holes into the model." msgstr "No se puede perforar la configuración actual de agujeros en el modelo." @@ -14670,10 +14157,6 @@ msgstr "Grupo sin definir" msgid "Undefined" msgstr "Indefinido" -#: src/libslic3r/miniz_extension.cpp:91 -msgid "undefined error" -msgstr "error no definido" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:294 msgid "Underflow" msgstr "Subflujo" @@ -14695,6 +14178,10 @@ msgstr[1] "Deshacer %1$d Acciones" msgid "Undo / Redo is processing" msgstr "Deshacer / Rehacer se está procesando" +#: src/slic3r/GUI/GLCanvas3D.cpp:3916 +msgid "Undo History" +msgstr "Deshacer Historia" + #: src/slic3r/GUI/NotificationManager.hpp:772 msgid "Undo desktop integration failed." msgstr "Deshacer la integración en el escritorio ha fallado." @@ -14703,10 +14190,6 @@ msgstr "Deshacer la integración en el escritorio ha fallado." msgid "Undo desktop integration was successful." msgstr "Deshacer la integración en el escritorio ha sido un éxito." -#: src/slic3r/GUI/GLCanvas3D.cpp:3916 -msgid "Undo History" -msgstr "Deshacer Historia" - #: resources/data/hints.ini: [hint:Undo/redo history] msgid "" "Undo/redo history\n" @@ -14718,10 +14201,6 @@ msgstr "" "dedeshacer/rehacer para ver el historial de cambios y deshacer o " "rehacer varias acciones a la vez?" -#: src/libslic3r/miniz_extension.cpp:115 -msgid "unexpected decompressed size" -msgstr "tamaño de descompresión inesperado" - #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:28 #: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:317 msgid "Unknown" @@ -14738,10 +14217,6 @@ msgstr "Ha ocurrido un error desconocido" msgid "Unknown error occured during exporting G-code." msgstr "Se produjo un error desconocido durante la exportación del código G." -#: src/slic3r/GUI/WipeTowerDialog.cpp:308 -msgid "unloaded" -msgstr "descargado" - #: src/libslic3r/PrintConfig.cpp:908 msgid "Unloading speed" msgstr "Velocidad de descarga" @@ -14750,34 +14225,6 @@ msgstr "Velocidad de descarga" msgid "Unloading speed at the start" msgstr "Velocidad de descarga al inicio" -#: src/slic3r/GUI/Tab.cpp:4257 -msgid "UNLOCKED LOCK" -msgstr "CANDADO ABIERTO" - -#: src/slic3r/GUI/Tab.cpp:4283 -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)." - -#: src/slic3r/GUI/Tab.cpp:4298 -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)" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 msgid "Unsaved Changes" msgstr "Cambios No guardados" @@ -14786,26 +14233,6 @@ msgstr "Cambios No guardados" msgid "Unselect gizmo or clear selection" msgstr "Deseleccionar gizmo o borrar selección" -#: src/libslic3r/miniz_extension.cpp:119 -msgid "unsupported central directory size" -msgstr "tamaño del directorio central no compatible" - -#: src/libslic3r/miniz_extension.cpp:99 -msgid "unsupported encryption" -msgstr "encriptación no compatible" - -#: src/libslic3r/miniz_extension.cpp:101 -msgid "unsupported feature" -msgstr "característica no compatible" - -#: src/libslic3r/miniz_extension.cpp:97 -msgid "unsupported method" -msgstr "método no compatible" - -#: src/libslic3r/miniz_extension.cpp:109 -msgid "unsupported multidisk archive" -msgstr "archivo multidisk no compatible" - #: src/slic3r/GUI/OpenGLManager.cpp:265 msgid "Unsupported OpenGL version" msgstr "Versión de OpenGL no soportada" @@ -14819,10 +14246,6 @@ msgstr "Selección no soportada" msgid "Untitled" msgstr "Sin título" -#: src/slic3r/GUI/GCodeViewer.cpp:3176 -msgid "up to" -msgstr "hasta" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 msgid "Update available" msgstr "Actualización disponible" @@ -14892,6 +14315,10 @@ msgstr "" "Utiliza \"Incluso-extraño\" para los modelos de avión de 3DLabPrint. Utiliza " "\"Cerrar agujeros\" para cerrar todos los agujeros del modelo." +#: src/slic3r/GUI/Preferences.cpp:268 +msgid "Use Retina resolution for the 3D scene" +msgstr "Usa la resolución de Retina para la escena 3D" + #: src/slic3r/GUI/DoubleSlider.cpp:1615 src/slic3r/GUI/GUI_Factories.cpp:787 msgid "Use another extruder" msgstr "Usar otro extrusor" @@ -14946,10 +14373,6 @@ msgstr "Usar cámara en perspectiva" msgid "Use relative E distances" msgstr "Usar las distancias relativas en E" -#: src/slic3r/GUI/Preferences.cpp:268 -msgid "Use Retina resolution for the 3D scene" -msgstr "Usa la resolución de Retina para la escena 3D" - #: src/slic3r/GUI/Preferences.cpp:507 msgid "Use system menu for application" msgstr "Utilizar el menú del sistema para la aplicación" @@ -14974,15 +14397,6 @@ msgstr "" msgid "Use volumetric E" msgstr "Usar E volumétrico" -#: src/slic3r/GUI/DoubleSlider.cpp:1634 -msgid "used" -msgstr "usado" - -#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 -#: src/slic3r/GUI/GCodeViewer.cpp:3562 -msgid "Used filament" -msgstr "Filamento usado" - #: src/slic3r/GUI/Plater.cpp:296 src/slic3r/GUI/Plater.cpp:1376 msgid "Used Filament (g)" msgstr "Filamento Usado (g)" @@ -15011,6 +14425,11 @@ msgstr "Material usado (ml)" msgid "Used Material (unit)" msgstr "Material usado (unidades)" +#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 +#: src/slic3r/GUI/GCodeViewer.cpp:3562 +msgid "Used filament" +msgstr "Filamento usado" + #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:25 src/libslic3r/PrintConfig.cpp:317 msgid "User" msgstr "Usuario" @@ -15021,10 +14440,6 @@ msgstr "Usuario" msgid "User presets" msgstr "Ajustes de usuario" -#: src/libslic3r/miniz_extension.cpp:149 -msgid "validation failed" -msgstr "validación fallida" - #: src/slic3r/GUI/ButtonsDescription.cpp:57 msgid "Value is the same as the system value" msgstr "El valor es el mismo que el del sistema" @@ -15045,6 +14460,11 @@ msgstr "Los valores en esta columna son para el modo Normal" msgid "Values in this column are for Stealth mode" msgstr "Los valores en esta columna son para el modo Silencioso" +#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 +msgid "Variable layer height" +msgstr "Altura de capa variable" + #: resources/data/hints.ini: [hint:Variable layer height] msgid "" "Variable layer height\n" @@ -15058,11 +14478,6 @@ msgstr "" "herramientaAltura de capa variable. (No disponible para impresoras " "SLA.)" -#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 -msgid "Variable layer height" -msgstr "Altura de capa variable" - #: src/slic3r/GUI/GLCanvas3D.cpp:1273 msgid "Variable layer height - Adaptive" msgstr "Altura de capa variable - Adaptativa" @@ -15079,14 +14494,6 @@ msgstr "Altura de capa variable - Reiniciar" msgid "Variable layer height - Smooth all" msgstr "Altura de capa variable - Suavizar todo" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "variants" -msgstr "variantes" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 -msgid "vendor" -msgstr "fabricante" - #: src/slic3r/GUI/ConfigWizard.cpp:642 msgid "Vendor:" msgstr "Vendedor:" @@ -15100,18 +14507,14 @@ msgstr "Código G detallado" msgid "Version" msgstr "Versión" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 -msgid "version" -msgstr "versión" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 +msgid "Vertical Slider" +msgstr "Control Deslizante Vertical" #: src/slic3r/GUI/Tab.cpp:1457 msgid "Vertical shells" msgstr "Carcasas verticales" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 -msgid "Vertical Slider" -msgstr "Control Deslizante Vertical" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:218 #: src/slic3r/GUI/KBShortcutsDialog.cpp:222 msgid "Vertical slider - Move active thumb Down" @@ -15189,6 +14592,37 @@ msgstr "Tasa de flujo volumétrico (mm³/seg)" msgid "Volumetric speed" msgstr "Velocidad volumétrica" +#: src/slic3r/GUI/NotificationManager.cpp:1459 +#: src/slic3r/GUI/NotificationManager.cpp:1486 +#: src/slic3r/GUI/NotificationManager.cpp:1494 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +msgid "WARNING:" +msgstr "AVISO:" + +#: src/slic3r/GUI/Tab.cpp:4264 +msgid "WHITE BULLET" +msgstr "VIÑETA BLANCA" + +#: src/slic3r/GUI/Tab.cpp:4286 +msgid "WHITE BULLET icon indicates a non system (or non default) preset." +msgstr "El icono de VIÑETA BLANCA un ajuste no del sistema (o no por defecto)" + +#: src/slic3r/GUI/Tab.cpp:4289 +msgid "" +"WHITE BULLET icon indicates that the settings are the same as in the last " +"saved preset for the current option group." +msgstr "" +"El símbolo de VIÑETA BLANCA indica que los ajustes son los mismos que los de " +"la última vez que salvaste los ajustes para el grupo de opciones actual." + +#: src/slic3r/GUI/Tab.cpp:4304 +msgid "" +"WHITE BULLET icon indicates that the value is the same as in the last saved " +"preset." +msgstr "" +"El símbolo de VIÑETA BLANCA indica que los valores son los mismos que los de " +"los ajustes guardados la última vez." + #: src/libslic3r/PrintConfig.cpp:3740 msgid "Wall thickness" msgstr "Espesor de pared" @@ -15201,13 +14635,6 @@ msgstr "Espesor de pared" msgid "Warning" msgstr "Peligro" -#: src/slic3r/GUI/NotificationManager.cpp:1459 -#: src/slic3r/GUI/NotificationManager.cpp:1486 -#: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 -msgid "WARNING:" -msgstr "AVISO:" - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:590 #, boost-format msgid "" @@ -15266,10 +14693,6 @@ msgstr "" "proyecto en la aplicación, muestra un cuadro de diálogo que solicita " "seleccionar la acción a realizar en el archivo a cargar." -#: src/slic3r/GUI/PresetHints.cpp:192 -msgid "when printing" -msgstr "al imprimir" - #: src/libslic3r/PrintConfig.cpp:530 msgid "" "When printing multi-material objects, this settings will make Slic3r to clip " @@ -15362,30 +14785,6 @@ msgstr "" "Cuando la retracción se compensa después de un movimiento, el extrusor " "necesitará introducir más filamento. Este ajuste raramente se necesita." -#: src/slic3r/GUI/Tab.cpp:4264 -msgid "WHITE BULLET" -msgstr "VIÑETA BLANCA" - -#: src/slic3r/GUI/Tab.cpp:4286 -msgid "WHITE BULLET icon indicates a non system (or non default) preset." -msgstr "El icono de VIÑETA BLANCA un ajuste no del sistema (o no por defecto)" - -#: src/slic3r/GUI/Tab.cpp:4289 -msgid "" -"WHITE BULLET icon indicates that the settings are the same as in the last " -"saved preset for the current option group." -msgstr "" -"El símbolo de VIÑETA BLANCA indica que los ajustes son los mismos que los de " -"la última vez que salvaste los ajustes para el grupo de opciones actual." - -#: src/slic3r/GUI/Tab.cpp:4304 -msgid "" -"WHITE BULLET icon indicates that the value is the same as in the last saved " -"preset." -msgstr "" -"El símbolo de VIÑETA BLANCA indica que los valores son los mismos que los de " -"los ajustes guardados la última vez." - #: src/slic3r/GUI/Tab.cpp:3999 msgid "Whole word" msgstr "Palabra completa" @@ -15430,6 +14829,11 @@ msgstr "" msgid "Wipe" msgstr "Limpiar" +#: src/slic3r/GUI/ConfigManipulation.cpp:126 +#: src/slic3r/GUI/ConfigManipulation.cpp:146 +msgid "Wipe Tower" +msgstr "Torre de limpieza" + #: src/libslic3r/PrintConfig.cpp:3013 msgid "Wipe into this object" msgstr "Limpiar en el objeto" @@ -15448,15 +14852,6 @@ msgstr "Opciones de limpieza" msgid "Wipe tower" msgstr "Torre de limpieza" -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "wipe tower" -msgstr "torre de limpieza" - -#: src/slic3r/GUI/ConfigManipulation.cpp:126 -#: src/slic3r/GUI/ConfigManipulation.cpp:146 -msgid "Wipe Tower" -msgstr "Torre de limpieza" - #: src/slic3r/GUI/WipeTowerDialog.cpp:173 msgid "Wipe tower - Purging volume adjustment" msgstr "Torre de limpieza - Ajuste del volumen de purga" @@ -15481,10 +14876,6 @@ msgstr "Ángulo de rotación de la torre de limpieza con respecto al eje X." msgid "Wipe while retracting" msgstr "Limpiar mientras se retrae" -#: src/slic3r/GUI/PresetHints.cpp:193 -msgid "with a volumetric rate" -msgstr "con una tasa volumétrica" - #: src/libslic3r/PrintConfig.cpp:2122 msgid "" "With bowden extruders, it may be wise to do some amount of quick retract " @@ -15534,10 +14925,6 @@ msgstr "" "problema con la nueva versión.\n" "Updated configuration bundles:" -#: src/libslic3r/miniz_extension.cpp:151 -msgid "write calledback failed" -msgstr "fallo write calledback" - #: src/libslic3r/PrintConfig.cpp:4306 msgid "Write information about the model to the console." msgstr "Escribir información sobre el modelo en la consola." @@ -15550,6 +14937,10 @@ msgstr "Contraseña incorrecta" msgid "X coordinate of the left front corner of a wipe tower" msgstr "Coordenada X de la esquina frontal izquierda de la torre de limpieza" +#: src/libslic3r/PrintConfig.cpp:3027 +msgid "XY Size Compensation" +msgstr "Compensación de tamaño XY" + #: src/libslic3r/PrintConfig.cpp:2517 msgid "XY separation between an object and its support" msgstr "Separación XY entre un objeto y su soporte" @@ -15562,10 +14953,6 @@ msgstr "" "Separación XY entre un objeto y su soporte. Si se expresa como porcentaje " "(por ejemplo 50%), se calculará sobre el ancho del perímetro externo." -#: src/libslic3r/PrintConfig.cpp:3027 -msgid "XY Size Compensation" -msgstr "Compensación de tamaño XY" - #: src/libslic3r/PrintConfig.cpp:2976 msgid "Y coordinate of the left front corner of a wipe tower" msgstr "Coordenada Y de la esquina delantera izquierda de la torre de limpieza" @@ -15629,6 +15016,10 @@ msgstr "" "Puede poner sus notas personales aquí. Este texto se añadirá al código G " "como comentarios." +#: src/libslic3r/PrintConfig.cpp:3383 +msgid "You can put your notes regarding the SLA print material here." +msgstr "Puede poner tus notas sobre el material de impresión de SLA aquí." + #: src/libslic3r/PrintConfig.cpp:874 msgid "You can put your notes regarding the filament here." msgstr "Puede poner sus notas con respecto al filamento aquí." @@ -15637,10 +15028,6 @@ msgstr "Puede poner sus notas con respecto al filamento aquí." msgid "You can put your notes regarding the printer here." msgstr "Puede poner sus notas con respecto a la impresora aquí." -#: src/libslic3r/PrintConfig.cpp:3383 -msgid "You can put your notes regarding the SLA print material here." -msgstr "Puede poner tus notas sobre el material de impresión de SLA aquí." - #: src/libslic3r/PrintConfig.cpp:637 msgid "" "You can set this to a positive value to disable fan at all during the first " @@ -15872,6 +15259,622 @@ msgstr "" "Zoom a objetos seleccionados\n" "o a todos los objetos en escena, si no se seleccionó ninguno" +#: src/slic3r/GUI/GCodeViewer.cpp:3182 +msgid "above" +msgstr "sobre" + +#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 +msgid "active" +msgstr "activo" + +#: src/libslic3r/miniz_extension.cpp:121 +msgid "allocation failed" +msgstr "asignación fallida" + +#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 +msgid "approximate seconds" +msgstr "segundos aproximadamente" + +#: src/libslic3r/miniz_extension.cpp:147 +msgid "archive is too large" +msgstr "el archivo es demasiado grande" + +#: src/slic3r/GUI/MainFrame.cpp:655 +msgid "based on Slic3r" +msgstr "basado en Slic3r" + +#: src/libslic3r/miniz_extension.cpp:141 +msgid "buffer too small" +msgstr "buffer demasiado pequeño" + +#: src/slic3r/GUI/PresetHints.cpp:191 +msgid "by the print profile maximum" +msgstr "por el máximo perfil de impresión" + +#: src/libslic3r/miniz_extension.cpp:113 +msgid "compression failed" +msgstr "compresión fallida" + +#: src/slic3r/GUI/DoubleSlider.cpp:1458 +msgid "continue" +msgstr "continuar" + +#: src/libslic3r/miniz_extension.cpp:111 +msgid "decompression failed or archive is corrupted" +msgstr "descompresión fallida o archivo está dañado" + +#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 +#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 +msgid "default" +msgstr "por defecto" + +#: src/slic3r/GUI/Tab.cpp:1400 +msgid "default SLA material profile" +msgstr "perfil de material de SLA por defecto" + +#: src/slic3r/GUI/Tab.cpp:1404 +msgid "default SLA print profile" +msgstr "perfil de impresión de SLA por defecto" + +#: src/slic3r/GUI/GCodeViewer.cpp:3388 +msgid "default color" +msgstr "color predeterminado" + +#: src/slic3r/GUI/Tab.cpp:1386 +msgid "default filament profile" +msgstr "perfil de filamento por defecto" + +#: src/slic3r/GUI/Tab.cpp:1383 +msgid "default print profile" +msgstr "perfil de impresión por defecto" + +#: src/slic3r/GUI/Field.cpp:190 +msgid "default value" +msgstr "valor por defecto" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "delete" +msgstr "borra" + +#: src/slic3r/GUI/Plater.cpp:3652 +msgid "differs from the original file" +msgstr "difiere del archivo original" + +#: src/slic3r/GUI/Plater.cpp:5202 +msgid "does not contain valid gcode." +msgstr "no contiene gcode válido." + +#: src/slic3r/GUI/PresetHints.cpp:59 +#, boost-format +msgid "except for the first %1% layers." +msgstr "a excepción de las %1% primeras capas." + +#: src/slic3r/GUI/PresetHints.cpp:61 +msgid "except for the first layer." +msgstr "a excepción de la primera capa." + +#: src/slic3r/GUI/PresetHints.cpp:170 +msgid "external perimeters" +msgstr "perímetros externos" + +#: src/libslic3r/miniz_extension.cpp:103 +msgid "failed finding central directory" +msgstr "búsqueda de directorio central fallida" + +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +msgid "filament" +msgstr "filamento" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 +msgid "filaments" +msgstr "filamentos" + +#: src/libslic3r/miniz_extension.cpp:131 +msgid "file close failed" +msgstr "cierre del archivo fallido" + +#: src/libslic3r/miniz_extension.cpp:125 +msgid "file create failed" +msgstr "creación del archivo fallida" + +#: src/libslic3r/miniz_extension.cpp:145 +msgid "file not found" +msgstr "archivo no encontrado" + +#: src/libslic3r/miniz_extension.cpp:123 +msgid "file open failed" +msgstr "apertura de archivo fallida" + +#: src/libslic3r/miniz_extension.cpp:129 +msgid "file read failed" +msgstr "lectura del archivo fallida" + +#: src/libslic3r/miniz_extension.cpp:133 +msgid "file seek failed" +msgstr "búsqueda de archivo fallida" + +#: src/libslic3r/miniz_extension.cpp:135 +msgid "file stat failed" +msgstr "estadística de archivos fallida" + +#: src/libslic3r/miniz_extension.cpp:95 +msgid "file too large" +msgstr "archivo demasiado grande" + +#: src/libslic3r/miniz_extension.cpp:127 +msgid "file write failed" +msgstr "escritura del archivo fallida" + +#: src/slic3r/GUI/PresetHints.cpp:188 +msgid "flow rate is maximized" +msgstr "se maximiza el flujo de material" + +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:4266 +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 "" +"para el botón izquierdo: indica un ajuste que no es del sistema (o no " +"predeterminado),\n" +"para el botón derecho: indica que la configuración no se ha modificado." + +#: src/slic3r/GUI/GCodeViewer.cpp:3190 +msgid "from" +msgstr "desde" + +#: src/slic3r/GUI/Tab.cpp:1412 +msgid "full profile name" +msgstr "nombre completo perfil" + +#: src/libslic3r/PrintConfig.cpp:1057 +msgid "g" +msgstr "g" + +#: src/libslic3r/PrintConfig.cpp:1006 +msgid "g/cm³" +msgstr "g/cm³" + +#: src/libslic3r/PrintConfig.cpp:3288 +msgid "g/ml" +msgstr "g/ml" + +#: src/slic3r/GUI/Plater.cpp:4107 +msgid "generated warnings" +msgstr "avisos generados" + +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +msgid "in" +msgstr "en" + +#. TRN Description for "UNLOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4259 +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)." + +#. TRN Description for "LOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4255 +msgid "" +"indicates that the settings are the same as the system (or default) values " +"for the current option group" +msgstr "" +"indica que los ajustes son los mismos que los valores del sistema (o por " +"defecto) para el grupo de opciones actual" + +#. TRN Description for "BACK ARROW" +#: src/slic3r/GUI/Tab.cpp:4271 +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.\n" +"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." + +#: src/slic3r/GUI/PresetHints.cpp:174 +msgid "infill" +msgstr "relleno" + +#: src/libslic3r/miniz_extension.cpp:143 +msgid "internal error" +msgstr "error interno" + +#: src/libslic3r/miniz_extension.cpp:139 +msgid "invalid filename" +msgstr "nombre de archivo inválido" + +#: src/libslic3r/miniz_extension.cpp:107 +msgid "invalid header or archive is corrupted" +msgstr "encabezado inválido o archivo está dañado" + +#: src/libslic3r/miniz_extension.cpp:137 +msgid "invalid parameter" +msgstr "parámetro inválido" + +#: src/slic3r/GUI/GUI_App.cpp:266 +msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." +msgstr "está basado en Slic3r de Alessandro Ranellucci y la comunidad RepRap." + +#. TRN "Slic3r _is licensed under the_ License" +#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 +msgid "is licensed under the" +msgstr "está licenciado bajo el/los" + +#: src/libslic3r/PrintConfig.cpp:3281 +msgid "kg" +msgstr "kg" + +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 +#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 +#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 +#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 +#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 +msgid "layers" +msgstr "capas" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:309 +msgid "loaded" +msgstr "cargado" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 +msgid "max PrusaSlicer version" +msgstr "máxima versión PrusaSlicer" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 +msgid "min PrusaSlicer version" +msgstr "mínima versión PrusaSlicer" + +#: src/libslic3r/PrintConfig.cpp:3274 +msgid "ml" +msgstr "ml" + +#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 +#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 +#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 +#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 +#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 +#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 +#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 +#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 +#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 +#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 +#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 +#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 +#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 +#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 +#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 +#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 +#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 +#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 +#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 +#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 +#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 +#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 +#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 +#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 +#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 +#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 +#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 +#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 +#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 +#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 +#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 +#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 +#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 +#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 +#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 +#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 +#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 +#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 +#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 +#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 +#: src/libslic3r/PrintConfig.cpp:3767 +msgid "mm" +msgstr "mm" + +#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 +#: src/libslic3r/PrintConfig.cpp:2148 +msgid "mm (zero to disable)" +msgstr "mm (cero para deshabilitar)" + +#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 +#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 +#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 +#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 +#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 +#: src/libslic3r/PrintConfig.cpp:2845 +msgid "mm or %" +msgstr "mm o %" + +#: src/libslic3r/PrintConfig.cpp:385 +msgid "mm or % (zero to disable)" +msgstr "mm or % (cero para deshabilitar)" + +#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 +#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 +#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 +#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 +#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 +#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 +#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 +#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 +#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 +#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 +#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 +msgid "mm/s" +msgstr "mm/s" + +#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 +#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 +#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 +#: src/libslic3r/PrintConfig.cpp:2859 +msgid "mm/s or %" +msgstr "mm/s o %" + +#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 +#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 +#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 +#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 +#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 +msgid "mm/s²" +msgstr "mm/s²" + +#: src/libslic3r/PrintConfig.cpp:2316 +msgid "mm²" +msgstr "mm²" + +#: src/libslic3r/PrintConfig.cpp:957 +msgid "mm³" +msgstr "mm³" + +#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 +#: src/libslic3r/PrintConfig.cpp:1782 +msgid "mm³/s" +msgstr "mm³/s" + +#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 +msgid "mm³/s²" +msgstr "mm³/s²" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "model" +msgstr "modelo" + +#: src/slic3r/GUI/GUI_App.cpp:2159 +msgid "modified" +msgstr "modificado" + +#: src/libslic3r/PrintConfig.cpp:3295 +msgid "money/bottle" +msgstr "dinero/botella" + +#: src/libslic3r/PrintConfig.cpp:1047 +msgid "money/kg" +msgstr "dinero/kg" + +#: src/slic3r/GUI/Plater.cpp:1428 +msgid "normal mode" +msgstr "modo normal" + +#: src/libslic3r/miniz_extension.cpp:105 +msgid "not a ZIP archive" +msgstr "no es un archivo ZIP" + +#: src/slic3r/GUI/ConfigWizard.cpp:262 +msgid "nozzle" +msgstr "boquilla" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "object" +msgid_plural "objects" +msgstr[0] "objeto" +msgstr[1] "objetos" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "objects" +msgstr "objetos" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 +msgid "of a current Object" +msgstr "del Objeto actual" + +#: src/slic3r/GUI/DoubleSlider.cpp:1431 +msgid "or press \"+\" key" +msgstr "o presiona la tecla \"+\"" + +#: src/slic3r/GUI/Field.cpp:193 +msgid "parameter name" +msgstr "nombre del parámetro" + +#: src/slic3r/GUI/PresetHints.cpp:171 +msgid "perimeters" +msgstr "perímetros" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +msgid "print" +msgstr "imprimir" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +msgid "printer" +msgstr "impresora" + +#: src/slic3r/GUI/Tab.cpp:1375 +msgid "printer model" +msgstr "modelo de impresora" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "remove" +msgstr "eliminar" + +#: src/slic3r/Utils/PresetUpdater.cpp:815 +#, c-format, boost-format +msgid "requires max. %s" +msgstr "requiere max. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:812 +#, c-format, boost-format +msgid "requires min. %s" +msgstr "requiere min. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:808 +#, c-format, boost-format +msgid "requires min. %s and max. %s" +msgstr "requiere un min. %s y un max. %s" + +#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 +#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 +#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 +#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 +#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 +#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 +#: src/libslic3r/PrintConfig.cpp:3349 +msgid "s" +msgstr "$" + +#: src/slic3r/GUI/PresetHints.cpp:176 +msgid "solid infill" +msgstr "relleno sólido" + +#: src/slic3r/GUI/Plater.cpp:1435 +msgid "stealth mode" +msgstr "modo silencioso" + +#: src/slic3r/GUI/PresetHints.cpp:181 +msgid "support" +msgstr "soporte" + +#: src/slic3r/GUI/PresetHints.cpp:183 +msgid "support interface" +msgstr "interfaz de soporte" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "supports and pad" +msgstr "soportes y pad" + +#: src/slic3r/GUI/Tab.cpp:1413 +msgid "symbolic profile name" +msgstr "nombre perfil simbólico" + +#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 +msgid "the following characters are not allowed:" +msgstr "los siguientes caracteres no están permitidos:" + +#: src/slic3r/GUI/SavePresetDialog.cpp:110 +msgid "the following suffix is not allowed:" +msgstr "el siguiente sufijo no está permitido:" + +#: src/slic3r/GUI/GCodeViewer.cpp:3190 +msgid "to" +msgstr "a" + +#: src/libslic3r/miniz_extension.cpp:93 +msgid "too many files" +msgstr "demasiados archivos" + +#: src/slic3r/GUI/PresetHints.cpp:178 +msgid "top solid infill" +msgstr "relleno sólido superior" + +#: src/libslic3r/miniz_extension.cpp:91 +msgid "undefined error" +msgstr "error no definido" + +#: src/libslic3r/miniz_extension.cpp:115 +msgid "unexpected decompressed size" +msgstr "tamaño de descompresión inesperado" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:308 +msgid "unloaded" +msgstr "descargado" + +#: src/libslic3r/miniz_extension.cpp:119 +msgid "unsupported central directory size" +msgstr "tamaño del directorio central no compatible" + +#: src/libslic3r/miniz_extension.cpp:99 +msgid "unsupported encryption" +msgstr "encriptación no compatible" + +#: src/libslic3r/miniz_extension.cpp:101 +msgid "unsupported feature" +msgstr "característica no compatible" + +#: src/libslic3r/miniz_extension.cpp:97 +msgid "unsupported method" +msgstr "método no compatible" + +#: src/libslic3r/miniz_extension.cpp:109 +msgid "unsupported multidisk archive" +msgstr "archivo multidisk no compatible" + +#: src/slic3r/GUI/GCodeViewer.cpp:3176 +msgid "up to" +msgstr "hasta" + +#: src/slic3r/GUI/DoubleSlider.cpp:1634 +msgid "used" +msgstr "usado" + +#: src/libslic3r/miniz_extension.cpp:149 +msgid "validation failed" +msgstr "validación fallida" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "variants" +msgstr "variantes" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 +msgid "vendor" +msgstr "fabricante" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 +msgid "version" +msgstr "versión" + +#: src/slic3r/GUI/PresetHints.cpp:192 +msgid "when printing" +msgstr "al imprimir" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "wipe tower" +msgstr "torre de limpieza" + +#: src/slic3r/GUI/PresetHints.cpp:193 +msgid "with a volumetric rate" +msgstr "con una tasa volumétrica" + +#: src/libslic3r/miniz_extension.cpp:151 +msgid "write calledback failed" +msgstr "fallo write calledback" + #: src/libslic3r/PrintConfig.cpp:456 src/libslic3r/PrintConfig.cpp:1075 #: src/libslic3r/PrintConfig.cpp:2232 src/libslic3r/PrintConfig.cpp:2242 #: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2774 @@ -17028,6 +17031,10 @@ msgstr "Se llamó a AddToPropertyCollection sin añadidor válido" msgid "Adding book %s" msgstr "Añadiendo libro %s" +#: ../src/common/preferencescmn.cpp:43 +msgid "Advanced" +msgstr "Avanzado" + #: ../src/richtext/richtextliststylepage.cpp:435 msgid "After a paragraph:" msgstr "Después de un párrafo:" @@ -17295,6 +17302,10 @@ msgstr "Borde" msgid "Borders" msgstr "Bordes" +#: ../src/richtext/richtextsizepage.cpp:288 ../src/common/stockitem.cpp:144 +msgid "Bottom" +msgstr "Inferior" + #: ../src/generic/prntdlgg.cpp:893 msgid "Bottom margin (mm):" msgstr "Margen inferior (mm):" @@ -18105,6 +18116,10 @@ msgstr "Copiado en el portapapeles:\"%s\"" msgid "Copies:" msgstr "Copias:" +#: ../src/common/stockitem.cpp:150 ../src/stc/stc_i18n.cpp:18 +msgid "Copy" +msgstr "Copiar" + #: ../src/common/stockitem.cpp:258 msgid "Copy selection" msgstr "Copiar selección" diff --git a/resources/localization/fr/PrusaSlicer.mo b/resources/localization/fr/PrusaSlicer.mo index d2d280e03..960ded366 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 0e32aa260..f6298879b 100644 --- a/resources/localization/fr/PrusaSlicer_fr.po +++ b/resources/localization/fr/PrusaSlicer_fr.po @@ -1,11 +1,11 @@ msgid "" msgstr "" -"Language: fr_FR\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Phrase (phrase.com)\n" +"X-Generator: Prusalator\n" #: src/slic3r/GUI/Tab.cpp:4707 #, boost-format @@ -16,6 +16,22 @@ msgstr "" "\"%1%\" est désactivé car \"%2%\" est activé dans la catégorie \"%3%\".\n" "Pour activer \"%1%\", veuillez désactiver \"%2%\"" +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" +"\"G92 E0\" a été trouvé dans before_layer_gcode, ce qui est incompatible " +"avec l'adressage absolu de l'extrudeur." + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" +"\"G92 E0\" a été trouvé dans layer_gcode, ce qui est incompatible avec " +"l'adressage absolu de l'extrudeur." + #: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:1087 #: src/libslic3r/PrintConfig.cpp:1559 src/libslic3r/PrintConfig.cpp:1751 #: src/libslic3r/PrintConfig.cpp:1814 src/libslic3r/PrintConfig.cpp:2065 @@ -108,6 +124,12 @@ msgid_plural "%1% (%2$d shells)" msgstr[0] "%1% (%2$d coque)" msgstr[1] "%1% (%2$d coques)" +#. TRN Remove/Delete +#: src/slic3r/GUI/Tab.cpp:3736 +#, boost-format +msgid "%1% Preset" +msgstr "%1% Préréglage" + #: src/slic3r/GUI/ConfigWizard.cpp:752 #, boost-format msgid "" @@ -117,12 +139,6 @@ msgstr "" "Les %1% marqués d'une * ne sont pas compatibles avec certaines " "imprimantes installées." -#. TRN Remove/Delete -#: src/slic3r/GUI/Tab.cpp:3736 -#, boost-format -msgid "%1% Preset" -msgstr "%1% Préréglage" - #: src/slic3r/GUI/GUI.cpp:317 #, boost-format msgid "%1% was substituted with %2%" @@ -184,6 +200,16 @@ msgstr "%s - MODIFICATION IMPACTANTE" msgid "%s - Drop project file" msgstr "%s - Déposer le fichier de projet" +#: src/slic3r/GUI/ConfigWizard.cpp:550 +#, c-format, boost-format +msgid "%s Family" +msgstr "Famille %s" + +#: src/slic3r/GUI/GUI_App.cpp:2245 +#, c-format, boost-format +msgid "%s View Mode" +msgstr "Mode de Vue de %s" + #: src/slic3r/GUI/UpdateDialogs.cpp:213 #, c-format, boost-format msgid "%s configuration is incompatible" @@ -199,11 +225,6 @@ msgstr "%s ne supporte pas un pourcentage" msgid "%s error" msgstr "Erreur %s" -#: src/slic3r/GUI/ConfigWizard.cpp:550 -#, c-format, boost-format -msgid "%s Family" -msgstr "Famille %s" - #: src/slic3r/GUI/MsgDialog.cpp:233 #, c-format, boost-format msgid "%s has a warning" @@ -214,6 +235,17 @@ msgstr "%s a un avertissement" msgid "%s has encountered an error" msgstr "%s a rencontré une erreur" +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 +#, c-format, boost-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 a rencontré une erreur. Elle a apparemment été provoquée par un manque de " +"mémoire. Si vous êtes certain d'avoir assez de RAM sur votre système, cela " +"peut également être un bug et nous aimerions que vous le signaliez." + #: src/slic3r/GUI/GUI_App.cpp:698 #, c-format, boost-format msgid "" @@ -229,17 +261,6 @@ msgstr "" "\n" "L'application va maintenant fermer." -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 -#, c-format, boost-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 a rencontré une erreur. Elle a apparemment été provoquée par un manque de " -"mémoire. Si vous êtes certain d'avoir assez de RAM sur votre système, cela " -"peut également être un bug et nous aimerions que vous le signaliez." - #: src/slic3r/GUI/UpdateDialogs.cpp:304 #, c-format, boost-format msgid "%s has no configuration updates available." @@ -288,11 +309,6 @@ msgstr "" "Veuillez utiliser les %s qui suivent pour paramétrer les nouveaux réglages " "et éventuellement accepter les mises à jour de réglage automatiques." -#: src/slic3r/GUI/GUI_App.cpp:2245 -#, c-format, boost-format -msgid "%s View Mode" -msgstr "Mode de Vue de %s" - #: src/slic3r/GUI/MsgDialog.cpp:232 #, c-format, boost-format msgid "%s warning" @@ -447,22 +463,14 @@ msgstr "Fenê&tre" msgid "(All)" msgstr "(Tout)" -#: src/slic3r/GUI/Plater.cpp:1401 -msgid "(including spool)" -msgstr "(bobine incluse)" - -#: src/libslic3r/PrintConfig.cpp:1985 -msgid "(minimum)" -msgstr "(minimum)" +#: src/slic3r/GUI/MainFrame.cpp:1293 +msgid "(Re)Slice No&w" +msgstr "(Re)Découper Main&tenant" #: src/slic3r/GUI/KBShortcutsDialog.cpp:81 msgid "(Re)slice" msgstr "(Re)découper" -#: src/slic3r/GUI/MainFrame.cpp:1293 -msgid "(Re)Slice No&w" -msgstr "(Re)Découper Main&tenant" - #: src/libslic3r/GCode.cpp:573 msgid "(Some lines not shown)" msgstr "(Certaines lignes ne sont pas représentées)" @@ -471,6 +479,14 @@ msgstr "(Certaines lignes ne sont pas représentées)" msgid "(Unknown)" msgstr "(Inconnu)" +#: src/slic3r/GUI/Plater.cpp:1401 +msgid "(including spool)" +msgstr "(bobine incluse)" + +#: src/libslic3r/PrintConfig.cpp:1985 +msgid "(minimum)" +msgstr "(minimum)" + #: src/slic3r/GUI/MainFrame.cpp:1625 msgid ") not found." msgstr ") non trouvé." @@ -531,10 +547,6 @@ msgstr "3 (important)" msgid "3&D" msgstr "3&D" -#: src/slic3r/GUI/Plater.cpp:4438 -msgid "3D editor view" -msgstr "Vue d'éditeur 3D" - #: src/libslic3r/PrintConfig.cpp:1153 msgid "3D Honeycomb" msgstr "Nid d'abeille 3D" @@ -543,6 +555,10 @@ msgstr "Nid d'abeille 3D" msgid "3D Mouse disconnected." msgstr "Souris 3D déconnectée." +#: src/slic3r/GUI/Plater.cpp:4438 +msgid "3D editor view" +msgstr "Vue d'éditeur 3D" + #: src/slic3r/GUI/Mouse3DController.cpp:453 msgid "3Dconnexion settings" msgstr "Paramètres 3Dconnexion" @@ -583,10 +599,6 @@ msgstr "" "Une copie du préréglage système actuel sera créé, et il sera détaché du " "préréglage système." -#: src/slic3r/GUI/ConfigWizard.cpp:2717 -msgid "A new filament was installed and it will be activated." -msgstr "Un nouveau filament a été installé et il sera activé." - #: src/slic3r/GUI/ConfigWizard.cpp:2691 msgid "A new Printer was installed and it will be activated." msgstr "Une nouvelle imprimante a été installée et elle sera activée." @@ -595,6 +607,10 @@ msgstr "Une nouvelle imprimante a été installée et elle sera activée." msgid "A new SLA material was installed and it will be activated." msgstr "Un nouveau matériel SLA a été installé et il sera activé." +#: src/slic3r/GUI/ConfigWizard.cpp:2717 +msgid "A new filament was installed and it will be activated." +msgstr "Un nouveau filament a été installé et il sera activé." + #: src/slic3r/GUI/ConfigWizard.cpp:2596 msgid "A new vendor was installed and one of its printers will be activated" msgid_plural "" @@ -633,6 +649,14 @@ msgstr "" msgid "A toolpath outside the print area was detected." msgstr "Un parcours d'outil en dehors de la zone d'impression a été détecté." +#: src/libslic3r/PrintConfig.cpp:291 +msgid "API Key / Password" +msgstr "Clé API / Mot de Passe" + +#: src/libslic3r/PrintConfig.cpp:351 +msgid "API key" +msgstr "Clé API" + #: src/slic3r/Config/Snapshot.cpp:601 msgid "Abort" msgstr "Annuler" @@ -642,10 +666,6 @@ msgstr "Annuler" msgid "About %s" msgstr "Au sujet de %s" -#: src/slic3r/GUI/GCodeViewer.cpp:3182 -msgid "above" -msgstr "au-dessus" - #: src/libslic3r/PrintConfig.cpp:2161 msgid "Above Z" msgstr "Au-delà de Z" @@ -678,10 +698,6 @@ msgstr "Activer" msgid "Active" msgstr "Actif" -#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 -msgid "active" -msgstr "actif" - #: src/slic3r/GUI/GLCanvas3D.cpp:248 msgid "Adaptive" msgstr "Adaptatif" @@ -712,6 +728,60 @@ msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\"" msgstr "" "Ajouter \"%1%\" comme préréglage suivant pour l'imprimante physique \"%2%\"" +#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 +msgid "Add Generic Subobject" +msgstr "Ajouter un Sous-objet Générique" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 +msgid "Add Height Range" +msgstr "Ajouter une Zone de Hauteur" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 +msgid "Add Instance of the selected object" +msgstr "Ajouter une Instance à l'objet sélectionné" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 +msgid "Add Layers" +msgstr "Ajouter des couches" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 +msgid "Add Settings Bundle for Height range" +msgstr "Ajouter une Combinaison de Réglages pour la zone de Hauteur" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 +msgid "Add Settings Bundle for Object" +msgstr "Ajouter une Combinaison de Réglages pour l'Objet" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 +msgid "Add Settings Bundle for Sub-object" +msgstr "Ajouter une Combinaison de Réglages pour le Sous-objet" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 +msgid "Add Settings for Layers" +msgstr "Ajouter des Réglages pour les Couches" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 +msgid "Add Settings for Object" +msgstr "Ajouter des Réglages pour un Objet" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 +msgid "Add Settings for Sub-object" +msgstr "Ajouter des Réglages pour un Sous-objet" + +#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 +msgid "Add Shape" +msgstr "Ajouter une Forme" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shape from Gallery" +msgstr "Ajouter une Forme depuis la Galerie" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shapes from Gallery" +msgstr "Ajouter des formes à partir de la Galerie" + #: src/libslic3r/PrintConfig.cpp:3607 msgid "Add a pad underneath the supported model" msgstr "Ajouter une base sous le modèle supporté" @@ -782,33 +852,15 @@ msgstr "Ajouter un changement d'extrudeur - Clic gauche" msgid "Add extruder to sequence" msgstr "Ajouter l'extrudeur à la séquence" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 -msgid "Add Generic Subobject" -msgstr "Ajouter un Sous-objet Générique" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 -msgid "Add Height Range" -msgstr "Ajouter une Zone de Hauteur" - #: src/slic3r/GUI/GLCanvas3D.cpp:4541 src/slic3r/GUI/GUI_Factories.cpp:1084 #: src/slic3r/GUI/GUI_Factories.cpp:1108 src/slic3r/GUI/GUI_Factories.cpp:1119 msgid "Add instance" msgstr "Ajouter l'instance" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 -msgid "Add Instance of the selected object" -msgstr "Ajouter une Instance à l'objet sélectionné" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:164 msgid "Add layer range" msgstr "Ajouter une zone de couche" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 -msgid "Add Layers" -msgstr "Ajouter des couches" - #: src/slic3r/GUI/GUI_Factories.cpp:162 msgid "Add modifier" msgstr "Ajouter un modificateur" @@ -868,42 +920,6 @@ msgstr "Ajouter la ou les formes sélectionnées au plateau" msgid "Add settings" msgstr "Ajouter des réglages" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 -msgid "Add Settings Bundle for Height range" -msgstr "Ajouter une Combinaison de Réglages pour la zone de Hauteur" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 -msgid "Add Settings Bundle for Object" -msgstr "Ajouter une Combinaison de Réglages pour l'Objet" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 -msgid "Add Settings Bundle for Sub-object" -msgstr "Ajouter une Combinaison de Réglages pour le Sous-objet" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 -msgid "Add Settings for Layers" -msgstr "Ajouter des Réglages pour les Couches" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 -msgid "Add Settings for Object" -msgstr "Ajouter des Réglages pour un Objet" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 -msgid "Add Settings for Sub-object" -msgstr "Ajouter des Réglages pour un Sous-objet" - -#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 -msgid "Add Shape" -msgstr "Ajouter une Forme" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shape from Gallery" -msgstr "Ajouter une Forme depuis la Galerie" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shapes from Gallery" -msgstr "Ajouter des formes à partir de la Galerie" - #: src/libslic3r/PrintConfig.cpp:686 msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " @@ -959,14 +975,14 @@ msgstr "Ajouter/Supprimer des préréglages" msgid "Add/Remove printers" msgstr "Ajouter/Supprimer des imprimantes" -#: src/slic3r/GUI/Tab.cpp:1369 -msgid "Additional information:" -msgstr "Informations complémentaires :" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:63 msgid "Additional Settings" msgstr "Réglages Additionnels" +#: src/slic3r/GUI/Tab.cpp:1369 +msgid "Additional information:" +msgstr "Informations complémentaires :" + #: src/slic3r/GUI/ConfigWizard.cpp:1236 msgid "" "Additionally a backup snapshot of the whole configuration is created before " @@ -979,26 +995,19 @@ msgstr "" msgid "Address" msgstr "Adresse" -#: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 -#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 -#: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4661 -#: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 -#: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 -#: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 -#: src/libslic3r/PrintConfig.cpp:2490 src/libslic3r/PrintConfig.cpp:3028 -#: src/libslic3r/PrintConfig.cpp:3224 +#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 +msgctxt "Mode" msgid "Advanced" msgstr "Avancé" -#: src/slic3r/GUI/ConfigWizard.cpp:1280 -msgid "Advanced mode" -msgstr "Mode avancé" - #: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Advanced View Mode" msgstr "Vue en Mode Avancé" +#: src/slic3r/GUI/ConfigWizard.cpp:1280 +msgid "Advanced mode" +msgstr "Mode avancé" + #: src/slic3r/GUI/FirmwareDialog.cpp:851 msgid "Advanced: Output log" msgstr "Avancé : journal de Sortie" @@ -1023,14 +1032,14 @@ msgstr "" msgid "After layer change G-code" msgstr "G-Code après changement de couche" -#: src/libslic3r/PrintConfig.cpp:4322 -msgid "Align the model to the given point." -msgstr "Aligner le modèle sur le point défini." - #: src/libslic3r/PrintConfig.cpp:4321 msgid "Align XY" msgstr "Aligner XY" +#: src/libslic3r/PrintConfig.cpp:4322 +msgid "Align the model to the given point." +msgstr "Aligner le modèle sur le point défini." + #: src/libslic3r/PrintConfig.cpp:2223 msgid "Aligned" msgstr "Aligné" @@ -1097,10 +1106,6 @@ msgstr "Tous les préréglages utilisateur seront supprimés." msgid "All walls" msgstr "Toutes les parois" -#: src/libslic3r/miniz_extension.cpp:121 -msgid "allocation failed" -msgstr "échec de l'allocation" - #: src/slic3r/GUI/Preferences.cpp:208 src/slic3r/GUI/Preferences.cpp:212 msgid "Allow just a single PrusaSlicer instance" msgstr "N'autoriser qu'une seule instance de PrusaSlicer" @@ -1199,6 +1204,10 @@ msgstr "" "Un objet a des générateurs de supports personnalisés qui ne seront pas " "utilisés car les supports sont désactivés." +#: src/slic3r/GUI/GLCanvas3D.cpp:6367 +msgid "An object outside the print area was detected." +msgstr "Un objet en dehors de la zone d'impression a été détecté." + #: src/slic3r/GUI/GLCanvas3D.cpp:6372 msgid "" "An object outside the print area was detected.\n" @@ -1207,10 +1216,6 @@ msgstr "" "Un objet en dehors de la zone d'impression a été détecté.\n" "Résolvez le problème actuel pour continuer le découpage." -#: src/slic3r/GUI/GLCanvas3D.cpp:6367 -msgid "An object outside the print area was detected." -msgstr "Un objet en dehors de la zone d'impression a été détecté." - #: src/slic3r/GUI/Jobs/PlaterJob.cpp:13 msgid "An unexpected error occured" msgstr "Une erreur inattendue s'est produite" @@ -1231,14 +1236,6 @@ msgstr "" "Toute modification doit être enregistrée comme un nouveau préréglage hérité " "de celui-ci." -#: src/libslic3r/PrintConfig.cpp:351 -msgid "API key" -msgstr "Clé API" - -#: src/libslic3r/PrintConfig.cpp:291 -msgid "API Key / Password" -msgstr "Clé API / Mot de Passe" - #: src/slic3r/GUI/GUI_App.cpp:2232 msgid "Application preferences" msgstr "Préférences de l'application" @@ -1261,18 +1258,10 @@ msgstr "Appliquer le changement de couleur automatiquement" msgid "Apply to all the remaining small objects being loaded." msgstr "Appliquer à tous les petits objets restants en cours de chargement." -#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 -msgid "approximate seconds" -msgstr "secondes approximatives" - #: src/libslic3r/PrintConfig.cpp:709 src/libslic3r/PrintConfig.cpp:1156 msgid "Archimedean Chords" msgstr "Accords archimédiens" -#: src/libslic3r/miniz_extension.cpp:147 -msgid "archive is too large" -msgstr "l'archive est trop volumineuse" - #: src/slic3r/GUI/Tab.cpp:3731 #, boost-format msgid "Are you sure you want to %1% the selected preset?" @@ -1304,6 +1293,10 @@ msgstr "" msgid "Are you sure you want to delete \"%1%\" printer?" msgstr "Voulez-vous vraiment supprimer l'imprimante \"%1%\" ?" +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "Voulez-vous vraiment supprimer toutes les substitutions ?" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1132 msgid "Are you sure you want to do it?" msgstr "Êtes-vous certain de vouloir le faire ?" @@ -1560,14 +1553,22 @@ msgstr "Purger les valeurs de configuration inconnues" msgid "Balanced" msgstr "Équilibré" -#: src/slic3r/GUI/MainFrame.cpp:655 -msgid "based on Slic3r" -msgstr "basé sur Slic3r" - #: src/slic3r/GUI/Tab.cpp:1989 msgid "Bed" msgstr "Plateau" +#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape" +msgstr "Forme du plateau" + +#: src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape and Size" +msgstr "Forme du Plateau et Taille" + +#: src/slic3r/GUI/ConfigWizard.cpp:1581 +msgid "Bed Temperature:" +msgstr "Température du Plateau :" + #: src/libslic3r/PrintConfig.cpp:241 msgid "Bed custom model" msgstr "Modèle personnalisé de lit" @@ -1584,18 +1585,10 @@ msgstr "Remplissage du plateau annulé." msgid "Bed filling done." msgstr "Remplissage du plateau terminé." -#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape" -msgstr "Forme du plateau" - #: src/libslic3r/PrintConfig.cpp:231 msgid "Bed shape" msgstr "Forme du plateau" -#: src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape and Size" -msgstr "Forme du Plateau et Taille" - #: src/libslic3r/PrintConfig.cpp:396 msgid "Bed temperature" msgstr "Température du plateau" @@ -1609,10 +1602,6 @@ msgstr "" "zéro pour désactiver les commandes de contrôle de température du plateau " "dans la sortie." -#: src/slic3r/GUI/ConfigWizard.cpp:1581 -msgid "Bed Temperature:" -msgstr "Température du Plateau :" - #: src/slic3r/GUI/Tab.cpp:2422 src/libslic3r/GCode.cpp:709 #: src/libslic3r/PrintConfig.cpp:402 msgid "Before layer change G-code" @@ -1622,14 +1611,14 @@ msgstr "G-Code avant changement de couche" msgid "Before roll back" msgstr "Avant le retour en arrière" -#: src/slic3r/GUI/Plater.cpp:579 -msgid "Below object" -msgstr "Sous l'objet" - #: src/libslic3r/PrintConfig.cpp:2170 msgid "Below Z" msgstr "En-deçà de Z" +#: src/slic3r/GUI/Plater.cpp:579 +msgid "Below object" +msgstr "Sous l'objet" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:21 msgid "Best surface quality" msgstr "Meilleure qualité de surface" @@ -1668,13 +1657,14 @@ msgstr "Volume de la bouteille" msgid "Bottle weight" msgstr "Poids de la bouteille" -#. 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:1121 src/libslic3r/PrintConfig.cpp:423 -#: src/libslic3r/PrintConfig.cpp:432 +#: src/slic3r/GUI/OptionsGroup.cpp:352 +msgctxt "Layers" msgid "Bottom" -msgstr "Dessous" +msgstr "Du bas" + +#: src/slic3r/GUI/MainFrame.cpp:1121 +msgid "Bottom View" +msgstr "Vue du Dessous" #: src/libslic3r/PrintConfig.cpp:2566 msgid "Bottom contact Z distance" @@ -1703,10 +1693,6 @@ msgstr "" msgid "Bottom solid layers" msgstr "Couches solides inférieures" -#: src/slic3r/GUI/MainFrame.cpp:1121 -msgid "Bottom View" -msgstr "Vue du Dessous" - #: src/slic3r/GUI/GUI_Factories.cpp:461 src/slic3r/GUI/GUI_Factories.cpp:501 #: src/slic3r/GUI/GUI_Factories.cpp:505 msgid "Box" @@ -1805,10 +1791,6 @@ msgstr "Taille du pinceau" msgid "Bucket fill" msgstr "Pot de peinture" -#: src/libslic3r/miniz_extension.cpp:141 -msgid "buffer too small" -msgstr "buffer trop petit" - #: src/slic3r/GUI/GUI_App.cpp:1660 msgid "" "But since this version of PrusaSlicer we don't show this information in " @@ -1834,18 +1816,30 @@ msgstr "" "Remarque : ce nom peut être modifié ultérieurement dans les réglages des " "imprimantes physiques" -#: src/slic3r/GUI/PresetHints.cpp:191 -msgid "by the print profile maximum" -msgstr "par le maximum du profil de l'imprimante" +#: src/slic3r/GUI/NotificationManager.cpp:890 +msgid "CANCELED" +msgstr "ANNULÉ" + +#: src/slic3r/GUI/NotificationManager.cpp:895 +msgid "COMPLETED" +msgstr "TERMINÉ" + +#: src/libslic3r/miniz_extension.cpp:117 +msgid "CRC-32 check failed" +msgstr "Échec du test CRC-32" + +#: src/slic3r/Utils/Http.cpp:91 +msgid "" +"CURL init has failed. PrusaSlicer will be unable to establish network " +"connections. See logs for additional details." +msgstr "" +"L'initialisation de CURL a échoué. PrusaSlicer ne pourra pas établir de " +"connexions réseau. Voir les journaux pour plus de détails." #: src/slic3r/GUI/Preferences.cpp:314 msgid "Camera" msgstr "Caméra" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 -msgid "Camera view" -msgstr "Vue caméra" - #: resources/data/hints.ini: [hint:Camera Views] msgid "" "Camera Views\n" @@ -1856,6 +1850,10 @@ msgstr "" "Saviez-vous que vous pouvez utiliser les touches numériques 0-6 pour " "basculer rapidement entre les angles de caméra prédéfinis ?" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 +msgid "Camera view" +msgstr "Vue caméra" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:322 msgid "Can't apply when proccess preview." msgstr "Ne peut pas s'appliquer lors du processus de prévisualisation." @@ -1878,10 +1876,6 @@ msgstr "Annuler la sélection" msgid "Cancel upload" msgstr "Annuler le téléchargement" -#: src/slic3r/GUI/NotificationManager.cpp:890 -msgid "CANCELED" -msgstr "ANNULÉ" - #: src/slic3r/GUI/PrintHostDialogs.cpp:375 msgid "Cancelled" msgstr "Annulé" @@ -1985,30 +1979,10 @@ msgstr "" msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"" msgstr "Changer \"%1%\" par \"%2%\" pour cette imprimante physique \"%3%\"" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 -msgid "Change camera type (perspective, orthographic)" -msgstr "Changer le type d'appareil photo (perspective, orthographique)" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 -msgid "Change drainage hole diameter" -msgstr "Changer le diamètre du trou de drainage" - -#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 -msgid "Change extruder" -msgstr "Changer l'extrudeur" - #: src/slic3r/GUI/GUI_ObjectList.cpp:616 msgid "Change Extruder" msgstr "Changer d'Extrudeur" -#: src/slic3r/GUI/DoubleSlider.cpp:1613 -msgid "Change extruder (N/A)" -msgstr "Changer l'extrudeur (N/A)" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:722 -msgid "Change extruder color" -msgstr "Changer la couleur de l'extrudeur" - #: src/slic3r/GUI/GUI_ObjectList.cpp:4267 msgid "Change Extruders" msgstr "Changer les Extrudeurs" @@ -2022,6 +1996,26 @@ msgstr "Modifier l'Option %s" msgid "Change Part Type" msgstr "Changer le Type de Partie" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 +msgid "Change camera type (perspective, orthographic)" +msgstr "Changer le type d'appareil photo (perspective, orthographique)" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 +msgid "Change drainage hole diameter" +msgstr "Changer le diamètre du trou de drainage" + +#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 +msgid "Change extruder" +msgstr "Changer l'extrudeur" + +#: src/slic3r/GUI/DoubleSlider.cpp:1613 +msgid "Change extruder (N/A)" +msgstr "Changer l'extrudeur (N/A)" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:722 +msgid "Change extruder color" +msgstr "Changer la couleur de l'extrudeur" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:702 msgid "Change point head diameter" msgstr "Changer le diamètre de la tête de la pointe" @@ -2059,6 +2053,10 @@ msgstr "" "l'application.\n" "Vous perdrez le contenu du plateau." +#: src/slic3r/GUI/GUI_App.cpp:2219 +msgid "Check for Configuration Updates" +msgstr "Vérifier les mises à jour de configuration" + #: src/slic3r/GUI/ConfigWizard.cpp:1214 msgid "Check for application updates" msgstr "Vérifier les mises à jour de l'application" @@ -2067,9 +2065,9 @@ msgstr "Vérifier les mises à jour de l'application" msgid "Check for configuration updates" msgstr "Vérifier les mises à jour de configuration" -#: src/slic3r/GUI/GUI_App.cpp:2219 -msgid "Check for Configuration Updates" -msgstr "Vérifier les mises à jour de configuration" +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 +msgid "Choose SLA archive:" +msgstr "Choisir l'archive SLA :" #: src/slic3r/GUI/BedShapeDialog.cpp:552 msgid "Choose a file to import bed texture from (PNG/SVG):" @@ -2089,6 +2087,10 @@ msgid "Choose an STL file to import bed shape from:" msgstr "" "Choisissez un fichier STL à partir duquel importer la forme du plateau :" +#: src/slic3r/GUI/GalleryDialog.cpp:453 +msgid "Choose one PNG file:" +msgstr "Choisissez un fichier PNG :" + #: src/slic3r/GUI/GUI_App.cpp:1836 msgid "Choose one file (3MF/AMF):" msgstr "Choisir un fichier (3MF/AMF) :" @@ -2105,14 +2107,6 @@ msgstr "Choisissez un ou plusieurs fichiers (STL, OBJ) :" msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Choisir un ou plusieurs fichiers (STL/OBJ/AMF/3MF/PRUSA) :" -#: src/slic3r/GUI/GalleryDialog.cpp:453 -msgid "Choose one PNG file:" -msgstr "Choisissez un fichier PNG :" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 -msgid "Choose SLA archive:" -msgstr "Choisir l'archive SLA :" - #: src/slic3r/GUI/ConfigWizard.cpp:1361 msgid "Choose the type of firmware used by your printer." msgstr "Choisissez le type de firmware utilisé par votre imprimante." @@ -2127,10 +2121,6 @@ msgstr "Cercle" msgid "Circular" msgstr "Circulaire" -#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 -msgid "Clear all" -msgstr "Tout effacer" - #: src/slic3r/GUI/Preferences.cpp:295 msgid "Clear Undo / Redo stack on new project" msgstr "Vider la pile Annuler / Rétablir sur un nouveau projet" @@ -2142,6 +2132,10 @@ msgstr "" "Vider la pile Annuler / Rétablir sur un nouveau projet ou lorsqu'un projet " "existant est chargé." +#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 +msgid "Clear all" +msgstr "Tout effacer" + #: src/slic3r/GUI/GLCanvas3D.cpp:4689 src/slic3r/GUI/GLCanvas3D.cpp:4728 msgid "Click right mouse button to open/close History" msgstr "" @@ -2195,11 +2189,6 @@ msgstr "Fermer" msgid "Close holes" msgstr "Fermer les trous" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 -#: src/libslic3r/PrintConfig.cpp:3759 -msgid "Closing distance" -msgstr "Intervalle d'espacement" - #: src/slic3r/GUI/MainFrame.cpp:232 msgid "Closing PrusaSlicer while some presets are modified." msgstr "Fermeture de PrusaSlicer lorsque certains préréglages sont modifiés." @@ -2208,6 +2197,11 @@ msgstr "Fermeture de PrusaSlicer lorsque certains préréglages sont modifiés." msgid "Closing PrusaSlicer. Current project is modified." msgstr "Fermeture de PrusaSlicer. Le projet en cours est modifié." +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 +#: src/libslic3r/PrintConfig.cpp:3759 +msgid "Closing distance" +msgstr "Intervalle d'espacement" + #: src/libslic3r/PrintConfig.cpp:2667 msgid "Closing radius" msgstr "Rayon de fermeture" @@ -2224,6 +2218,15 @@ msgstr "Réduire/développer la barre latérale" msgid "Color" msgstr "Couleur" +#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 +msgid "Color Change G-code" +msgstr "G-code de changement de couleur" + +#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 +#: src/slic3r/GUI/GUI_Preview.cpp:957 +msgid "Color Print" +msgstr "Couleur d'Impression" + #: src/slic3r/GUI/GCodeViewer.cpp:3487 src/slic3r/GUI/GCodeViewer.cpp:3543 msgid "Color change" msgstr "Changement de couleur" @@ -2238,10 +2241,6 @@ msgstr "Changement de couleur (\"%1%\")" msgid "Color change (\"%1%\") for Extruder %2%" msgstr "Changement de couleur (\"%1%\") pour l'extrudeur %2%" -#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 -msgid "Color Change G-code" -msgstr "G-code de changement de couleur" - #: src/libslic3r/PrintConfig.cpp:2432 msgid "Color change G-code" msgstr "G-code de changement de couleur" @@ -2250,11 +2249,6 @@ msgstr "G-code de changement de couleur" msgid "Color changes" msgstr "Changements de couleur" -#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 -#: src/slic3r/GUI/GUI_Preview.cpp:957 -msgid "Color Print" -msgstr "Couleur d'Impression" - #: src/libslic3r/PrintConfig.cpp:537 msgid "Colorprint height" msgstr "Hauteur du Colorprint" @@ -2289,15 +2283,15 @@ msgstr "Commandes" msgid "Comment:" msgstr "Commentaire :" -#: src/slic3r/GUI/MainFrame.cpp:1417 -msgid "Compare presets" -msgstr "Comparer les Préréglages" - #: src/slic3r/GUI/MainFrame.cpp:1417 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 msgid "Compare Presets" msgstr "Comparer les préréglages" +#: src/slic3r/GUI/MainFrame.cpp:1417 +msgid "Compare presets" +msgstr "Comparer les Préréglages" + #: src/slic3r/GUI/Tab.cpp:216 msgid "Compare this preset with some another" msgstr "Comparez ce préréglage avec un autre" @@ -2330,14 +2324,6 @@ msgstr "Compléter les objets individuels" msgid "Completed" msgstr "Terminé" -#: src/slic3r/GUI/NotificationManager.cpp:895 -msgid "COMPLETED" -msgstr "TERMINÉ" - -#: src/libslic3r/miniz_extension.cpp:113 -msgid "compression failed" -msgstr "échec de la compression" - #: src/libslic3r/PrintConfig.cpp:707 src/libslic3r/PrintConfig.cpp:1151 #: src/libslic3r/PrintConfig.cpp:2722 msgid "Concentric" @@ -2355,6 +2341,24 @@ msgstr "Assistant de Co&nfiguration" msgid "Configuration Assistant" msgstr "Assistant de Configuration" +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 +msgid "Configuration Snapshots" +msgstr "Instantanés de Configuration capturés" + +#: src/slic3r/Utils/PresetUpdater.cpp:777 +msgid "" +"Configuration Updates causes a lost of preset modification.\n" +"So, check unsaved changes and save them if necessary." +msgstr "" +"Les mises à jour de configuration entraînent une perte de modification des " +"préréglages.\n" +"Vérifiez donc les modifications non enregistrées et enregistrez-les si " +"nécessaire." + +#: src/slic3r/GUI/ConfigWizard.cpp:3039 +msgid "Configuration Wizard" +msgstr "Assistant de Configuration" + #: src/slic3r/GUI/GUI.cpp:355 msgid "" "Configuration bundle was loaded, however some configuration values were not " @@ -2397,10 +2401,6 @@ msgstr "" "d'avant en arrière entre les instantanés à l'aide du menu Configuration - " "Instantanés de configuration." -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 -msgid "Configuration Snapshots" -msgstr "Instantanés de Configuration capturés" - #: src/slic3r/GUI/UpdateDialogs.cpp:94 src/slic3r/GUI/UpdateDialogs.cpp:261 msgid "Configuration update" msgstr "Mise à jour de la configuration" @@ -2417,20 +2417,6 @@ msgstr "Une mise à jour de la configuration est disponible." msgid "Configuration updates" msgstr "Mises à jour de la configuration" -#: src/slic3r/Utils/PresetUpdater.cpp:777 -msgid "" -"Configuration Updates causes a lost of preset modification.\n" -"So, check unsaved changes and save them if necessary." -msgstr "" -"Les mises à jour de configuration entraînent une perte de modification des " -"préréglages.\n" -"Vérifiez donc les modifications non enregistrées et enregistrez-les si " -"nécessaire." - -#: src/slic3r/GUI/ConfigWizard.cpp:3039 -msgid "Configuration Wizard" -msgstr "Assistant de Configuration" - #: src/slic3r/GUI/FirmwareDialog.cpp:916 msgid "Confirmation" msgstr "Confirmation" @@ -2501,11 +2487,6 @@ msgstr "" msgid "Connection to OctoPrint works correctly." msgstr "La connexion avec OctoPrint fonctionne correctement." -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 -msgid "Connection to printers connected via the print host failed." -msgstr "" -"La connexion aux imprimantes connectées via l'hôte d'impression a échoué." - #: src/slic3r/Utils/OctoPrint.cpp:292 msgid "Connection to Prusa SL1 / SL1S works correctly." msgstr "La connexion à à la Prusa SL1 / SL1S fonctionne correctement." @@ -2518,9 +2499,10 @@ msgstr "La connexion à PrusaLink fonctionne correctement." msgid "Connection to Repetier works correctly." msgstr "La connexion à Repetier fonctionne correctement." -#: src/slic3r/GUI/DoubleSlider.cpp:1458 -msgid "continue" -msgstr "continuer" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 +msgid "Connection to printers connected via the print host failed." +msgstr "" +"La connexion aux imprimantes connectées via l'hôte d'impression a échoué." #: src/slic3r/Config/Snapshot.cpp:601 msgid "Continue" @@ -2609,25 +2591,26 @@ msgstr "Position du tube de refroidissement" msgid "Copies of the selected object" msgstr "Copies de l'objet sélectionné" -#: src/slic3r/GUI/GLCanvas3D.cpp:4520 +#: src/slic3r/GUI/SavePresetDialog.cpp:221 +msgctxt "PresetName" msgid "Copy" -msgstr "Copier" +msgstr "Copie" + +#: src/slic3r/GUI/AboutDialog.cpp:308 +msgid "Copy Version Info" +msgstr "Copier les Infos de Version" #: src/slic3r/GUI/MainFrame.cpp:1343 msgid "Copy selection to clipboard" msgstr "Copier la sélection dans le presse-papier" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 -msgid "Copy to clipboard" -msgstr "Copier dans le presse-papier" - #: src/slic3r/GUI/SysInfoDialog.cpp:169 msgid "Copy to Clipboard" msgstr "Copier dans le Presse-Papier" -#: src/slic3r/GUI/AboutDialog.cpp:308 -msgid "Copy Version Info" -msgstr "Copier les Infos de Version" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 +msgid "Copy to clipboard" +msgstr "Copier dans le presse-papier" #: src/slic3r/Utils/PresetUpdater.cpp:61 #, boost-format @@ -2782,10 +2765,6 @@ msgstr "" "fermeture de l'espacement peut réduire la résolution de l'impression finale, " "aussi est-il conseillé de conserver une valeur relativement basse." -#: src/libslic3r/miniz_extension.cpp:117 -msgid "CRC-32 check failed" -msgstr "Échec du test CRC-32" - #: src/libslic3r/PrintConfig.cpp:3682 msgid "Create pad around object and ignore the support elevation" msgstr "Créer un socle autour de l'objet et ignorer l'élévation du support" @@ -2825,14 +2804,6 @@ msgstr "Ctrl + molette de la souris" msgid "Cubic" msgstr "Cubique" -#: src/slic3r/Utils/Http.cpp:91 -msgid "" -"CURL init has failed. PrusaSlicer will be unable to establish network " -"connections. See logs for additional details." -msgstr "" -"L'initialisation de CURL a échoué. PrusaSlicer ne pourra pas établir de " -"connexions réseau. Voir les journaux pour plus de détails." - #: src/slic3r/GUI/wxExtensions.cpp:645 #, c-format, boost-format msgid "Current mode is %s" @@ -2950,10 +2921,6 @@ msgstr "Zone morte :" msgid "Decimate ratio" msgstr "Rapport de décimation" -#: src/libslic3r/miniz_extension.cpp:111 -msgid "decompression failed or archive is corrupted" -msgstr "la décompression a échoué ou l'archive est corrompue" - #: src/slic3r/GUI/Plater.cpp:5517 msgid "Decrease Instances" msgstr "Diminuer les Instances" @@ -2964,16 +2931,9 @@ msgstr "Diminuer les Instances" msgid "Default" msgstr "Défaut" -#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 -#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 -msgid "default" -msgstr "défaut" +#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 +msgid "Default SLA material profile" +msgstr "Profil par défaut du matériau SLA" #: src/libslic3r/PrintConfig.cpp:1072 msgid "" @@ -2989,18 +2949,10 @@ msgstr "" msgid "Default color" msgstr "Couleur par défaut" -#: src/slic3r/GUI/GCodeViewer.cpp:3388 -msgid "default color" -msgstr "couleur par défaut" - #: src/libslic3r/PrintConfig.cpp:837 msgid "Default extrusion width" msgstr "Largeur d'extrusion par défaut" -#: src/slic3r/GUI/Tab.cpp:1386 -msgid "default filament profile" -msgstr "profil du filament par défaut" - #: src/libslic3r/PrintConfig.cpp:622 msgid "Default filament profile" msgstr "Profil de filament par défaut" @@ -3015,10 +2967,6 @@ msgstr "" "sélectionnant le profil d'imprimante courant, ce profil de filament sera " "activé." -#: src/slic3r/GUI/Tab.cpp:1383 -msgid "default print profile" -msgstr "profil d'impression par défaut" - #: src/libslic3r/PrintConfig.cpp:629 msgid "Default print profile" msgstr "Profil de filament par défaut" @@ -3034,22 +2982,6 @@ msgstr "" "sélectionnant le profil d'imprimante courant, ce profil de filament sera " "activé." -#: src/slic3r/GUI/Tab.cpp:1400 -msgid "default SLA material profile" -msgstr "profil par défaut du matériau SLA" - -#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 -msgid "Default SLA material profile" -msgstr "Profil par défaut du matériau SLA" - -#: src/slic3r/GUI/Tab.cpp:1404 -msgid "default SLA print profile" -msgstr "profil d'impression SLA par défaut" - -#: src/slic3r/GUI/Field.cpp:190 -msgid "default value" -msgstr "valeur par défaut" - #: src/slic3r/GUI/ConfigWizard.cpp:1177 msgid "Define a custom printer profile" msgstr "Définissez un profil d'imprimante personnalisée" @@ -3070,10 +3002,6 @@ msgstr "" msgid "Delay after unloading" msgstr "Délai après le déchargement" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "delete" -msgstr "supprimer" - #: src/slic3r/GUI/GalleryDialog.cpp:118 src/slic3r/GUI/GalleryDialog.cpp:508 #: src/slic3r/GUI/GLCanvas3D.cpp:4480 src/slic3r/GUI/GUI_Factories.cpp:444 #: src/slic3r/GUI/Tab.cpp:3734 @@ -3084,11 +3012,6 @@ msgstr "Supprimer" msgid "Delete &All" msgstr "Tout &Supprimer" -#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 -msgid "Delete all" -msgstr "Tout Supprimer" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1901 msgid "Delete All Instances from Object" msgstr "Supprimer Toutes les Instances depuis l'Objet" @@ -3097,22 +3020,6 @@ msgstr "Supprimer Toutes les Instances depuis l'Objet" msgid "Delete All Objects" msgstr "Supprimer tous les objets" -#: src/slic3r/GUI/DoubleSlider.cpp:2012 -msgid "Delete color change" -msgstr "Supprimer le changement de couleur" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 -msgid "Delete color change marker for current layer" -msgstr "Retirer le repère de changement de couleur pour la couche en cours" - -#: src/slic3r/GUI/DoubleSlider.cpp:2015 -msgid "Delete custom G-code" -msgstr "Supprimer le G-code personnalisé" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 -msgid "Delete drainage hole" -msgstr "Supprimer le trou de drainage" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1917 msgid "Delete Height Range" msgstr "Supprimer la Zone de Hauteur" @@ -3125,33 +3032,15 @@ msgstr "Supprimer l'Instance" msgid "Delete Object" msgstr "Supprimer l'Objet" -#: src/slic3r/GUI/GalleryDialog.cpp:118 -msgid "Delete one or more custom shape. You can't delete system shapes" -msgstr "" -"Supprimez une ou plusieurs formes personnalisées. Vous ne pouvez pas " -"supprimer les formes système" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:105 #, c-format, boost-format msgid "Delete Option %s" msgstr "Supprimer l'Option %s" -#: src/slic3r/GUI/DoubleSlider.cpp:2014 -msgid "Delete pause print" -msgstr "Supprimer la pause d'impression" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:733 -msgid "Delete physical printer" -msgstr "Supprimer l'imprimante physique" - #: src/slic3r/GUI/PresetComboBoxes.cpp:340 msgid "Delete Physical Printer" msgstr "Supprimer l'imprimante physique" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 -msgid "Delete selected" -msgstr "Supprimer la sélection" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2934 msgid "Delete Selected" msgstr "Supprimer la Sélection" @@ -3172,6 +3061,45 @@ msgstr "Supprimer les Réglages" msgid "Delete Subobject" msgstr "Supprimer le sous-objet" +#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 +#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 +msgid "Delete all" +msgstr "Tout Supprimer" + +#: src/slic3r/GUI/DoubleSlider.cpp:2012 +msgid "Delete color change" +msgstr "Supprimer le changement de couleur" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 +msgid "Delete color change marker for current layer" +msgstr "Retirer le repère de changement de couleur pour la couche en cours" + +#: src/slic3r/GUI/DoubleSlider.cpp:2015 +msgid "Delete custom G-code" +msgstr "Supprimer le G-code personnalisé" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 +msgid "Delete drainage hole" +msgstr "Supprimer le trou de drainage" + +#: src/slic3r/GUI/GalleryDialog.cpp:118 +msgid "Delete one or more custom shape. You can't delete system shapes" +msgstr "" +"Supprimez une ou plusieurs formes personnalisées. Vous ne pouvez pas " +"supprimer les formes système" + +#: src/slic3r/GUI/DoubleSlider.cpp:2014 +msgid "Delete pause print" +msgstr "Supprimer la pause d'impression" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:733 +msgid "Delete physical printer" +msgstr "Supprimer l'imprimante physique" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 +msgid "Delete selected" +msgstr "Supprimer la sélection" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:522 msgid "Delete support point" msgstr "Supprimer un point de support" @@ -3249,10 +3177,6 @@ msgstr "Désélectionner tous les objets" msgid "Desktop Integration" msgstr "Intégration au bureau" -#: src/slic3r/GUI/NotificationManager.hpp:768 -msgid "Desktop integration failed." -msgstr "L'intégration au bureau a échoué." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:466 msgid "" "Desktop Integration sets this binary to be searchable by the system.\n" @@ -3263,6 +3187,10 @@ msgstr "" "\n" "Appuyez sur \"Exécuter\" pour continuer." +#: src/slic3r/GUI/NotificationManager.hpp:768 +msgid "Desktop integration failed." +msgstr "L'intégration au bureau a échoué." + #: src/slic3r/GUI/NotificationManager.hpp:766 msgid "Desktop integration was successful." msgstr "L'intégration au bureau a réussi." @@ -3357,10 +3285,6 @@ msgstr "" "dans la vue 3D, choisissez Couches et Périmètres et ajustez les valeurs dans " "le panneau de droite. Lire la suite dans la documentation." -#: src/slic3r/GUI/Plater.cpp:3652 -msgid "differs from the original file" -msgstr "diffère du fichier d'origine" - #: src/libslic3r/PrintConfig.cpp:2231 msgid "Direction" msgstr "Direction" @@ -3541,21 +3465,17 @@ msgstr "Voulez-vous enregistrer les modifications dans \"%1%\" ?" msgid "Do you want to save your manually edited support points?" msgstr "Voulez-vous sauvegarder vos points de support édités manuellement ?" -#: src/slic3r/GUI/ConfigWizard.cpp:2463 -msgid "Do you want to select default filaments for these FFF printer models?" -msgstr "" -"Voulez-vous sélectionner les filaments par défaut pour ces modèles " -"d'imprimantes FFF ?" - #: src/slic3r/GUI/ConfigWizard.cpp:2481 msgid "Do you want to select default SLA materials for these printer models?" msgstr "" "Voulez-vous sélectionner les matériaux SLA par défaut pour ces modèles " "d'imprimantes ?" -#: src/slic3r/GUI/Plater.cpp:5202 -msgid "does not contain valid gcode." -msgstr "ne contient pas de gcode valide." +#: src/slic3r/GUI/ConfigWizard.cpp:2463 +msgid "Do you want to select default filaments for these FFF printer models?" +msgstr "" +"Voulez-vous sélectionner les filaments par défaut pour ces modèles " +"d'imprimantes FFF ?" #: src/libslic3r/PrintConfig.cpp:4353 msgid "Don't arrange" @@ -3651,10 +3571,38 @@ msgstr "Dynamique" msgid "E&xport" msgstr "E&xporter" +#: src/slic3r/GUI/NotificationManager.cpp:885 +msgid "ERROR" +msgstr "ERREUR" + +#: src/slic3r/GUI/NotificationManager.cpp:1447 +#: src/slic3r/GUI/NotificationManager.cpp:1454 +#: src/slic3r/GUI/NotificationManager.cpp:1470 +#: src/slic3r/GUI/NotificationManager.cpp:1476 +#: src/slic3r/GUI/NotificationManager.cpp:1547 +msgid "ERROR:" +msgstr "ERREUR :" + +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 +msgid "" +"ERROR: Please close all manipulators available from the left toolbar first" +msgstr "" +"ERREUR : Veuillez d'abord fermer tous les manipulateurs disponibles dans la " +"barre d'outils de gauche" + +#: src/slic3r/GUI/Jobs/Job.cpp:111 +msgid "ERROR: not enough resources to execute a new job." +msgstr "" +"ERREUR : il n'y a pas assez de ressources pour exécuter une nouvelle tâche." + #: src/slic3r/GUI/ImGuiWrapper.cpp:527 msgid "Edit" msgstr "Éditer" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 +msgid "Edit Height Range" +msgstr "Éditer la Zone de Hauteur" + #: src/slic3r/GUI/DoubleSlider.cpp:2004 msgid "Edit color" msgstr "Éditer la couleur" @@ -3669,10 +3617,6 @@ msgstr "" msgid "Edit custom G-code" msgstr "Éditer un G-code personnalisé" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 -msgid "Edit Height Range" -msgstr "Éditer la Zone de Hauteur" - #: src/slic3r/GUI/DoubleSlider.cpp:2005 msgid "Edit pause print message" msgstr "Modifier le message de pause d'impression" @@ -3705,10 +3649,6 @@ msgstr "Vectorisation d'Eigen prise en charge :" msgid "Ejec&t SD Card / Flash Drive" msgstr "Éje&cter la carte SD / la clé USB" -#: src/slic3r/GUI/NotificationManager.cpp:701 -msgid "Eject drive" -msgstr "Éjecter le lecteur" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:91 msgid "Eject SD card / Flash drive" msgstr "Éjecter la carte SD / la clef USB" @@ -3718,6 +3658,10 @@ msgid "Eject SD card / Flash drive after the G-code was exported to it." msgstr "" "Éjecter la carte SD / la clef USB une fois que la G-code y a été exporté." +#: src/slic3r/GUI/NotificationManager.cpp:701 +msgid "Eject drive" +msgstr "Éjecter le lecteur" + #: src/slic3r/GUI/Plater.cpp:2202 #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." @@ -4027,9 +3971,9 @@ msgstr "" msgid "Error" msgstr "Erreur" -#: src/slic3r/GUI/NotificationManager.cpp:885 -msgid "ERROR" -msgstr "ERREUR" +#: src/slic3r/GUI/PrintHostDialogs.cpp:253 +msgid "Error Message" +msgstr "Message d'erreur" #: src/slic3r/GUI/FirmwareDialog.cpp:650 #, c-format, boost-format @@ -4048,10 +3992,6 @@ msgstr "Erreur lors du remplacement" msgid "Error loading shaders" msgstr "Erreur lors du chargement des shaders" -#: src/slic3r/GUI/PrintHostDialogs.cpp:253 -msgid "Error Message" -msgstr "Message d'erreur" - #: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " @@ -4091,31 +4031,11 @@ msgstr "Erreur!" msgid "Error! Invalid model" msgstr "Erreur ! Modèle invalide" -#: src/slic3r/GUI/NotificationManager.cpp:1447 -#: src/slic3r/GUI/NotificationManager.cpp:1454 -#: src/slic3r/GUI/NotificationManager.cpp:1470 -#: src/slic3r/GUI/NotificationManager.cpp:1476 -#: src/slic3r/GUI/NotificationManager.cpp:1547 -msgid "ERROR:" -msgstr "ERREUR :" - #: src/slic3r/GUI/FirmwareDialog.cpp:652 #, c-format, boost-format msgid "Error: %s" msgstr "Erreur : %s" -#: src/slic3r/GUI/Jobs/Job.cpp:111 -msgid "ERROR: not enough resources to execute a new job." -msgstr "" -"ERREUR : il n'y a pas assez de ressources pour exécuter une nouvelle tâche." - -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 -msgid "" -"ERROR: Please close all manipulators available from the left toolbar first" -msgstr "" -"ERREUR : Veuillez d'abord fermer tous les manipulateurs disponibles dans la " -"barre d'outils de gauche" - #: src/slic3r/GUI/Plater.cpp:301 src/slic3r/GUI/Plater.cpp:1339 #: src/slic3r/GUI/Plater.cpp:1426 msgid "Estimated printing time" @@ -4137,15 +4057,6 @@ msgstr "Événement" msgid "Everywhere" msgstr "Partout" -#: src/slic3r/GUI/PresetHints.cpp:59 -#, boost-format -msgid "except for the first %1% layers." -msgstr "sauf pour les %1% première couches." - -#: src/slic3r/GUI/PresetHints.cpp:61 -msgid "except for the first layer." -msgstr "sauf pour la première couche." - #: src/libslic3r/Print.cpp:575 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" @@ -4193,14 +4104,14 @@ msgstr "" msgid "Expert" msgstr "Expert" -#: src/slic3r/GUI/ConfigWizard.cpp:1281 -msgid "Expert mode" -msgstr "Mode expert" - #: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Expert View Mode" msgstr "Mode de Vue Expert" +#: src/slic3r/GUI/ConfigWizard.cpp:1281 +msgid "Expert mode" +msgstr "Mode expert" + #: src/slic3r/GUI/Plater.cpp:6492 msgid "Export" msgstr "Exporter" @@ -4221,6 +4132,63 @@ msgstr "Exporter les &Parcours d'outils en OBJ" msgid "Export 3MF" msgstr "Exporter 3MF" +#: src/libslic3r/PrintConfig.cpp:4261 +msgid "Export AMF" +msgstr "Exporter AMF" + +#: src/slic3r/GUI/Plater.cpp:2853 +msgid "Export AMF file:" +msgstr "Exporter le fichier AMF :" + +#: src/slic3r/GUI/MainFrame.cpp:1257 +msgid "Export Config &Bundle" +msgstr "Exporter le &Lot de Configuration" + +#: src/slic3r/GUI/MainFrame.cpp:1260 +msgid "Export Config Bundle With Physical Printers" +msgstr "Exporter le Lot de Configurations Avec les Imprimantes Physiques" + +#: src/slic3r/GUI/NotificationManager.cpp:1113 +msgid "Export G-Code." +msgstr "Exporter le G-code." + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 +#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +msgid "Export G-code" +msgstr "Exporter le G-code" + +#: src/slic3r/GUI/MainFrame.cpp:1235 +msgid "Export G-code to SD Card / Flash Drive" +msgstr "Exporter le G-code vers la carte SD / la clé USB" + +#: src/libslic3r/PrintConfig.cpp:4238 +msgid "Export OBJ" +msgstr "Exporter OBJ" + +#: src/slic3r/GUI/Plater.cpp:2865 +msgid "Export OBJ file:" +msgstr "Exporter le fichier OBJ :" + +#: src/slic3r/GUI/MainFrame.cpp:1239 +msgid "Export Plate as &STL" +msgstr "Exporter le plateau en &STL" + +#: src/slic3r/GUI/MainFrame.cpp:1242 +msgid "Export Plate as STL &Including Supports" +msgstr "Exporter la plateau en STL &avec les Supports" + +#: src/libslic3r/PrintConfig.cpp:4250 +msgid "Export SLA" +msgstr "Exporter SLA" + +#: src/libslic3r/PrintConfig.cpp:4266 +msgid "Export STL" +msgstr "Exporter STL" + +#: src/slic3r/GUI/Plater.cpp:2846 +msgid "Export STL file:" +msgstr "Exporter le fichier STL :" + #: src/slic3r/GUI/MainFrame.cpp:1260 msgid "Export all presets including physical printers to file" msgstr "" @@ -4231,14 +4199,6 @@ msgstr "" msgid "Export all presets to file" msgstr "Exporter tous les préréglage vers un fichier" -#: src/libslic3r/PrintConfig.cpp:4261 -msgid "Export AMF" -msgstr "Exporter AMF" - -#: src/slic3r/GUI/Plater.cpp:2853 -msgid "Export AMF file:" -msgstr "Exporter le fichier AMF :" - #: src/slic3r/GUI/GUI_Factories.cpp:715 msgid "Export as STL" msgstr "Exporter en tant que STL" @@ -4247,14 +4207,6 @@ msgstr "Exporter en tant que STL" msgid "Export config" msgstr "Exporter la configuration" -#: src/slic3r/GUI/MainFrame.cpp:1257 -msgid "Export Config &Bundle" -msgstr "Exporter le &Lot de Configuration" - -#: src/slic3r/GUI/MainFrame.cpp:1260 -msgid "Export Config Bundle With Physical Printers" -msgstr "Exporter le Lot de Configurations Avec les Imprimantes Physiques" - #: src/slic3r/GUI/MainFrame.cpp:1254 msgid "Export current configuration to file" msgstr "Exporter la configuration actuelle vers un fichier" @@ -4283,55 +4235,14 @@ msgstr "" "Exportez les chemins d'accès complets des modèles et des sources de pièces " "dans des fichiers 3mf et amf" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 -msgid "Export G-code" -msgstr "Exporter le G-code" - -#: src/slic3r/GUI/MainFrame.cpp:1235 -msgid "Export G-code to SD Card / Flash Drive" -msgstr "Exporter le G-code vers la carte SD / la clé USB" - -#: src/slic3r/GUI/NotificationManager.cpp:1113 -msgid "Export G-Code." -msgstr "Exporter le G-code." - -#: src/libslic3r/PrintConfig.cpp:4238 -msgid "Export OBJ" -msgstr "Exporter OBJ" - -#: src/slic3r/GUI/Plater.cpp:2865 -msgid "Export OBJ file:" -msgstr "Exporter le fichier OBJ :" - #: src/slic3r/Utils/FixModelByWin10.cpp:379 msgid "Export of a temporary 3mf file failed" msgstr "Exporter un fichier temporaire 3mf qui a échoué" -#: src/slic3r/GUI/MainFrame.cpp:1239 -msgid "Export Plate as &STL" -msgstr "Exporter le plateau en &STL" - -#: src/slic3r/GUI/MainFrame.cpp:1242 -msgid "Export Plate as STL &Including Supports" -msgstr "Exporter la plateau en STL &avec les Supports" - -#: src/libslic3r/PrintConfig.cpp:4250 -msgid "Export SLA" -msgstr "Exporter SLA" - #: src/slic3r/GUI/Preferences.cpp:148 msgid "Export sources full pathnames to 3mf and amf" msgstr "Exporter les noms de chemins complets des sources vers 3mf et amf" -#: src/libslic3r/PrintConfig.cpp:4266 -msgid "Export STL" -msgstr "Exporter STL" - -#: src/slic3r/GUI/Plater.cpp:2846 -msgid "Export STL file:" -msgstr "Exporter le fichier STL :" - #: src/libslic3r/PrintConfig.cpp:4257 msgid "Export the model(s) as 3MF." msgstr "Exporter le(s) modèle(s) en tant que 3MF." @@ -4360,6 +4271,10 @@ msgstr "Exporter le parcours en tant que OBJ" msgid "Export." msgstr "Exporter." +#: src/libslic3r/Print.cpp:863 +msgid "Exporting G-code" +msgstr "Exportation du G-code" + #: src/slic3r/GUI/MainFrame.cpp:1809 msgid "Exporting configuration bundle" msgstr "Exportation du lot de configuration" @@ -4368,10 +4283,6 @@ msgstr "Exportation du lot de configuration" msgid "Exporting finished." msgstr "Exportation terminée." -#: src/libslic3r/Print.cpp:863 -msgid "Exporting G-code" -msgstr "Exportation du G-code" - #: src/slic3r/Utils/FixModelByWin10.cpp:221 #: src/slic3r/Utils/FixModelByWin10.cpp:362 msgid "Exporting source model" @@ -4398,10 +4309,6 @@ msgstr "Temps d'exposition" msgid "External perimeter" msgstr "Périmètre externe" -#: src/slic3r/GUI/PresetHints.cpp:170 -msgid "external perimeters" -msgstr "périmètres externes" - #: src/libslic3r/PrintConfig.cpp:727 src/libslic3r/PrintConfig.cpp:739 msgid "External perimeters" msgstr "Périmètres externes" @@ -4447,6 +4354,10 @@ msgstr "Extrudeur %d" msgid "Extruder (tool) is changed to Extruder \"%1%\"" msgstr "L'extrudeur (outil) est remplacée par l'extrudeur \"%1%\"" +#: src/libslic3r/PrintConfig.cpp:804 +msgid "Extruder Color" +msgstr "Couleur de l'extrudeur" + #: src/slic3r/GUI/WipeTowerDialog.cpp:300 msgid "Extruder changed to" msgstr "Extrudeur changé à" @@ -4455,10 +4366,6 @@ msgstr "Extrudeur changé à" msgid "Extruder clearance" msgstr "Dégagement de l'extrudeur" -#: src/libslic3r/PrintConfig.cpp:804 -msgid "Extruder Color" -msgstr "Couleur de l'extrudeur" - #: src/libslic3r/PrintConfig.cpp:811 msgid "Extruder offset" msgstr "Décalage de l'extrudeur" @@ -4480,22 +4387,10 @@ msgstr "Nombre d'extrudeurs" msgid "Extrusion" msgstr "Extrusion" -#: src/libslic3r/PrintConfig.cpp:821 -msgid "Extrusion axis" -msgstr "Axe d'extrusion" - -#: src/libslic3r/PrintConfig.cpp:827 -msgid "Extrusion multiplier" -msgstr "Multiplicateur d'extrusion" - #: src/slic3r/GUI/ConfigWizard.cpp:1567 msgid "Extrusion Temperature:" msgstr "Température d'Extrusion :" -#: src/slic3r/GUI/Tab.cpp:1650 -msgid "Extrusion width" -msgstr "Largeur d'extrusion" - #: src/slic3r/GUI/GUI_Factories.cpp:134 src/libslic3r/PrintConfig.cpp:728 #: src/libslic3r/PrintConfig.cpp:838 src/libslic3r/PrintConfig.cpp:1195 #: src/libslic3r/PrintConfig.cpp:1455 src/libslic3r/PrintConfig.cpp:1956 @@ -4504,6 +4399,22 @@ msgstr "Largeur d'extrusion" msgid "Extrusion Width" msgstr "Largeur d'Extrusion" +#: src/libslic3r/PrintConfig.cpp:821 +msgid "Extrusion axis" +msgstr "Axe d'extrusion" + +#: src/libslic3r/PrintConfig.cpp:827 +msgid "Extrusion multiplier" +msgstr "Multiplicateur d'extrusion" + +#: src/slic3r/GUI/Tab.cpp:1650 +msgid "Extrusion width" +msgstr "Largeur d'extrusion" + +#: src/slic3r/GUI/ConfigWizard.cpp:2097 +msgid "FFF Technology Printers" +msgstr "Imprimantes Technologie FFF" + #: src/slic3r/GUI/Plater.cpp:213 msgid "Facets" msgstr "Faces" @@ -4512,10 +4423,6 @@ msgstr "Faces" msgid "Faded layers" msgstr "Couches estompées" -#: src/libslic3r/miniz_extension.cpp:103 -msgid "failed finding central directory" -msgstr "impossible de trouver le répertoire central" - #: src/slic3r/GUI/Plater.cpp:2516 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." @@ -4539,6 +4446,10 @@ msgstr "L'activation de l'instantané de configuration a échoué." msgid "Failed to drill some holes into the model" msgstr "Échec du perçage de certains trous dans le modèle" +#: src/slic3r/GUI/GCodeViewer.cpp:3296 +msgid "Fan Speed (%)" +msgstr "Vitesse du ventilateur (%)" + #: src/slic3r/GUI/Tab.cpp:2007 msgid "Fan settings" msgstr "Réglages du ventilateur" @@ -4547,10 +4458,6 @@ msgstr "Réglages du ventilateur" msgid "Fan speed" msgstr "Vitesse du ventilateur" -#: src/slic3r/GUI/GCodeViewer.cpp:3296 -msgid "Fan Speed (%)" -msgstr "Vitesse du ventilateur (%)" - #: src/slic3r/GUI/PresetHints.cpp:55 #, boost-format msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%." @@ -4608,19 +4515,41 @@ msgstr "Type de fonctionnalité" msgid "Feature types" msgstr "Types de fonctionnalité" -#: src/slic3r/GUI/ConfigWizard.cpp:2097 -msgid "FFF Technology Printers" -msgstr "Imprimantes Technologie FFF" - #: src/slic3r/GUI/GCodeViewer.cpp:3696 src/slic3r/GUI/GCodeViewer.cpp:3722 #: src/slic3r/GUI/GUI.cpp:339 src/slic3r/GUI/Plater.cpp:818 #: src/slic3r/GUI/Tab.cpp:1962 src/slic3r/GUI/Tab.cpp:1963 msgid "Filament" msgstr "Filament" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 -msgid "filament" -msgstr "filament" +#: src/slic3r/GUI/ConfigWizard.cpp:1489 +msgid "Filament Diameter:" +msgstr "Diamètre du Filament :" + +#: src/libslic3r/GCode.cpp:725 +msgid "Filament End G-code" +msgstr "G-code de fin du filament" + +#: src/slic3r/GUI/Tab.cpp:1861 +msgid "Filament Overrides" +msgstr "Réglages dérogatoires du Filament" + +#: src/slic3r/GUI/ConfigWizard.cpp:2912 +msgid "Filament Profiles Selection" +msgstr "Sélection des Profils de Filament" + +#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 +#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 +#: src/slic3r/GUI/Tab.hpp:448 +msgid "Filament Settings" +msgstr "Réglages du filament" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 +msgid "Filament Settings Tab" +msgstr "Onglet de réglages du filament" + +#: src/libslic3r/GCode.cpp:718 +msgid "Filament Start G-code" +msgstr "G-code de début du filament" #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Filament and Nozzle Diameters" @@ -4631,14 +4560,6 @@ msgstr "Diamètres du Filament et de la Buse" msgid "Filament at extruder %1%" msgstr "Filament de l'extrudeur %1%" -#: src/slic3r/GUI/ConfigWizard.cpp:1489 -msgid "Filament Diameter:" -msgstr "Diamètre du Filament :" - -#: src/libslic3r/GCode.cpp:725 -msgid "Filament End G-code" -msgstr "G-code de fin du filament" - #: src/libslic3r/PrintConfig.cpp:936 msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " @@ -4655,36 +4576,14 @@ msgstr "Temps de chargement du filament" msgid "Filament notes" msgstr "Notes du filament" -#: src/slic3r/GUI/Tab.cpp:1861 -msgid "Filament Overrides" -msgstr "Réglages dérogatoires du Filament" - #: src/libslic3r/PrintConfig.cpp:1920 msgid "Filament parking position" msgstr "Position d'attente du filament" -#: src/slic3r/GUI/ConfigWizard.cpp:2912 -msgid "Filament Profiles Selection" -msgstr "Sélection des Profils de Filament" - #: src/slic3r/GUI/Tab.cpp:2024 msgid "Filament properties" msgstr "Propriétés du filament" -#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 -#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 -msgid "Filament Settings" -msgstr "Réglages du filament" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 -msgid "Filament Settings Tab" -msgstr "Onglet de réglages du filament" - -#: src/libslic3r/GCode.cpp:718 -msgid "Filament Start G-code" -msgstr "G-code de début du filament" - #: src/libslic3r/PrintConfig.cpp:1011 msgid "Filament type" msgstr "Type de filament" @@ -4693,58 +4592,18 @@ msgstr "Type de filament" msgid "Filament unload time" msgstr "Temps de déchargement du filament" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 -msgid "filaments" -msgstr "filaments" - #: src/slic3r/GUI/ConfigWizard.cpp:752 src/slic3r/GUI/ConfigWizard.cpp:2043 #: src/slic3r/GUI/ConfigWizard.cpp:2912 msgid "Filaments" msgstr "Filaments" -#: src/libslic3r/miniz_extension.cpp:131 -msgid "file close failed" -msgstr "échec de la fermeture du fichier" - -#: src/libslic3r/miniz_extension.cpp:125 -msgid "file create failed" -msgstr "échec de création du fichier" - -#: src/slic3r/GUI/Plater.cpp:3529 -msgid "File for the replace wasn't selected" -msgstr "Le fichier à remplacer n'a pas été sélectionné" - #: src/slic3r/GUI/MainFrame.cpp:1626 msgid "File Not Found" msgstr "Fichier non trouvé" -#: src/libslic3r/miniz_extension.cpp:145 -msgid "file not found" -msgstr "fichier non trouvé" - -#: src/libslic3r/miniz_extension.cpp:123 -msgid "file open failed" -msgstr "échec de l'ouverture du fichier" - -#: src/libslic3r/miniz_extension.cpp:129 -msgid "file read failed" -msgstr "échec de lecture du fichier" - -#: src/libslic3r/miniz_extension.cpp:133 -msgid "file seek failed" -msgstr "impossible de trouver le fichier" - -#: src/libslic3r/miniz_extension.cpp:135 -msgid "file stat failed" -msgstr "impossible d'établir des statistiques pour ce fichier" - -#: src/libslic3r/miniz_extension.cpp:95 -msgid "file too large" -msgstr "fichier trop volumineux" - -#: src/libslic3r/miniz_extension.cpp:127 -msgid "file write failed" -msgstr "échec d'écriture du fichier" +#: src/slic3r/GUI/Plater.cpp:3529 +msgid "File for the replace wasn't selected" +msgstr "Le fichier à remplacer n'a pas été sélectionné" #: src/slic3r/GUI/PrintHostDialogs.cpp:252 msgid "Filename" @@ -4826,14 +4685,6 @@ msgstr "Terminé" msgid "Firmware" msgstr "Firmware" -#: src/slic3r/GUI/FirmwareDialog.cpp:787 -msgid "Firmware flasher" -msgstr "Outil de flash du firmware" - -#: src/slic3r/GUI/FirmwareDialog.cpp:812 -msgid "Firmware image:" -msgstr "Image du firmware :" - #: src/slic3r/GUI/Tab.cpp:3007 msgid "Firmware Retraction" msgstr "Rétraction du Firmware" @@ -4842,6 +4693,14 @@ msgstr "Rétraction du Firmware" msgid "Firmware Type" msgstr "Type de Firmware" +#: src/slic3r/GUI/FirmwareDialog.cpp:787 +msgid "Firmware flasher" +msgstr "Outil de flash du firmware" + +#: src/slic3r/GUI/FirmwareDialog.cpp:812 +msgid "Firmware image:" +msgstr "Image du firmware :" + #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:116 msgid "First color" msgstr "Première couleur" @@ -4955,10 +4814,6 @@ msgstr "Flux" msgid "Flow rate" msgstr "Débit" -#: src/slic3r/GUI/PresetHints.cpp:188 -msgid "flow rate is maximized" -msgstr "le débit est maximisé" - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:670 #, boost-format msgid "" @@ -5027,16 +4882,6 @@ msgstr "" msgid "For support enforcers only" msgstr "Seulement pour les générateur de supports" -#. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4266 -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:142 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -5093,10 +4938,6 @@ msgstr "Mots-clés réservés trouvés dans" msgid "From" msgstr "De" -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "from" -msgstr "de" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1949 msgid "From Object List You can't delete the last solid part from object." msgstr "" @@ -5115,10 +4956,6 @@ msgstr "Vue Avant" msgid "Full fan speed at layer" msgstr "Ventilateur à pleine vitesse pour la couche" -#: src/slic3r/GUI/Tab.cpp:1412 -msgid "full profile name" -msgstr "nom de profil complet" - #: src/slic3r/GUI/MainFrame.cpp:1435 msgid "Fullscreen" msgstr "Plein écran" @@ -5133,6 +4970,12 @@ msgstr "" "Saviez-vous que vous pouvez basculer PrusaSlicer en mode plein écran ? " "Utilisez le raccourci clavier F11." +#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 +#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 +#: src/libslic3r/PrintConfig.cpp:1286 +msgid "Fuzzy Skin" +msgstr "Surface Irrégulière" + #: resources/data/hints.ini: [hint:Fuzzy skin] msgid "" "Fuzzy skin\n" @@ -5146,12 +4989,6 @@ msgstr "" "irrégulière ? Vous pouvez également utiliser des modificateurs pour " "appliquer une surface irrégulière uniquement à une partie de votre modèle." -#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 -#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 -#: src/libslic3r/PrintConfig.cpp:1286 -msgid "Fuzzy Skin" -msgstr "Surface Irrégulière" - #: src/slic3r/GUI/Tab.cpp:1500 msgid "Fuzzy skin (experimental)" msgstr "Surface irrégulière (expérimental)" @@ -5168,10 +5005,6 @@ msgstr "Épaisseur de la surface Irrégulière" msgid "Fuzzy skin type." msgstr "Type de surface irrégulière." -#: src/libslic3r/PrintConfig.cpp:1057 -msgid "g" -msgstr "g" - #: src/slic3r/GUI/MainFrame.cpp:1661 msgid "G-code" msgstr "G-code" @@ -5214,13 +5047,13 @@ msgstr "Vignettes G-code" msgid "G-code viewer" msgstr "Visionneuse de G-code" -#: src/libslic3r/PrintConfig.cpp:1006 -msgid "g/cm³" -msgstr "g/cm³" +#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 +msgid "GNU Affero General Public License, version 3" +msgstr "GNU Affero Licence Publique Générale, version 3" -#: src/libslic3r/PrintConfig.cpp:3288 -msgid "g/ml" -msgstr "g/ml" +#: src/slic3r/GUI/Preferences.cpp:343 +msgid "GUI" +msgstr "GUI" #: src/slic3r/GUI/GUI_Factories.cpp:471 msgid "Gallery" @@ -5272,10 +5105,6 @@ msgstr "Générer des supports" msgid "Generate supports for the models" msgstr "Générer des supports pour les modèles" -#: src/slic3r/GUI/Plater.cpp:4107 -msgid "generated warnings" -msgstr "avertissements générés" - #: src/libslic3r/Print.cpp:867 msgid "Generating G-code" msgstr "Génération du G-code" @@ -5320,10 +5149,6 @@ msgstr "Génération du tampon de vertex" msgid "Generic" msgstr "Générique" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 -msgid "Gizmo cut" -msgstr "Couper le Gizmo" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:155 msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM pour la jointure peinte" @@ -5332,14 +5157,6 @@ msgstr "Gizmo FDM pour la jointure peinte" msgid "Gizmo FDM paint-on supports" msgstr "Gizmo FDM pour les supports peints" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 -msgid "Gizmo move" -msgstr "Déplacer le Gizmo" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 -msgid "Gizmo move: Press to snap by 1mm" -msgstr "Déplacement du gizmo : appuyez pour des pas de 1 mm" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:156 msgid "Gizmo Multi Material painting" msgstr "Gizmo pour la peinture Multi Material" @@ -5348,6 +5165,26 @@ msgstr "Gizmo pour la peinture Multi Material" msgid "Gizmo Place face on bed" msgstr "Emplacement du Gizmo face au lit" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 +msgid "Gizmo SLA hollow" +msgstr "Gizmo SLA évidé" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 +msgid "Gizmo SLA support points" +msgstr "Points de support SLA du Gizmo" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 +msgid "Gizmo cut" +msgstr "Couper le Gizmo" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 +msgid "Gizmo move" +msgstr "Déplacer le Gizmo" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 +msgid "Gizmo move: Press to snap by 1mm" +msgstr "Déplacement du gizmo : appuyez pour des pas de 1 mm" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:149 msgid "Gizmo rotate" msgstr "Pivoter le Gizmo" @@ -5384,14 +5221,6 @@ msgstr "" "Redimensionnement du gizmo : redimensionner la sélection pour remplir le " "volume d'impression" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 -msgid "Gizmo SLA hollow" -msgstr "Gizmo SLA évidé" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 -msgid "Gizmo SLA support points" -msgstr "Points de support SLA du Gizmo" - #: src/slic3r/GUI/GLCanvas3D.cpp:2557 #: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:560 msgid "Gizmo-Move" @@ -5414,10 +5243,6 @@ msgstr "Gizmo-Échelle" msgid "Gizmos" msgstr "Gizmos" -#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 -msgid "GNU Affero General Public License, version 3" -msgstr "GNU Affero Licence Publique Générale, version 3" - #: src/slic3r/GUI/ConfigWizard.cpp:1486 msgid "" "Good precision is required, so use a caliper and do multiple measurements " @@ -5438,14 +5263,36 @@ msgstr "Grouper" msgid "Group manipulation" msgstr "Manipulation d'un groupe" -#: src/slic3r/GUI/Preferences.cpp:343 -msgid "GUI" -msgstr "GUI" - #: src/libslic3r/PrintConfig.cpp:1154 msgid "Gyroid" msgstr "Gyroïde" +#: src/libslic3r/PrintConfig.cpp:352 +msgid "HTTP digest" +msgstr "HTTP digest" + +#: src/slic3r/Utils/Repetier.cpp:246 +#, boost-format +msgid "" +"HTTP status: %1%\n" +"Message body: \"%2%\"" +msgstr "" +"Statut HTTP : %1%\n" +"Corps du message : \"%2%\"" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 +#: src/libslic3r/PrintConfig.cpp:307 +msgid "HTTPS CA File" +msgstr "HTTPS CA Fichier" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" +"Le fichier HTTPS CA est optionnel. Il est uniquement requis si vous utilisez " +"le HTTPS avec un certificat auto-signé." + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:39 msgid "Head diameter" msgstr "Diamètre de la tête" @@ -5623,14 +5470,14 @@ msgstr "Modification des paramètres d'évidement" msgid "Honeycomb" msgstr "Nid d'abeille" -#: src/slic3r/GUI/Tab.cpp:1469 -msgid "Horizontal shells" -msgstr "Coques horizontales" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:254 msgid "Horizontal Slider" msgstr "Barre de Défilement Horizontale" +#: src/slic3r/GUI/Tab.cpp:1469 +msgid "Horizontal shells" +msgstr "Coques horizontales" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:219 #: src/slic3r/GUI/KBShortcutsDialog.cpp:223 msgid "Horizontal slider - Move active thumb Left" @@ -5697,40 +5544,14 @@ msgstr "Comment appliquer des limites" msgid "How to apply the Machine Limits" msgstr "Comment appliquer les limites de la machine" -#: src/libslic3r/PrintConfig.cpp:352 -msgid "HTTP digest" -msgstr "HTTP digest" - -#: src/slic3r/Utils/Repetier.cpp:246 -#, boost-format -msgid "" -"HTTP status: %1%\n" -"Message body: \"%2%\"" -msgstr "" -"Statut HTTP : %1%\n" -"Corps du message : \"%2%\"" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 -#: src/libslic3r/PrintConfig.cpp:307 -msgid "HTTPS CA File" -msgstr "HTTPS CA Fichier" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." -msgstr "" -"Le fichier HTTPS CA est optionnel. Il est uniquement requis si vous utilisez " -"le HTTPS avec un certificat auto-signé." +#: src/slic3r/GUI/PrintHostDialogs.cpp:247 +msgid "ID" +msgstr "ID" #: src/slic3r/GUI/Preferences.cpp:694 msgid "Icon size in a respect to the default size" msgstr "Taille de l'icône par rapport à la taille par défaut" -#: src/slic3r/GUI/PrintHostDialogs.cpp:247 -msgid "ID" -msgstr "ID" - #: src/libslic3r/PrintConfig.cpp:2511 msgid "" "If checked, supports will be generated automatically based on the overhang " @@ -5769,6 +5590,42 @@ msgstr "" "temporaire séparé. Lorsqu'une nouvelle version de préréglages est " "disponible, elle est proposée au démarrage de l'application." +#: src/slic3r/GUI/Preferences.cpp:289 +msgid "If enabled, PrusaSlicer will be open at the position it was closed" +msgstr "Si activé, PrusaSlicer sera ouvert à la position où il a été fermé" + +#: src/slic3r/GUI/Preferences.cpp:384 +msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." +msgstr "" +"Si activé, PrusaSlicer n'ouvrira pas les hyperliens dans votre navigateur." + +#: src/slic3r/GUI/Preferences.cpp:410 +msgid "" +"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " +"will be used." +msgstr "" +"Si activé, les onglets de réglage seront placés comme des éléments du menu. " +"Si désactivé, l'ancienne interface utilisateur sera utilisée." + +#: src/slic3r/GUI/Preferences.cpp:177 +msgid "" +"If enabled, Slic3r 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 activé, Slic3r télécharge les mises à jours des préréglages système " +"intégrés en arrière-plan. Ces mises à jour sont téléchargées dans un " +"répertoire temporaire séparé. Lorsqu'une nouvelle version de préréglages est " +"disponible, elle est proposée au démarrage de l'application." + +#: src/slic3r/GUI/Preferences.cpp:498 +msgid "" +"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." +msgstr "" +"Si activé, l'interface utilisateur utilisera les couleurs du mode Sombre. Si " +"désactivé, l'ancienne interface utilisateur sera utilisée." + #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:174 msgid "If enabled, a repetition of the next random color will be allowed." msgstr "" @@ -5782,6 +5639,14 @@ msgstr "" "Si ceci est activé, tous les extrudeurs qui impriment seront positionnés sur " "la bordure avant du lit d'impression au début de l'impression." +#: src/slic3r/GUI/Preferences.cpp:150 +msgid "" +"If enabled, allows the Reload from disk command to automatically find and " +"load the files when invoked." +msgstr "" +"Si activé, permet à la commande Recharger à partir du disque de rechercher " +"et de charger automatiquement les fichiers lorsqu'elle est invoquée." + #: src/slic3r/GUI/ConfigWizard.cpp:1250 msgid "" "If enabled, allows the Reload from disk command to automatically find and " @@ -5795,14 +5660,6 @@ msgstr "" "sélectionner chaque fichier à l'aide d'une boîte de dialogue d'ouverture de " "fichier." -#: src/slic3r/GUI/Preferences.cpp:150 -msgid "" -"If enabled, allows the Reload from disk command to automatically find and " -"load the files when invoked." -msgstr "" -"Si activé, permet à la commande Recharger à partir du disque de rechercher " -"et de charger automatiquement les fichiers lorsqu'elle est invoquée." - #: src/slic3r/GUI/Preferences.cpp:509 msgid "" "If enabled, application will use the standard Windows system menu,\n" @@ -5835,15 +5692,6 @@ msgstr "" "désactivé, les modifications effectuées à l'aide du curseur séquentiel, dans " "l'aperçu, s'appliquent à l'ensemble du gcode." -#: src/slic3r/GUI/Preferences.cpp:289 -msgid "If enabled, PrusaSlicer will be open at the position it was closed" -msgstr "Si activé, PrusaSlicer sera ouvert à la position où il a été fermé" - -#: src/slic3r/GUI/Preferences.cpp:384 -msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." -msgstr "" -"Si activé, PrusaSlicer n'ouvrira pas les hyperliens dans votre navigateur." - #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:166 msgid "If enabled, random sequence of the selected extruders will be used." msgstr "" @@ -5857,6 +5705,14 @@ msgstr "Si activé, rend l'objet à l'aide de la carte d'environnement." msgid "If enabled, reverses the direction of zoom with mouse wheel" msgstr "Si activé, inverse la direction du zoom avec la molette de la souris" +#: src/slic3r/GUI/Preferences.cpp:260 +msgid "" +"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." +"gcode files." +msgstr "" +"Si activé, définit la Visualisation de G-code de PrusaSlicer comme " +"application par défaut pour ouvrir les fichiers .gcode." + #: src/slic3r/GUI/Preferences.cpp:159 msgid "If enabled, sets PrusaSlicer as default application to open .3mf files." msgstr "" @@ -5869,34 +5725,6 @@ msgstr "" "Si activé, définit PrusaSlicer comme l'application par défaut pour ouvrir " "les fichiers .stl." -#: src/slic3r/GUI/Preferences.cpp:260 -msgid "" -"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." -"gcode files." -msgstr "" -"Si activé, définit la Visualisation de G-code de PrusaSlicer comme " -"application par défaut pour ouvrir les fichiers .gcode." - -#: src/slic3r/GUI/Preferences.cpp:410 -msgid "" -"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " -"will be used." -msgstr "" -"Si activé, les onglets de réglage seront placés comme des éléments du menu. " -"Si désactivé, l'ancienne interface utilisateur sera utilisée." - -#: src/slic3r/GUI/Preferences.cpp:177 -msgid "" -"If enabled, Slic3r 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 activé, Slic3r télécharge les mises à jours des préréglages système " -"intégrés en arrière-plan. Ces mises à jour sont téléchargées dans un " -"répertoire temporaire séparé. Lorsqu'une nouvelle version de préréglages est " -"disponible, elle est proposée au démarrage de l'application." - #: src/slic3r/GUI/Preferences.cpp:270 msgid "" "If enabled, the 3D scene will be rendered in Retina resolution. If you are " @@ -5955,13 +5783,6 @@ msgstr "" "C'est à l'utilisateur de s'assurer qu'il n'y a pas de collision avec " "l'impression." -#: src/slic3r/GUI/Preferences.cpp:498 -msgid "" -"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." -msgstr "" -"Si activé, l'interface utilisateur utilisera les couleurs du mode Sombre. Si " -"désactivé, l'ancienne interface utilisateur sera utilisée." - #: src/slic3r/GUI/Preferences.cpp:328 msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" @@ -6071,14 +5892,6 @@ msgstr "" "secondes, la vitesse des déplacements d'impression sera réduite afin " "d'atteindre cette valeur." -#: src/libslic3r/PrintConfig.cpp:852 -msgid "" -"If this is enabled, fan will never be disabled and will be kept running at " -"least at its minimum speed. Useful for PLA, harmful for ABS." -msgstr "" -"Si ceci est activé, le ventilateur ne sera jamais désactivé et sera maintenu " -"au moins à sa vitesse minimum. Utile pour le PLA, mais risqué pour l'ABS." - #: src/slic3r/GUI/Preferences.cpp:131 msgid "" "If this is enabled, Slic3r will auto-center objects around the print bed " @@ -6103,6 +5916,14 @@ msgstr "" "Si ceci est activé, Slic3r affichera le dernier répertoire de sortie au lieu " "de celui contenant les fichiers d'entrée." +#: src/libslic3r/PrintConfig.cpp:852 +msgid "" +"If this is enabled, fan will never be disabled and will be kept running at " +"least at its minimum speed. Useful for PLA, harmful for ABS." +msgstr "" +"Si ceci est activé, le ventilateur ne sera jamais désactivé et sera maintenu " +"au moins à sa vitesse minimum. Utile pour le PLA, mais risqué pour l'ABS." + #: src/slic3r/GUI/Preferences.cpp:214 msgid "" "If this is enabled, when starting PrusaSlicer and another instance of the " @@ -6241,26 +6062,6 @@ msgstr "Importer la Configuration à partir du &Projet" msgid "Import Config from ini/amf/3mf/gcode" msgstr "Importer une Configuration depuis ini/amf/3mf/gcode" -#: src/slic3r/GUI/Plater.cpp:5265 -msgid "Import config only" -msgstr "Importer la configuration uniquement" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 -msgid "Import file" -msgstr "Importer le fichier" - -#: src/slic3r/GUI/Plater.cpp:5264 -msgid "Import geometry only" -msgstr "Importer la géométrie uniquement" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 -msgid "Import model and profile" -msgstr "Importer le modèle et le profil" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 -msgid "Import model only" -msgstr "Importer le modèle uniquement" - #: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 msgid "Import Object" msgstr "Importer l'Objet" @@ -6269,14 +6070,6 @@ msgstr "Importer l'Objet" msgid "Import Objects" msgstr "Importer les Objets" -#: src/slic3r/Utils/FixModelByWin10.cpp:395 -msgid "Import of the repaired 3mf file failed" -msgstr "Échec de l'import du fichier 3mf réparé" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 -msgid "Import profile only" -msgstr "Importer le profil uniquement" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Import SL1 / SL1S Archive" msgstr "Importer l'archive SL1 / SL1S" @@ -6297,6 +6090,38 @@ msgstr "Importer STL/OBJ/AM&F/3MF" msgid "Import STL/OBJ/AMF/3MF without config, keep plater" msgstr "Importer un STL/OBJ/AMF/3MF sans configuration, conserver le plateau" +#: src/slic3r/GUI/Plater.cpp:5265 +msgid "Import config only" +msgstr "Importer la configuration uniquement" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 +msgid "Import file" +msgstr "Importer le fichier" + +#: src/slic3r/GUI/Plater.cpp:5264 +msgid "Import geometry only" +msgstr "Importer la géométrie uniquement" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 +msgid "Import model and profile" +msgstr "Importer le modèle et le profil" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 +msgid "Import model only" +msgstr "Importer le modèle uniquement" + +#: src/slic3r/Utils/FixModelByWin10.cpp:395 +msgid "Import of the repaired 3mf file failed" +msgstr "Échec de l'import du fichier 3mf réparé" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 +msgid "Import profile only" +msgstr "Importer le profil uniquement" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 +msgid "Importing SLA archive" +msgstr "Importation de l'archive SLA" + #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:164 msgid "Importing canceled." msgstr "Importation annulée." @@ -6305,18 +6130,6 @@ msgstr "Importation annulée." msgid "Importing done." msgstr "Importation terminée." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 -msgid "Importing SLA archive" -msgstr "Importation de l'archive SLA" - -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -msgid "in" -msgstr "in" - #: src/libslic3r/GCode.cpp:764 msgid "In the custom G-code were found reserved keywords:" msgstr "Dans le G-code personnalisé ont été trouvés des mots-clés réservés :" @@ -6351,41 +6164,6 @@ msgstr "Augmenter les Instances" msgid "Increase/decrease edit area" msgstr "Augmenter/diminuer la zone d'édition" -#. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4259 -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 "" -"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" -"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" -#: src/slic3r/GUI/Tab.cpp:4255 -msgid "" -"indicates that the settings are the same as the system (or default) values " -"for the current option group" -msgstr "" -"indique que les paramètres sont les mêmes que les valeurs système (ou par " -"défaut) pour le groupe d'options en cours" - -#. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4271 -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 "" -"indique que les paramètres ont été changés et qu'ils ne sont pas identiques " -"au dernier préréglage enregistré du groupe d'options en cours.\n" -"Cliquez sur l'icône FLÈCHE ARRIÈRE pour restaurer tous les paramètres du " -"groupe d'options en cours avec les valeurs du dernier préréglage enregistré." - #: src/slic3r/GUI/ConfigManipulation.cpp:199 #: src/slic3r/GUI/GUI_Factories.cpp:55 src/slic3r/GUI/GUI_Factories.cpp:128 #: src/slic3r/GUI/Plater.cpp:460 src/slic3r/GUI/Tab.cpp:1506 @@ -6399,10 +6177,6 @@ msgstr "" msgid "Infill" msgstr "Remplissage" -#: src/slic3r/GUI/PresetHints.cpp:174 -msgid "infill" -msgstr "remplissage" - #: src/libslic3r/PrintConfig.cpp:1467 msgid "Infill before perimeters" msgstr "Remplissage avant les périmètres" @@ -6450,6 +6224,11 @@ msgstr "Hauteur de couche initiale" msgid "Inner brim only" msgstr "Bordure intérieure uniquement" +#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 +#: src/slic3r/GUI/Field.cpp:1575 +msgid "Input value is out of range" +msgstr "La valeur entrée est hors plage" + #: src/slic3r/GUI/Field.cpp:266 #, c-format, boost-format msgid "" @@ -6460,11 +6239,6 @@ msgstr "" "Êtes-vous certain que %s est une valeur correcte et que vous voulez " "continuer ?" -#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 -#: src/slic3r/GUI/Field.cpp:1575 -msgid "Input value is out of range" -msgstr "La valeur entrée est hors plage" - #: resources/data/hints.ini: [hint:Insert Custom G-code] msgid "" "Insert Custom G-code\n" @@ -6539,10 +6313,6 @@ msgstr "Espacement du motif d'interface" msgid "Interface shells" msgstr "Coques d'interface" -#: src/libslic3r/miniz_extension.cpp:143 -msgid "internal error" -msgstr "erreur interne" - #: src/slic3r/GUI/GUI_App.cpp:713 #, boost-format msgid "Internal error: %1%" @@ -6553,6 +6323,10 @@ msgstr "Erreur interne : %1%" msgid "Internal infill" msgstr "Remplissage interne" +#: src/slic3r/GUI/ConfigManipulation.cpp:329 +msgid "Invalid Head penetration" +msgstr "Pénétration de Tête invalide" + #: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 msgid "Invalid data" msgstr "Donnée non valide" @@ -6562,18 +6336,6 @@ msgstr "Donnée non valide" msgid "Invalid file format." msgstr "Format de fichier non valide." -#: src/libslic3r/miniz_extension.cpp:139 -msgid "invalid filename" -msgstr "nom de fichier non valide" - -#: src/slic3r/GUI/ConfigManipulation.cpp:329 -msgid "Invalid Head penetration" -msgstr "Pénétration de Tête invalide" - -#: src/libslic3r/miniz_extension.cpp:107 -msgid "invalid header or archive is corrupted" -msgstr "entête non valide ou archive corrompue" - #: src/slic3r/GUI/Field.cpp:397 #, boost-format msgid "" @@ -6589,14 +6351,19 @@ msgstr "" msgid "Invalid numeric input." msgstr "Entrée numérique non valide." -#: src/libslic3r/miniz_extension.cpp:137 -msgid "invalid parameter" -msgstr "paramètre non valide" - #: src/slic3r/GUI/ConfigManipulation.cpp:342 msgid "Invalid pinhead diameter" msgstr "Diamètre de tête d'épingle non valide" +#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 +#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 +#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 +#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 +#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 +#: src/libslic3r/PrintConfig.cpp:1577 +msgid "Ironing" +msgstr "Lissage" + #: resources/data/hints.ini: [hint:Ironing] msgid "" "Ironing\n" @@ -6612,32 +6379,14 @@ msgstr "" "tout plastique soulevé. Lire la suite dans la documentation. (Nécessite le " "mode Avancé ou Expert.)" -#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 -#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 -#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 -#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 -#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 -#: src/libslic3r/PrintConfig.cpp:1577 -msgid "Ironing" -msgstr "Lissage" - #: src/libslic3r/PrintConfig.cpp:1542 src/libslic3r/PrintConfig.cpp:1544 msgid "Ironing Type" msgstr "Type de lissage" -#: src/slic3r/GUI/GUI_App.cpp:266 -msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." -msgstr "est basé sur Slic3r par Alessandro Ranellucci et la communauté RepRap." - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:588 msgid "Is it safe?" msgstr "Is it safe?" -#. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 -msgid "is licensed under the" -msgstr "est sous licence" - #: src/slic3r/GUI/MainFrame.cpp:1114 msgid "Iso" msgstr "Isométrique" @@ -6699,15 +6448,6 @@ msgstr "Gigue" msgid "Jump to height" msgstr "Sauter à la hauteur" -#: src/slic3r/GUI/DoubleSlider.cpp:1391 -#, c-format, boost-format -msgid "" -"Jump to height %s\n" -"or Set ruler mode" -msgstr "" -"Sauter à la hauteur %s\n" -"ou Définir le mode règle" - #: src/slic3r/GUI/DoubleSlider.cpp:1388 #, c-format, boost-format msgid "" @@ -6719,6 +6459,15 @@ msgstr "" "Définir le mode règle\n" "ou Définir la séquence d'extrusion pour toute l'impression" +#: src/slic3r/GUI/DoubleSlider.cpp:1391 +#, c-format, boost-format +msgid "" +"Jump to height %s\n" +"or Set ruler mode" +msgstr "" +"Sauter à la hauteur %s\n" +"ou Définir le mode règle" + #: src/slic3r/GUI/DoubleSlider.cpp:1385 src/slic3r/GUI/DoubleSlider.cpp:2254 msgid "Jump to move" msgstr "Sauter pour bouger" @@ -6761,9 +6510,25 @@ msgstr "Raccourcis Clavier" msgid "Keyboard shortcuts" msgstr "Raccourcis clavier" -#: src/libslic3r/PrintConfig.cpp:3281 -msgid "kg" -msgstr "kg" +#: src/slic3r/GUI/Tab.cpp:4253 +msgid "LOCKED LOCK" +msgstr "CADENAS FERMÉ" + +#: src/slic3r/GUI/Tab.cpp:4281 +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 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:4297 +msgid "" +"LOCKED LOCK icon indicates that the value is the same as the system (or " +"default) value." +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:1353 msgid "Label objects" @@ -6818,23 +6583,11 @@ msgstr "Limites de hauteur de couche" msgid "Layer range Settings to modify" msgstr "Réglages de zone de Couche à modifier" -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 -#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 -#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 -#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 -#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 -msgid "layers" -msgstr "couches" - #: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4500 #: src/slic3r/GUI/Tab.cpp:4591 msgid "Layers" msgstr "Couches" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 -msgid "Layers and perimeters" -msgstr "Couches et périmètres" - #: src/slic3r/GUI/GUI_Factories.cpp:54 src/slic3r/GUI/GUI_Factories.cpp:127 #: src/libslic3r/PrintConfig.cpp:264 src/libslic3r/PrintConfig.cpp:381 #: src/libslic3r/PrintConfig.cpp:424 src/libslic3r/PrintConfig.cpp:433 @@ -6848,15 +6601,9 @@ msgstr "Couches et périmètres" msgid "Layers and Perimeters" msgstr "Couches et Périmètres" -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Bottom" -msgstr "Du bas" - -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Top" -msgstr "Du haut" +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 +msgid "Layers and perimeters" +msgstr "Couches et périmètres" #: src/slic3r/GUI/Preferences.cpp:763 msgid "Layout Options" @@ -6871,6 +6618,14 @@ msgstr "Conserver \"%1%\" activé" msgid "Left" msgstr "Gauche" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +msgid "Left Preset Value" +msgstr "Valeur du Préréglage gauche" + +#: src/slic3r/GUI/MainFrame.cpp:1127 +msgid "Left View" +msgstr "Vue Gauche" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 @@ -6887,14 +6642,6 @@ msgstr "Bouton gauche de la souris" msgid "Left mouse button:" msgstr "Bouton gauche de souris :" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 -msgid "Left Preset Value" -msgstr "Valeur du Préréglage gauche" - -#: src/slic3r/GUI/MainFrame.cpp:1127 -msgid "Left View" -msgstr "Vue Gauche" - #: src/slic3r/GUI/GUI_Preview.cpp:1060 msgid "Legend/Estimated printing time" msgstr "Légende/Temps d'impression estimé" @@ -6922,6 +6669,10 @@ msgstr "" "Les contrats de licence de tous les programmes suivants (bibliothèques) font " "partie de la mise en oeuvre du contrat de licence" +#: src/libslic3r/PrintConfig.cpp:2153 +msgid "Lift Z" +msgstr "Levage de l'axe Z" + #: src/libslic3r/PrintConfig.cpp:4358 msgid "" "Lift the object above the bed when it is partially below. Enabled by " @@ -6930,10 +6681,6 @@ msgstr "" "Soulevez l'objet au-dessus du plateau lorsqu'il est partiellement en " "dessous. Activé par défaut, utilisez --no-ensure-on-bed pour désactiver." -#: src/libslic3r/PrintConfig.cpp:2153 -msgid "Lift Z" -msgstr "Levage de l'axe Z" - #: src/libslic3r/PrintConfig.cpp:1161 msgid "Lightning" msgstr "Lightning" @@ -6950,18 +6697,42 @@ msgstr "Ligne" msgid "Load" msgstr "Charger" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 +msgid "Load Config from ini/amf/3mf/gcode and merge" +msgstr "Charger une configuration à partir d'un ini/amf/3mf/gcode et fusionner" + +#: src/slic3r/GUI/Plater.cpp:5408 +msgid "Load File" +msgstr "Charger le Fichier" + +#: src/slic3r/GUI/Plater.cpp:5413 +msgid "Load Files" +msgstr "Charger les Fichiers" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Modifier" +msgstr "Charger le Modificateur" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Part" +msgstr "Charger une Partie" + +#: src/slic3r/GUI/Plater.cpp:5100 +msgid "Load Project" +msgstr "Charger le Projet" + #: src/slic3r/GUI/MainFrame.cpp:1201 msgid "Load a model" msgstr "Charger un modèle" -#: src/slic3r/GUI/MainFrame.cpp:1205 -msgid "Load an model saved with imperial units" -msgstr "Charger un modèle enregistré avec des unités impériales" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Load an SL1 / Sl1S archive" msgstr "Charger une archive SL1 / SL1S" +#: src/slic3r/GUI/MainFrame.cpp:1205 +msgid "Load an model saved with imperial units" +msgstr "Charger un modèle enregistré avec des unités impériales" + #: src/libslic3r/PrintConfig.cpp:4454 msgid "" "Load and store settings at the given directory. This is useful for " @@ -6991,10 +6762,6 @@ msgstr "" "Importer-Importer archive SL1 / SL1S, qui vous permet également de " "reconstruire des modèles 3D à partir des données voxel." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 -msgid "Load Config from ini/amf/3mf/gcode and merge" -msgstr "Charger une configuration à partir d'un ini/amf/3mf/gcode et fusionner" - #: src/slic3r/GUI/MainFrame.cpp:1217 msgid "Load configuration from project file" msgstr "Charger la configuration depuis le fichier du projet" @@ -7011,30 +6778,10 @@ msgstr "" msgid "Load exported configuration file" msgstr "Charger le fichier de configuration exporté" -#: src/slic3r/GUI/Plater.cpp:5408 -msgid "Load File" -msgstr "Charger le Fichier" - -#: src/slic3r/GUI/Plater.cpp:5413 -msgid "Load Files" -msgstr "Charger les Fichiers" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Modifier" -msgstr "Charger le Modificateur" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Part" -msgstr "Charger une Partie" - #: src/slic3r/GUI/MainFrame.cpp:1221 msgid "Load presets from a bundle" msgstr "Charger les préréglages à partir d'un lot" -#: src/slic3r/GUI/Plater.cpp:5100 -msgid "Load Project" -msgstr "Charger le Projet" - #: src/slic3r/GUI/BedShapeDialog.cpp:203 msgid "Load shape from STL..." msgstr "Charger une forme depuis un STL..." @@ -7043,10 +6790,6 @@ msgstr "Charger une forme depuis un STL..." msgid "Load..." msgstr "Charger..." -#: src/slic3r/GUI/WipeTowerDialog.cpp:309 -msgid "loaded" -msgstr "chargé" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1509 src/slic3r/GUI/Plater.cpp:2379 msgid "Loading" msgstr "Chargement" @@ -7111,26 +6854,6 @@ msgstr "Coordonnées locaux" msgid "Lock supports under new islands" msgstr "Verrouiller les supports sous de nouveaux îlots" -#: src/slic3r/GUI/Tab.cpp:4253 -msgid "LOCKED LOCK" -msgstr "CADENAS FERMÉ" - -#: src/slic3r/GUI/Tab.cpp:4281 -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 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:4297 -msgid "" -"LOCKED LOCK icon indicates that the value is the same as the system (or " -"default) value." -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:4457 msgid "Logging level" msgstr "Niveau d'enregistrement" @@ -7164,13 +6887,6 @@ msgstr "" "Les limites de la machine ne sont pas définies, par conséquent l'estimation " "du temps d'impression peut ne pas être précise." -#: src/slic3r/GUI/Tab.cpp:4224 -msgid "" -"Machine limits will be emitted to G-code and used to estimate print time." -msgstr "" -"Les limites de la machine seront émises dans le G-code et utilisées pour " -"estimer le temps d'impression." - #: src/slic3r/GUI/Tab.cpp:4227 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " @@ -7182,6 +6898,13 @@ msgstr "" "être précis car l'imprimante peut appliquer un ensemble différent de limites " "de la machine." +#: src/slic3r/GUI/Tab.cpp:4224 +msgid "" +"Machine limits will be emitted to G-code and used to estimate print time." +msgstr "" +"Les limites de la machine seront émises dans le G-code et utilisées pour " +"estimer le temps d'impression." + #: src/libslic3r/GCode.cpp:576 msgid "" "Make sure the object is printable. This is usually caused by negligibly " @@ -7213,10 +6936,6 @@ msgstr "Onglet Réglage&s Matériau" msgid "Material" msgstr "Matériau" -#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 -msgid "Material printing profile" -msgstr "Profil d'impression du matériau" - #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 #: src/slic3r/GUI/Tab.hpp:522 @@ -7227,6 +6946,10 @@ msgstr "Réglages Matériau" msgid "Material Settings Tab" msgstr "Onglet de réglages du matériau" +#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 +msgid "Material printing profile" +msgstr "Profil d'impression du matériau" + #: src/libslic3r/PrintConfig.cpp:1749 src/libslic3r/PrintConfig.cpp:1758 msgid "Max" msgstr "Maximum" @@ -7255,10 +6978,6 @@ msgstr "Hauteur maximale d'impression" msgid "Max print speed" msgstr "Vitesse d'impression maximale" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 -msgid "max PrusaSlicer version" -msgstr "Version maximum de PrusaSlicer" - #: src/libslic3r/PrintConfig.cpp:1800 msgid "Max volumetric slope negative" msgstr "Pente volumétrique négative maximum" @@ -7284,6 +7003,18 @@ msgstr "" msgid "Maximum acceleration E" msgstr "Accélérations maximum E" +#: src/libslic3r/PrintConfig.cpp:1661 +msgid "Maximum acceleration X" +msgstr "Accélérations maximum X" + +#: src/libslic3r/PrintConfig.cpp:1662 +msgid "Maximum acceleration Y" +msgstr "Accélérations maximum Y" + +#: src/libslic3r/PrintConfig.cpp:1663 +msgid "Maximum acceleration Z" +msgstr "Accélérations maximum Z" + #: src/libslic3r/PrintConfig.cpp:1740 msgid "Maximum acceleration for travel moves" msgstr "Accélération maximale pour les déplacements" @@ -7332,18 +7063,6 @@ msgstr "Accélération maximum lors de la rétraction" msgid "Maximum acceleration when retracting (M204 R)" msgstr "Accélération maximale lors de la rétraction (M204 R)" -#: src/libslic3r/PrintConfig.cpp:1661 -msgid "Maximum acceleration X" -msgstr "Accélérations maximum X" - -#: src/libslic3r/PrintConfig.cpp:1662 -msgid "Maximum acceleration Y" -msgstr "Accélérations maximum Y" - -#: src/libslic3r/PrintConfig.cpp:1663 -msgid "Maximum acceleration Z" -msgstr "Accélérations maximum Z" - #: src/slic3r/GUI/Tab.cpp:2655 msgid "Maximum accelerations" msgstr "Accélérations maximum" @@ -7375,6 +7094,18 @@ msgstr "Temps d'exposition maximum" msgid "Maximum feedrate E" msgstr "Vitesse d'avance maximum en E" +#: src/libslic3r/PrintConfig.cpp:1644 +msgid "Maximum feedrate X" +msgstr "Vitesse d'avance maximum en X" + +#: src/libslic3r/PrintConfig.cpp:1645 +msgid "Maximum feedrate Y" +msgstr "Vitesse d'avance maximum en Y" + +#: src/libslic3r/PrintConfig.cpp:1646 +msgid "Maximum feedrate Z" +msgstr "Vitesse d'avance maximum en Z" + #: src/libslic3r/PrintConfig.cpp:1653 msgid "Maximum feedrate of the E axis" msgstr "Vitesse d'avance maximum de l'axe E" @@ -7391,18 +7122,6 @@ msgstr "Vitesse d'avance maximum de l'axe Y" msgid "Maximum feedrate of the Z axis" msgstr "Vitesse d'avance maximum de l'axe Z" -#: src/libslic3r/PrintConfig.cpp:1644 -msgid "Maximum feedrate X" -msgstr "Vitesse d'avance maximum en X" - -#: src/libslic3r/PrintConfig.cpp:1645 -msgid "Maximum feedrate Y" -msgstr "Vitesse d'avance maximum en Y" - -#: src/libslic3r/PrintConfig.cpp:1646 -msgid "Maximum feedrate Z" -msgstr "Vitesse d'avance maximum en Z" - #: src/slic3r/GUI/Tab.cpp:2650 msgid "Maximum feedrates" msgstr "Vitesses d'avance maximum" @@ -7415,6 +7134,18 @@ msgstr "Temps d'exposition initiale Maximum" msgid "Maximum jerk E" msgstr "Mouvement brusque maximum E" +#: src/libslic3r/PrintConfig.cpp:1678 +msgid "Maximum jerk X" +msgstr "Mouvement brusque maximum X" + +#: src/libslic3r/PrintConfig.cpp:1679 +msgid "Maximum jerk Y" +msgstr "Mouvement brusque maximum Y" + +#: src/libslic3r/PrintConfig.cpp:1680 +msgid "Maximum jerk Z" +msgstr "Mouvement brusque maximum Z" + #: src/libslic3r/PrintConfig.cpp:1687 msgid "Maximum jerk of the E axis" msgstr "Mouvement brusque maximum de l'axe E" @@ -7431,18 +7162,6 @@ msgstr "Mouvement brusque maximum de l'axe Y" msgid "Maximum jerk of the Z axis" msgstr "Mouvement brusque maximum de l'axe Z" -#: src/libslic3r/PrintConfig.cpp:1678 -msgid "Maximum jerk X" -msgstr "Mouvement brusque maximum X" - -#: src/libslic3r/PrintConfig.cpp:1679 -msgid "Maximum jerk Y" -msgstr "Mouvement brusque maximum Y" - -#: src/libslic3r/PrintConfig.cpp:1680 -msgid "Maximum jerk Z" -msgstr "Mouvement brusque maximum Z" - #: src/libslic3r/PrintConfig.cpp:1423 msgid "Maximum length of the infill anchor" msgstr "Longueur maximum de l'ancre de remplissage" @@ -7538,10 +7257,6 @@ msgstr "Minimum" msgid "Min print speed" msgstr "Vitesse d'impression minimale" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 -msgid "min PrusaSlicer version" -msgstr "Version minimum de PrusaSlicer" - #: src/libslic3r/PrintConfig.cpp:3597 msgid "Minimal distance of the support points" msgstr "Distance minimale des points de support" @@ -7604,6 +7319,10 @@ msgstr "Vitesses d'avance minimum" msgid "Minimum initial exposure time" msgstr "Temps d'exposition initiale minimum" +#: src/slic3r/GUI/Tab.cpp:1475 +msgid "Minimum shell thickness" +msgstr "Épaisseur de coque minimale" + #: resources/data/hints.ini: [hint:Minimum shell thickness] msgid "" "Minimum shell thickness\n" @@ -7617,10 +7336,6 @@ msgstr "" "Cette fonctionnalité est particulièrement utile lorsque vous utilisez la " "fonction de hauteur de couche variable." -#: src/slic3r/GUI/Tab.cpp:1475 -msgid "Minimum shell thickness" -msgstr "Épaisseur de coque minimale" - #: src/libslic3r/PrintConfig.cpp:2374 src/libslic3r/PrintConfig.cpp:2375 msgid "Minimum thickness of a top / bottom shell" msgstr "Épaisseur minimale d'une coque supérieure/inférieure" @@ -7657,6 +7372,10 @@ msgstr "" "Largeur minimum des caractéristiques à maintenir lorsque vous pratiquez une " "compensation de pied d'éléphant." +#: src/slic3r/GUI/GUI_Factories.cpp:885 +msgid "Mirror" +msgstr "Symétrie" + #: resources/data/hints.ini: [hint:Mirror] msgid "" "Mirror\n" @@ -7668,18 +7387,14 @@ msgstr "" "créer une version inversée ? Cliquez avec le bouton droit sur le modèle, " "sélectionnez Miroir et choisissez l'axe du miroir." -#: src/slic3r/GUI/GUI_Factories.cpp:885 -msgid "Mirror" -msgstr "Symétrie" +#: src/slic3r/GUI/GLCanvas3D.cpp:1684 +msgid "Mirror Object" +msgstr "Symétriser l'Objet" #: src/libslic3r/PrintConfig.cpp:3131 msgid "Mirror horizontally" msgstr "Symétriser horizontalement" -#: src/slic3r/GUI/GLCanvas3D.cpp:1684 -msgid "Mirror Object" -msgstr "Symétriser l'Objet" - #: src/slic3r/GUI/GUI_Factories.cpp:885 msgid "Mirror the selected object" msgstr "Symétriser l'objet sélectionné" @@ -7710,133 +7425,10 @@ msgstr "Mauvais appariement de l'hôte d'impression : %s" msgid "Mixed" msgstr "Mélangé" -#: src/libslic3r/PrintConfig.cpp:3274 -msgid "ml" -msgstr "ml" - -#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 -#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 -#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 -#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 -#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 -#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 -#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 -#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 -#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 -#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 -#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 -#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 -#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 -#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 -#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 -#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 -#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 -#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 -#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 -#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 -#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 -#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 -#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 -#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 -#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 -#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 -#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 -#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 -#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 -#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 -#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 -#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 -#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 -#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 -#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 -#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 -#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 -#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 -#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 -#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 -#: src/libslic3r/PrintConfig.cpp:3767 -msgid "mm" -msgstr "mm" - -#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 -#: src/libslic3r/PrintConfig.cpp:2148 -msgid "mm (zero to disable)" -msgstr "mm (zéro pour désactiver)" - -#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 -#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 -#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 -#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 -#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 -#: src/libslic3r/PrintConfig.cpp:2845 -msgid "mm or %" -msgstr "mm ou %" - -#: src/libslic3r/PrintConfig.cpp:385 -msgid "mm or % (zero to disable)" -msgstr "mm ou % (zéro pour désactiver)" - -#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 -#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 -#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 -#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 -#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 -#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 -#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 -#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 -#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 -#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 -#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 -msgid "mm/s" -msgstr "mm/s" - -#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 -#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 -#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 -#: src/libslic3r/PrintConfig.cpp:2859 -msgid "mm/s or %" -msgstr "mm/s ou %" - -#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 -#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 -#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 -#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 -#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 -msgid "mm/s²" -msgstr "mm/s²" - -#: src/libslic3r/PrintConfig.cpp:2316 -msgid "mm²" -msgstr "mm²" - -#: src/libslic3r/PrintConfig.cpp:957 -msgid "mm³" -msgstr "mm³" - -#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 -#: src/libslic3r/PrintConfig.cpp:1782 -msgid "mm³/s" -msgstr "mm³/s" - -#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 -msgid "mm³/s²" -msgstr "mm³/s²" - #: src/slic3r/GUI/GUI_App.cpp:2245 msgid "Mode" msgstr "&Mode" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "model" -msgstr "modèle" - #: src/slic3r/GUI/BedShapeDialog.cpp:344 msgid "Model" msgstr "Modèle" @@ -7849,19 +7441,10 @@ msgstr "Réparation du modèle annulée" msgid "Model repair finished" msgstr "Réparation du modèle terminée" -#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 -msgctxt "Mode" -msgid "Advanced" -msgstr "Avancé" - #: src/slic3r/GUI/Tab.cpp:1319 msgid "Modifications to the current profile will be saved." msgstr "Les modifications du profil actuel vont être sauvegardées." -#: src/slic3r/GUI/GUI_App.cpp:2159 -msgid "modified" -msgstr "modifié" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Modifier" msgstr "Modificateur" @@ -7870,14 +7453,6 @@ msgstr "Modificateur" msgid "Modifiers" msgstr "Modificateurs" -#: src/libslic3r/PrintConfig.cpp:3295 -msgid "money/bottle" -msgstr "prix/bouteille" - -#: src/libslic3r/PrintConfig.cpp:1047 -msgid "money/kg" -msgstr "argent/kg" - #: src/libslic3r/PrintConfig.cpp:705 msgid "Monotonic" msgstr "Monotone" @@ -7909,6 +7484,10 @@ msgstr "Roulette de la souris:" msgid "Move" msgstr "Déplacer" +#: src/slic3r/GUI/GLCanvas3D.cpp:3245 +msgid "Move Object" +msgstr "Déplacer l'Objet" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:234 msgid "Move active thumb Down" msgstr "Déplacer le curseur actif vers le Bas" @@ -7933,10 +7512,6 @@ msgstr "Déplacer le plan de coupe" msgid "Move drainage hole" msgstr "Déplacer le trou de drainage" -#: src/slic3r/GUI/GLCanvas3D.cpp:3245 -msgid "Move Object" -msgstr "Déplacer l'Objet" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 msgid "Move point" msgstr "Déplacer le point" @@ -8027,6 +7602,14 @@ msgstr "Multiplier les copies par ce facteur." msgid "N/A" msgstr "N/A" +#: src/slic3r/GUI/RammingChart.cpp:29 +msgid "NO RAMMING AT ALL" +msgstr "PAS D'EXPULSION DU TOUT" + +#: src/slic3r/GUI/GUI_Preview.cpp:728 +msgid "NOTE:" +msgstr "REMARQUE :" + #: src/slic3r/GUI/GUI_ObjectList.cpp:297 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:139 msgid "Name" @@ -8060,6 +7643,10 @@ msgstr "Noms des préréglages liés à l'imprimante physique" msgid "Nearest" msgstr "Le plus proche" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 +msgid "Negative Volume" +msgstr "Volume Négatif" + #: resources/data/hints.ini: [hint:Negative volume] msgid "" "Negative volume\n" @@ -8074,14 +7661,18 @@ msgstr "" "créer des trous facilement redimensionnables directement dans PrusaSlicer. " "Lire la suite dans la documentation. (Nécessite le mode Avancé ou Expert.)" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 -msgid "Negative Volume" -msgstr "Volume Négatif" - #: src/slic3r/GUI/BonjourDialog.cpp:55 msgid "Network lookup" msgstr "Recherche réseau" +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +msgid "New Project" +msgstr "Nouveau Projet" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +msgid "New Value" +msgstr "Nouvelle Valeur" + #: src/slic3r/GUI/Preferences.cpp:744 msgid "New layout, access via settings button in the top menu" msgstr "" @@ -8096,10 +7687,6 @@ msgstr "La nouvelle version préliminaire %1% est disponible." msgid "New printer preset selected" msgstr "Nouveau préréglage d'imprimante sélectionné" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 -msgid "New Project" -msgstr "Nouveau Projet" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:77 msgid "New project, clear plater" msgstr "Nouveau projet, libérer le plateau" @@ -8109,10 +7696,6 @@ msgstr "Nouveau projet, libérer le plateau" msgid "New release version %1% is available." msgstr "La nouvelle version %1% est disponible." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 -msgid "New Value" -msgstr "Nouvelle Valeur" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 #, c-format, boost-format msgid "New version of %s is available" @@ -8165,10 +7748,6 @@ msgstr "" msgid "No previously sliced file." msgstr "Aucun fichier précédemment découpé." -#: src/slic3r/GUI/RammingChart.cpp:29 -msgid "NO RAMMING AT ALL" -msgstr "PAS D'EXPULSION DU TOUT" - #: src/libslic3r/PrintConfig.cpp:2471 msgid "No sparse layers (EXPERIMENTAL)" msgstr "Sans couches dispersées (EXPERIMENTAL)" @@ -8193,18 +7772,10 @@ msgstr "Aucun" msgid "Normal" msgstr "Normal" -#: src/slic3r/GUI/Plater.cpp:1428 -msgid "normal mode" -msgstr "mode normal" - #: src/slic3r/GUI/GCodeViewer.cpp:3754 msgid "Normal mode" msgstr "Mode normal" -#: src/libslic3r/miniz_extension.cpp:105 -msgid "not a ZIP archive" -msgstr "n'est pas une archive ZIP" - #: src/slic3r/GUI/BedShapeDialog.cpp:317 src/slic3r/GUI/BedShapeDialog.cpp:388 msgid "Not found:" msgstr "Introuvable:" @@ -8236,10 +7807,6 @@ msgstr[1] "" "Notez que ces imprimantes seront supprimées après la suppression du " "préréglage sélectionné." -#: src/slic3r/GUI/GUI_Preview.cpp:728 -msgid "NOTE:" -msgstr "REMARQUE :" - #: src/slic3r/GUI/Tab.cpp:2249 msgid "" "Note: All parameters from this group are moved to the Physical Printer " @@ -8284,15 +7851,15 @@ msgstr "" msgid "Note: Repetier version at least 0.90.0 is required." msgstr "Remarque : la version Repetier 0.90.0 est requise au minimum." +#: src/slic3r/GUI/SavePresetDialog.cpp:137 +msgid "Note: This preset will be replaced after saving" +msgstr "Remarque : ce préréglage sera remplacé après l'enregistrement" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1197 msgid "Note: some shortcuts work in (non)editing mode only." msgstr "" "Remarque: certains raccourcis ne fonctionnent qu'en mode de (non-)édition." -#: src/slic3r/GUI/SavePresetDialog.cpp:137 -msgid "Note: This preset will be replaced after saving" -msgstr "Remarque : ce préréglage sera remplacé après l'enregistrement" - #: src/slic3r/GUI/Tab.cpp:1716 src/slic3r/GUI/Tab.cpp:1717 #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 @@ -8311,14 +7878,14 @@ msgstr "Remarque" msgid "Notify about new releases" msgstr "Avertir des nouvelles versions" -#: src/slic3r/GUI/ConfigWizard.cpp:262 -msgid "nozzle" -msgstr "buse" - #: src/slic3r/GUI/Tab.cpp:1984 msgid "Nozzle" msgstr "Buse" +#: src/slic3r/GUI/ConfigWizard.cpp:1475 +msgid "Nozzle Diameter:" +msgstr "Diamètre de la Buse :" + #: src/slic3r/GUI/ConfigWizard.cpp:1547 msgid "Nozzle and Bed Temperatures" msgstr "Températures de la buse et du plateau" @@ -8328,10 +7895,6 @@ msgstr "Températures de la buse et du plateau" msgid "Nozzle diameter" msgstr "Diamètre de la buse" -#: src/slic3r/GUI/ConfigWizard.cpp:1475 -msgid "Nozzle Diameter:" -msgstr "Diamètre de la Buse :" - #: src/libslic3r/PrintConfig.cpp:2793 msgid "Nozzle temperature" msgstr "Température de la buse" @@ -8427,11 +7990,9 @@ msgstr "" msgid "Number of tool changes" msgstr "Nombre de changements d'outil" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "object" -msgid_plural "objects" -msgstr[0] "objet" -msgstr[1] "objets" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 +msgid "Object Settings to modify" +msgstr "Réglages de l'Objet à modifier" #: src/slic3r/GUI/Tab.cpp:4709 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" @@ -8458,10 +8019,6 @@ msgstr "Objet ou Instance" msgid "Object reordered" msgstr "Objet réorganisé" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 -msgid "Object Settings to modify" -msgstr "Réglages de l'Objet à modifier" - #: src/slic3r/GUI/Plater.cpp:2536 #, c-format, boost-format msgid "" @@ -8492,10 +8049,6 @@ msgstr "" "raccourcirait le temps d'impression. Par conséquent, les couleurs de l'objet " "seront mélangées." -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "objects" -msgstr "objets" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:201 msgid "Objects List" msgstr "Liste d'objets" @@ -8508,15 +8061,6 @@ msgstr "Spirale Octagramme" msgid "OctoPrint version" msgstr "Version d'OctoPrint" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 -msgid "of a current Object" -msgstr "d'un Objet en cours" - -#: src/slic3r/GUI/PrintHostDialogs.cpp:251 -msgctxt "OfFile" -msgid "Size" -msgstr "OfFile||Taille" - #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:32 msgid "Offset" msgstr "Décalage" @@ -8529,14 +8073,14 @@ msgstr "" "Décalage de la bordure de l'objet imprimé. Le décalage est appliqué après la " "compensation de l'effet patte d'éléphant." -#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 -msgid "Old regular layout with the tab bar" -msgstr "Ancienne disposition avec la barre d'onglets" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 msgid "Old Value" msgstr "Ancienne valeur" +#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 +msgid "Old regular layout with the tab bar" +msgstr "Ancienne disposition avec la barre d'onglets" + #: src/slic3r/GUI/Preferences.cpp:210 msgid "" "On OSX there is always only one instance of app running by default. However " @@ -8622,14 +8166,6 @@ msgstr "Lever Z seulement en-dessous de" msgid "Only retract when crossing perimeters" msgstr "Rétracter uniquement lors du franchissement de périmètres" -#: src/slic3r/GUI/ConfigWizard.cpp:778 -msgid "" -"Only the following installed printers are compatible with the selected " -"filaments" -msgstr "" -"Seules les imprimantes installées suivantes sont compatibles avec les " -"filaments sélectionnés" - #: src/slic3r/GUI/ConfigWizard.cpp:779 msgid "" "Only the following installed printers are compatible with the selected SLA " @@ -8638,6 +8174,14 @@ msgstr "" "Seules les imprimantes installées suivantes sont compatibles avec les " "matériaux SLA sélectionnés" +#: src/slic3r/GUI/ConfigWizard.cpp:778 +msgid "" +"Only the following installed printers are compatible with the selected " +"filaments" +msgstr "" +"Seules les imprimantes installées suivantes sont compatibles avec les " +"filaments sélectionnés" + #: src/slic3r/GUI/Tab.cpp:1630 msgid "Ooze prevention" msgstr "Prévention des coulures" @@ -8652,6 +8196,38 @@ msgstr "" msgid "Open &PrusaSlicer" msgstr "Ouvrir &PrusaSlicer" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 +msgid "Open CA certificate file" +msgstr "Ouvrir le fichier de certificat CA" + +#: src/slic3r/GUI/HintNotification.cpp:1000 +msgid "Open Documentation in web browser." +msgstr "Ouvrir la Documentation dans le navigateur web." + +#: src/slic3r/GUI/NotificationManager.cpp:664 +msgid "Open Folder." +msgstr "Ouvrir un répertoire." + +#: src/slic3r/Utils/Process.cpp:157 +msgid "Open G-code file:" +msgstr "Ouvrir un fichier G-code :" + +#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 +msgid "Open G-code viewer" +msgstr "Ouvrir la visionneuse de G-code" + +#: src/slic3r/GUI/MainFrame.cpp:1413 +msgid "Open New Instance" +msgstr "Ouvrir une Nouvelle Instance" + +#: src/slic3r/GUI/HintNotification.cpp:908 +msgid "Open Preferences." +msgstr "Ouvrir les Préférences." + +#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 +msgid "Open PrusaSlicer" +msgstr "Ouvrir PrusaSlicer" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:205 src/slic3r/GUI/MainFrame.cpp:1518 msgid "Open a G-code file" msgstr "Ouvrir un fichier G-code" @@ -8669,35 +8245,15 @@ msgstr "Ouvrir un fichier de projet" msgid "Open as project" msgstr "Ouvrir en tant que projet" -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 -msgid "Open CA certificate file" -msgstr "Ouvrir le fichier de certificat CA" - #: src/slic3r/GUI/UpdateDialogs.cpp:59 src/slic3r/GUI/UpdateDialogs.cpp:133 #: src/slic3r/GUI/UpdateDialogs.cpp:191 msgid "Open changelog page" msgstr "Ouvrir la page du journal des modifications" -#: src/slic3r/GUI/HintNotification.cpp:1000 -msgid "Open Documentation in web browser." -msgstr "Ouvrir la Documentation dans le navigateur web." - #: src/slic3r/GUI/UpdateDialogs.cpp:65 msgid "Open download page" msgstr "Ouvrir la page de téléchargement" -#: src/slic3r/GUI/NotificationManager.cpp:664 -msgid "Open Folder." -msgstr "Ouvrir un répertoire." - -#: src/slic3r/Utils/Process.cpp:157 -msgid "Open G-code file:" -msgstr "Ouvrir un fichier G-code :" - -#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 -msgid "Open G-code viewer" -msgstr "Ouvrir la visionneuse de G-code" - #: src/slic3r/GUI/GUI_App.cpp:3067 src/slic3r/GUI/GUI_App.cpp:3090 msgid "Open hyperlink in default browser?" msgstr "Ouvrir le lien hypertexte dans le navigateur par défaut ?" @@ -8710,37 +8266,25 @@ msgstr "Ouvrir une nouvelle visionneuse de G-code" msgid "Open new instance" msgstr "Ouvrir une nouvelle instance" -#: src/slic3r/GUI/MainFrame.cpp:1413 -msgid "Open New Instance" -msgstr "Ouvrir une Nouvelle Instance" - -#: src/slic3r/GUI/HintNotification.cpp:908 -msgid "Open Preferences." -msgstr "Ouvrir les Préférences." - #: src/slic3r/GUI/KBShortcutsDialog.cpp:78 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater" msgstr "" "Ouvrir un projet STL/OBJ/AMF/3MF avec configuration, libérer le plateau" -#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 -msgid "Open PrusaSlicer" -msgstr "Ouvrir PrusaSlicer" - #: src/slic3r/GUI/MainFrame.cpp:1079 #, c-format, boost-format msgid "Open the %s website in your browser" msgstr "Ouvrir le site web de %s dans votre navigateur" -#: src/slic3r/GUI/MainFrame.cpp:1397 -msgid "Open the dialog to modify shape gallery" -msgstr "Ouvrir la boîte de dialogue pour modifier la galerie de formes" - #: src/slic3r/GUI/MainFrame.cpp:1070 msgid "Open the Prusa3D drivers download page in your browser" msgstr "" "Ouvrir la page de téléchargement des drivers Prusa3D dans votre navigateur" +#: src/slic3r/GUI/MainFrame.cpp:1397 +msgid "Open the dialog to modify shape gallery" +msgstr "Ouvrir la boîte de dialogue pour modifier la galerie de formes" + #: src/slic3r/GUI/MainFrame.cpp:1072 msgid "Open the software releases page in your browser" msgstr "Ouvrir la page des publications du logiciel dans votre navigateur" @@ -8767,6 +8311,10 @@ msgstr "" msgid "Operation already cancelling. Please wait few seconds." msgstr "Opération déjà annulée. Veuillez patienter quelques secondes." +#: src/slic3r/GUI/Plater.cpp:1678 +msgid "Optimize Rotation" +msgstr "Optimiser la Rotation" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:23 msgid "Optimize object rotation for best surface quality." msgstr "Optimise la rotation des objets pour une meilleure qualité de surface." @@ -8787,10 +8335,6 @@ msgstr "" msgid "Optimize orientation" msgstr "Optimiser l'orientation" -#: src/slic3r/GUI/Plater.cpp:1678 -msgid "Optimize Rotation" -msgstr "Optimiser la Rotation" - #: src/libslic3r/PrintConfig.cpp:373 msgid "" "Optimize travel moves in order to minimize the crossing of perimeters. This " @@ -8815,10 +8359,6 @@ msgstr "Options pour le matériau de support et le radeau" msgid "Options:" msgstr "Options :" -#: src/slic3r/GUI/DoubleSlider.cpp:1431 -msgid "or press \"+\" key" -msgstr "ou appuyez sur la touche \"+\"" - #: src/slic3r/GUI/Preferences.cpp:399 msgid "Order object volumes by types" msgstr "Trier les volumes d'objets par types" @@ -8839,14 +8379,14 @@ msgstr "Origine" msgid "Other" msgstr "Autre" -#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 -msgid "Other layers" -msgstr "Autres couches" - #: src/slic3r/GUI/ConfigWizard.cpp:1322 msgid "Other Vendors" msgstr "Autres Fabriquants" +#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 +msgid "Other layers" +msgstr "Autres couches" + #: src/libslic3r/PrintConfig.cpp:515 msgid "Outer and inner brim" msgstr "Bordure extérieure et intérieure" @@ -8855,22 +8395,22 @@ msgstr "Bordure extérieure et intérieure" msgid "Outer brim only" msgstr "Bordure extérieur uniquement" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 -msgid "Output file" -msgstr "Fichier de sortie" - #: src/libslic3r/PrintConfig.cpp:4436 msgid "Output File" msgstr "Fichier de Sortie" -#: src/libslic3r/PrintConfig.cpp:1902 -msgid "Output filename format" -msgstr "Format du nom de fichier de sortie" - #: src/libslic3r/PrintConfig.cpp:4305 msgid "Output Model Info" msgstr "Information du Modèle de Sortie" +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 +msgid "Output file" +msgstr "Fichier de sortie" + +#: src/libslic3r/PrintConfig.cpp:1902 +msgid "Output filename format" +msgstr "Format du nom de fichier de sortie" + #: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4666 msgid "Output options" msgstr "Options de sortie" @@ -8983,6 +8523,10 @@ msgstr "" "antihoraire en appuyant respectivement sur Page Précédente ou Page " "Suivante ?" +#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 +msgid "Paint-on seam" +msgstr "Jointure peinte" + #: resources/data/hints.ini: [hint:Paint-on seam] msgid "" "Paint-on seam\n" @@ -8996,9 +8540,10 @@ msgstr "" "Essayez la fonction de Jointure peinte. (Nécessite le mode Avancé ou " "Expert.)" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 -msgid "Paint-on seam" -msgstr "Jointure peinte" +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 +msgid "Paint-on supports" +msgstr "Supports peints" #: resources/data/hints.ini: [hint:Paint-on supports] msgid "" @@ -9012,11 +8557,6 @@ msgstr "" "les zones où les supports doivent être appliqués ou bloqués ? Essayez la " "fonction de supports peints. (Nécessite le mode Avancé ou Expert.)" -#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 -msgid "Paint-on supports" -msgstr "Supports peints" - #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:674 #, boost-format msgid "Painted using: Extruder %1%" @@ -9051,10 +8591,6 @@ msgstr "" msgid "Paints only one facet." msgstr "Ne peint qu'une facette." -#: src/slic3r/GUI/Field.cpp:193 -msgid "parameter name" -msgstr "nom du paramètre" - #: src/slic3r/GUI/Field.cpp:269 src/slic3r/GUI/Field.cpp:343 msgid "Parameter validation" msgstr "Validation du paramètre" @@ -9075,14 +8611,14 @@ msgstr "" msgid "Part" msgstr "Pièce" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 -msgid "Part manipulation" -msgstr "Manipulation d'une pièce" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2481 msgid "Part Settings to modify" msgstr "Réglages de la pièce à modifier" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 +msgid "Part manipulation" +msgstr "Manipulation d'une pièce" + #: src/libslic3r/PrintConfig.cpp:324 msgid "Password" msgstr "Mot de passe" @@ -9091,6 +8627,10 @@ msgstr "Mot de passe" msgid "Paste" msgstr "Coller" +#: src/slic3r/GUI/Plater.cpp:6640 +msgid "Paste From Clipboard" +msgstr "Coller Depuis le Presse-Papier" + #: src/slic3r/GUI/MainFrame.cpp:1346 msgid "Paste clipboard" msgstr "Coller le presse-papier" @@ -9099,10 +8639,6 @@ msgstr "Coller le presse-papier" msgid "Paste from clipboard" msgstr "Coller depuis le presse-papier" -#: src/slic3r/GUI/Plater.cpp:6640 -msgid "Paste From Clipboard" -msgstr "Coller Depuis le Presse-Papier" - #: src/libslic3r/PrintConfig.cpp:2697 msgid "Pattern" msgstr "Motif" @@ -9133,16 +8669,16 @@ msgstr "Motif utilisé pour générer les supports." msgid "Pause" msgstr "Pause" -#: src/slic3r/GUI/DoubleSlider.cpp:1469 -#, boost-format -msgid "Pause print (\"%1%\")" -msgstr "Mettre en pause l'impression (\"%1%\")" - #: src/slic3r/GUI/Tab.cpp:2471 src/libslic3r/GCode.cpp:714 #: src/libslic3r/PrintConfig.cpp:2441 msgid "Pause Print G-code" msgstr "G-code de pause de l'impression" +#: src/slic3r/GUI/DoubleSlider.cpp:1469 +#, boost-format +msgid "Pause print (\"%1%\")" +msgstr "Mettre en pause l'impression (\"%1%\")" + #: src/libslic3r/PrintConfig.cpp:1558 msgid "Percent of a flow rate relative to object's normal layer height." msgstr "" @@ -9177,6 +8713,10 @@ msgstr "" "Performance vs précision du calcul. Des valeurs plus faibles peuvent " "produire des artefacts indésirables." +#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 +msgid "Performing desktop integration failed - Could not find executable." +msgstr "L'intégration au bureau a échoué - Impossible de trouver l'exécutable." + #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:232 msgid "" "Performing desktop integration failed - boost::filesystem::canonical did not " @@ -9194,10 +8734,6 @@ msgstr "" "Gcodeviewer. Le fichier PrusaSlicer sur le bureau a probablement été créé " "avec succès." -#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 -msgid "Performing desktop integration failed - Could not find executable." -msgstr "L'intégration au bureau a échoué - Impossible de trouver l'exécutable." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:378 msgid "" "Performing desktop integration failed because the application directory was " @@ -9215,10 +8751,6 @@ msgstr "Périmètre" msgid "Perimeter extruder" msgstr "Extrudeur pour les périmètres" -#: src/slic3r/GUI/PresetHints.cpp:171 -msgid "perimeters" -msgstr "périmètres" - #: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1955 #: src/libslic3r/PrintConfig.cpp:1969 src/libslic3r/PrintConfig.cpp:1979 msgid "Perimeters" @@ -9297,6 +8829,10 @@ msgstr "Largeur de la tête d'épingle" msgid "Place bearings in slots and resume printing" msgstr "Placer les roulements dans les fentes et reprendre l'impression" +#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 +msgid "Place on face" +msgstr "Positionner sur la surface" + #: resources/data/hints.ini: [hint:Place on face] msgid "" "Place on face\n" @@ -9309,10 +8845,6 @@ msgstr "" "faces repose sur le plateau d'impression ? Sélectionnez la fonction " "Placer sur une face ou appuyez sur la touche F." -#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 -msgid "Place on face" -msgstr "Positionner sur la surface" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:181 src/slic3r/GUI/MainFrame.cpp:284 #: src/slic3r/GUI/MainFrame.cpp:333 src/slic3r/GUI/MainFrame.cpp:445 #: src/slic3r/GUI/MainFrame.cpp:448 src/slic3r/GUI/MainFrame.cpp:470 @@ -9355,10 +8887,6 @@ msgstr "Position" msgid "Position (for multi-extruder printers)" msgstr "Position (pour les imprimantes multi-extrudeurs)" -#: src/libslic3r/PrintConfig.cpp:2215 -msgid "Position of perimeters starting points." -msgstr "Position des points de départ des périmètres." - #: src/libslic3r/PrintConfig.cpp:2968 msgid "Position X" msgstr "Position X" @@ -9367,6 +8895,10 @@ msgstr "Position X" msgid "Position Y" msgstr "Position Y" +#: src/libslic3r/PrintConfig.cpp:2215 +msgid "Position of perimeters starting points." +msgstr "Position des points de départ des périmètres." + #: src/slic3r/GUI/Tab.cpp:1763 msgid "Post processing scripts shall modify G-code file in place." msgstr "" @@ -9470,11 +9002,6 @@ msgstr "" msgid "Preset with name \"%1%\" already exists." msgstr "Un préréglage avec le nom \"%1%\" existe déjà." -#: src/slic3r/GUI/SavePresetDialog.cpp:221 -msgctxt "PresetName" -msgid "Copy" -msgstr "Copie" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 msgid "" "Presets are different.\n" @@ -9538,10 +9065,6 @@ msgstr "Fichier précédemment découpé (" msgid "Prime all printing extruders" msgstr "Préparer tous les extrudeurs d'impression" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 -msgid "print" -msgstr "imprimer" - #: src/slic3r/GUI/GCodeViewer.cpp:3506 src/slic3r/GUI/GCodeViewer.cpp:3541 msgid "Print" msgstr "Imprimer" @@ -9550,14 +9073,6 @@ msgstr "Imprimer" msgid "Print &Host Upload Queue" msgstr "File d'Attente de Téléchargement de l'&Hôte d'Impression" -#: src/libslic3r/PrintConfig.cpp:753 -msgid "" -"Print contour perimeters from the outermost one to the innermost one instead " -"of the default inverse order." -msgstr "" -"Imprimer les périmètres de l'extérieur vers l'intérieur au lieu de l'ordre " -"par défaut qui est inversé." - #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Print Diameters" msgstr "Diamètres d'Impression" @@ -9566,6 +9081,23 @@ msgstr "Diamètres d'Impression" msgid "Print Host upload" msgstr "Téléchargement de l'Hôte d'Impression" +#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 +#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +msgid "Print Settings" +msgstr "Réglages d'Impression" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 +msgid "Print Settings Tab" +msgstr "Onglet Réglages d'impression" + +#: src/libslic3r/PrintConfig.cpp:753 +msgid "" +"Print contour perimeters from the outermost one to the innermost one instead " +"of the default inverse order." +msgstr "" +"Imprimer les périmètres de l'extérieur vers l'intérieur au lieu de l'ordre " +"par défaut qui est inversé." + #: src/slic3r/GUI/KBShortcutsDialog.cpp:114 #: src/slic3r/GUI/PrintHostDialogs.cpp:217 msgid "Print host upload queue" @@ -9579,20 +9111,11 @@ msgstr "Mode d'impression" msgid "Print pauses" msgstr "Pauses d'impression" -#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 -msgid "Print Settings" -msgstr "Réglages d'Impression" - #: src/slic3r/GUI/GCodeViewer.cpp:3693 src/slic3r/GUI/GCodeViewer.cpp:3715 #: src/slic3r/GUI/GUI.cpp:337 src/slic3r/GUI/Plater.cpp:817 msgid "Print settings" msgstr "Réglages d'impression" -#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 -msgid "Print Settings Tab" -msgstr "Onglet Réglages d'impression" - #: src/libslic3r/PrintConfig.cpp:3774 msgid "Print speed" msgstr "Vitesse d'impression" @@ -9627,9 +9150,14 @@ msgstr "" msgid "Printer" msgstr "Imprimante" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 -msgid "printer" -msgstr "imprimer" +#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 +#: src/slic3r/GUI/Tab.hpp:490 +msgid "Printer Settings" +msgstr "Réglages de l'Imprimante" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 +msgid "Printer Settings Tab" +msgstr "Onglet Réglages de l'imprimante" #: src/libslic3r/PrintConfig.cpp:3215 src/libslic3r/PrintConfig.cpp:3216 msgid "Printer absolute correction" @@ -9639,10 +9167,6 @@ msgstr "Correction absolue de l'imprimante" msgid "Printer gamma correction" msgstr "Correction gamma de l'imprimante" -#: src/slic3r/GUI/Tab.cpp:1375 -msgid "printer model" -msgstr "modèle de l'imprimante" - #: src/libslic3r/PrintConfig.cpp:2011 msgid "Printer notes" msgstr "Notes de l'imprimante" @@ -9651,6 +9175,18 @@ msgstr "Notes de l'imprimante" msgid "Printer preset names" msgstr "Noms des préréglages de l'imprimante" +#: src/libslic3r/PrintConfig.cpp:3192 +msgid "Printer scaling X axis correction" +msgstr "Correction de la mise à l'échelle de l'imprimante sur l'axe X" + +#: src/libslic3r/PrintConfig.cpp:3200 +msgid "Printer scaling Y axis correction" +msgstr "Correction de la mise à l'échelle de l'imprimante sur l'axe Y" + +#: src/libslic3r/PrintConfig.cpp:3208 +msgid "Printer scaling Z axis correction" +msgstr "Correction de la mise à l'échelle de l'imprimante sur l'axe Z" + #: src/libslic3r/PrintConfig.cpp:3183 src/libslic3r/PrintConfig.cpp:3184 #: src/libslic3r/PrintConfig.cpp:3185 msgid "Printer scaling correction" @@ -9668,27 +9204,6 @@ msgstr "Correction de la mise à l'échelle de l'imprimante sur l'axe Y" msgid "Printer scaling correction in Z axis" msgstr "Correction de la mise à l'échelle de l'imprimante sur l'axe Z" -#: src/libslic3r/PrintConfig.cpp:3192 -msgid "Printer scaling X axis correction" -msgstr "Correction de la mise à l'échelle de l'imprimante sur l'axe X" - -#: src/libslic3r/PrintConfig.cpp:3200 -msgid "Printer scaling Y axis correction" -msgstr "Correction de la mise à l'échelle de l'imprimante sur l'axe Y" - -#: src/libslic3r/PrintConfig.cpp:3208 -msgid "Printer scaling Z axis correction" -msgstr "Correction de la mise à l'échelle de l'imprimante sur l'axe Z" - -#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 -msgid "Printer Settings" -msgstr "Réglages de l'Imprimante" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 -msgid "Printer Settings Tab" -msgstr "Onglet Réglages de l'imprimante" - #: src/libslic3r/PrintConfig.cpp:223 src/libslic3r/PrintConfig.cpp:224 msgid "Printer technology" msgstr "Technologie de l'imprimante" @@ -9780,6 +9295,10 @@ msgstr "Imprimantes à Technologie FFF Prusa" msgid "Prusa MSLA Technology Printers" msgstr "Imprimantes à Technologie MSLA Prusa" +#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 +msgid "PrusaSlicer GUI initialization failed" +msgstr "L'initialisation de la GUI de PrusaSlicer a échoué" + #: src/slic3r/GUI/GUI_App.cpp:1330 #, boost-format msgid "" @@ -9813,10 +9332,6 @@ msgstr "" msgid "PrusaSlicer error" msgstr "Erreur de PrusaSlicer" -#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 -msgid "PrusaSlicer GUI initialization failed" -msgstr "L'initialisation de la GUI de PrusaSlicer a échoué" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:84 #, boost-format msgid "PrusaSlicer has encountered a fatal error: \"%1%\"" @@ -10163,6 +9678,16 @@ msgstr "Ordinaire" msgid "Regular expression" msgstr "Expression régulière" +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" +"L'adressage relatif de l'extrudeur nécessite de réinitialiser la position de " +"l'extrudeur à chaque couche pour éviter la perte de précision en virgule " +"flottante. Ajoutez \"G92 E0\" à layer_gcode." + #: src/slic3r/GUI/Preferences.cpp:435 msgid "Release only" msgstr "Version officielle uniquement" @@ -10171,6 +9696,11 @@ msgstr "Version officielle uniquement" msgid "Reload all from disk" msgstr "Tout recharger à partir du disque" +#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 +#: src/slic3r/GUI/Plater.cpp:3548 +msgid "Reload from disk" +msgstr "Recharger à partir du disque" + #: resources/data/hints.ini: [hint:Reload from disk] msgid "" "Reload from disk\n" @@ -10184,11 +9714,6 @@ msgstr "" "bouton droit sur le modèle dans la vue 3D et choisissez Recharger depuis le " "disque. Lire la suite dans la documentation." -#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 -msgid "Reload from disk" -msgstr "Recharger à partir du disque" - #: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 msgid "Reload from:" msgstr "Recharger depuis :" @@ -10226,15 +9751,19 @@ msgstr "Se souvenir de mon choix" msgid "Remember output directory" msgstr "Se souvenir du répertoire de sortie" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "remove" -msgstr "retirer" - #: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/BedShapeDialog.cpp:362 #: src/slic3r/GUI/Tab.cpp:3734 msgid "Remove" msgstr "Retirer" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 +msgid "Remove Instance of the selected object" +msgstr "Supprimer l'instance de l'objet sélectionné" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 +msgid "Remove Multi Material painting" +msgstr "Supprimer la peinture multi-matériaux" + #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:38 msgid "Remove all holes" msgstr "Supprimer tous les trous" @@ -10260,18 +9789,10 @@ msgstr "Supprimer l'extrudeur de la séquence" msgid "Remove instance" msgstr "Supprimer l'instance" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 -msgid "Remove Instance of the selected object" -msgstr "Supprimer l'instance de l'objet sélectionné" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:160 msgid "Remove layer range" msgstr "Supprimer la zone de couche" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 -msgid "Remove Multi Material painting" -msgstr "Supprimer la peinture multi-matériaux" - #: src/slic3r/GUI/GUI_Factories.cpp:1087 msgid "Remove one instance of the selected object" msgstr "Supprime une instance de l'objet sélectionné" @@ -10404,14 +9925,14 @@ msgstr "Réparation d'un modèle par le service Netfabb" msgid "Repairing was canceled" msgstr "La réparation a été annulée" -#: src/slic3r/GUI/MainFrame.cpp:1285 -msgid "Repeat last quick slice" -msgstr "Répéter le dernier découpage rapide" - #: src/slic3r/GUI/MainFrame.cpp:1285 msgid "Repeat Last Quick Slice" msgstr "Répéter le Dernier Découpage Rapide" +#: src/slic3r/GUI/MainFrame.cpp:1285 +msgid "Repeat last quick slice" +msgstr "Répéter le dernier découpage rapide" + #: src/slic3r/GUI/Plater.cpp:3432 msgid "Replace from:" msgstr "Remplacer par :" @@ -10445,21 +9966,6 @@ msgstr "S&ignaler un Problème" msgid "Report an issue on %s" msgstr "Signaler un problème sur %s" -#: src/slic3r/Utils/PresetUpdater.cpp:815 -#, c-format, boost-format -msgid "requires max. %s" -msgstr "nécessite max. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:812 -#, c-format, boost-format -msgid "requires min. %s" -msgstr "nécessite min. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:808 -#, c-format, boost-format -msgid "requires min. %s and max. %s" -msgstr "nécessite min. %s et max. %s" - #: src/slic3r/GUI/FirmwareDialog.cpp:820 msgid "Rescan" msgstr "Scanner à nouveau" @@ -10468,6 +9974,14 @@ msgstr "Scanner à nouveau" msgid "Reset" msgstr "Réinitialiser" +#: src/slic3r/GUI/Plater.cpp:3003 +msgid "Reset Project" +msgstr "Réinitialiser le Projet" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 +msgid "Reset Rotation" +msgstr "Réinitialiser la Rotation" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1225 msgid "Reset clipping plane" msgstr "Réinitialiser le plan de coupe" @@ -10480,18 +9994,10 @@ msgstr "Réinitialiser le plan de coupe" msgid "Reset direction" msgstr "Réinitialiser la direction" -#: src/slic3r/GUI/Plater.cpp:3003 -msgid "Reset Project" -msgstr "Réinitialiser le Projet" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363 msgid "Reset rotation" msgstr "Réinitialiser la rotation" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 -msgid "Reset Rotation" -msgstr "Réinitialiser la Rotation" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:398 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:400 msgid "Reset scale" @@ -10503,14 +10009,14 @@ msgstr "Réinitialiser l'échelle" msgid "Reset selection" msgstr "Réinitialiser la sélection" -#: src/slic3r/GUI/GLCanvas3D.cpp:237 -msgid "Reset to base" -msgstr "Réinitialiser à la base" - #: src/slic3r/GUI/Tab.cpp:2825 msgid "Reset to Filament Color" msgstr "Réinitialiser la Couleur du Filament" +#: src/slic3r/GUI/GLCanvas3D.cpp:237 +msgid "Reset to base" +msgstr "Réinitialiser à la base" + #: src/slic3r/GUI/GUI_App.cpp:2331 msgid "Restart application" msgstr "Redémarrer l'application" @@ -10532,13 +10038,6 @@ msgstr "Rétracter lors des changements de couche" msgid "Retraction" msgstr "Rétraction" -#: src/libslic3r/PrintConfig.cpp:2115 -msgid "" -"Retraction is not triggered when travel moves are shorter than this length." -msgstr "" -"La rétraction n'est pas déclenchée lorsque les déplacements sont plus courts " -"que cette distance." - #: src/libslic3r/PrintConfig.cpp:2136 msgid "Retraction Length" msgstr "Longueur de Rétractation" @@ -10551,6 +10050,13 @@ msgstr "Longueur de Rétractation (changement d'outil)" msgid "Retraction Speed" msgstr "Vitesse de Rétractation" +#: src/libslic3r/PrintConfig.cpp:2115 +msgid "" +"Retraction is not triggered when travel moves are shorter than this length." +msgstr "" +"La rétraction n'est pas déclenchée lorsque les déplacements sont plus courts " +"que cette distance." + #: src/slic3r/GUI/Tab.cpp:2818 msgid "" "Retraction when tool is disabled (advanced settings for multi-extruder " @@ -10587,6 +10093,14 @@ msgstr "Passez en revue les substitutions et ajustez-les si nécessaire." msgid "Right" msgstr "Droite" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +msgid "Right Preset Value" +msgstr "Valeur du Préréglage droit" + +#: src/slic3r/GUI/MainFrame.cpp:1129 +msgid "Right View" +msgstr "Vue Droite" + #: src/slic3r/GUI/GUI_ObjectList.cpp:488 msgid "Right button click the icon to change the object printable property" msgstr "" @@ -10614,14 +10128,6 @@ msgstr "Bouton droit de la souris" msgid "Right mouse button:" msgstr "Clic droit souris :" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 -msgid "Right Preset Value" -msgstr "Valeur du Préréglage droit" - -#: src/slic3r/GUI/MainFrame.cpp:1129 -msgid "Right View" -msgstr "Vue Droite" - #: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:466 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:543 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562 @@ -10693,16 +10199,6 @@ msgstr "Run %s" msgid "Running post-processing scripts" msgstr "Exécuter des scripts de post-traitement" -#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 -#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 -#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 -#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 -#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 -#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 -#: src/libslic3r/PrintConfig.cpp:3349 -msgid "s" -msgstr "s" - #: src/slic3r/GUI/MainFrame.cpp:1231 src/slic3r/GUI/MainFrame.cpp:1580 msgid "S&end G-code" msgstr "&Envoyer le G-code" @@ -10711,6 +10207,60 @@ msgstr "&Envoyer le G-code" msgid "S&end to print" msgstr "Envoyer pour imprimer" +#: src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Material Profiles Selection" +msgstr "Sélection des Profils Matériaux SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Materials" +msgstr "Matériaux SLA" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 +msgid "SLA Support Points" +msgstr "Points de Support SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:2102 +msgid "SLA Technology Printers" +msgstr "Imprimantes Technologie SLA" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 +msgid "SLA gizmo keyboard shortcuts" +msgstr "Raccourcis clavier pour le gizmo SLA" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +msgid "SLA material" +msgstr "Matériau SLA" + +#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 +msgid "SLA material type" +msgstr "Type de matériau SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:752 +msgid "SLA materials" +msgstr "Matériaux SLA" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +msgid "SLA print" +msgstr "Impression SLA" + +#: src/libslic3r/PrintConfig.cpp:3382 +msgid "SLA print material notes" +msgstr "Notes concernant le matériau d'impression SLA" + +#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 +msgid "SLA print settings" +msgstr "Réglages d'impression SLA" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6369 +msgid "SLA supports outside the print area were detected." +msgstr "Des supports SLA en dehors de la zone d'impression ont été détectés." + +#: src/slic3r/GUI/MainFrame.cpp:1661 +msgid "SVG" +msgstr "SVG" + #. TRN To be shown in Print Settings "Bottom contact Z distance". Have to be as short as possible #. TRN To be shown in Print Settings "Bottom interface layers". Have to be as short as possible #: src/libslic3r/PrintConfig.cpp:2576 src/libslic3r/PrintConfig.cpp:2661 @@ -10731,6 +10281,24 @@ msgstr "Enregistrer %s sous :" msgid "Save %s file as:" msgstr "Enregistrer le fichier %s sous :" +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save G-code file as:" +msgstr "Sauvegarder le fichier G-code en tant que :" + +#: src/slic3r/GUI/MainFrame.cpp:1736 +msgid "Save OBJ file (less prone to coordinate errors than STL) as:" +msgstr "" +"Enregistrer le fichier OBJ (moins enclin aux erreurs de coordonnées que le " +"STL) sous :" + +#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 +msgid "Save Project &as" +msgstr "Enregistrer le Projet &sous" + +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save SL1 / SL1S file as:" +msgstr "Enregistrer le fichier SL1 / SL1S sous :" + #: src/libslic3r/PrintConfig.cpp:4310 msgid "Save config file" msgstr "Sauvegarder le fichier de configuration" @@ -10761,16 +10329,6 @@ msgstr "Sauvegarder le fichier du projet en cours sous" msgid "Save file as:" msgstr "Enregistrer le fichier sous :" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save G-code file as:" -msgstr "Sauvegarder le fichier G-code en tant que :" - -#: src/slic3r/GUI/MainFrame.cpp:1736 -msgid "Save OBJ file (less prone to coordinate errors than STL) as:" -msgstr "" -"Enregistrer le fichier OBJ (moins enclin aux erreurs de coordonnées que le " -"STL) sous :" - #: src/slic3r/GUI/SavePresetDialog.cpp:191 #: src/slic3r/GUI/SavePresetDialog.cpp:197 msgid "Save preset" @@ -10784,10 +10342,6 @@ msgstr "Enregistrer le lot de préréglages sous :" msgid "Save project" msgstr "Enregistrer le projet" -#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 -msgid "Save Project &as" -msgstr "Enregistrer le Projet &sous" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:79 msgid "Save project (3mf)" msgstr "Sauvegarder le projet (3mf)" @@ -10796,10 +10350,6 @@ msgstr "Sauvegarder le projet (3mf)" msgid "Save project as (3mf)" msgstr "Sauvegarder le projet en tant que (3mf)" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save SL1 / SL1S file as:" -msgstr "Enregistrer le fichier SL1 / SL1S sous :" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:898 msgid "Save support points?" msgstr "Enregistrer les points de support ?" @@ -10831,6 +10381,10 @@ msgstr "Échec de la sauvegarde du maillage dans le contenant 3MF." msgid "Scale" msgstr "Redimensionner" +#: src/slic3r/GUI/Selection.cpp:950 +msgid "Scale To Fit" +msgstr "Redimensionner pour Ajuster" + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:523 msgid "Scale factors" msgstr "Échelle" @@ -10844,10 +10398,6 @@ msgstr "" msgid "Scale to Fit" msgstr "Redimensionner pour Ajuster" -#: src/slic3r/GUI/Selection.cpp:950 -msgid "Scale To Fit" -msgstr "Redimensionner pour Ajuster" - #: src/libslic3r/PrintConfig.cpp:4405 msgid "Scale to fit the given volume." msgstr "Redimensionner pour ajuster à un volume donné." @@ -10936,13 +10486,41 @@ msgstr "Deuxième couleur" msgid "See Download page." msgstr "Voir la page de téléchargement." +#: src/slic3r/GUI/GUI_App.cpp:1219 +msgid "See Releases page." +msgstr "Voir la page des versions." + #: src/slic3r/GUI/NotificationManager.hpp:753 msgid "See more." msgstr "Voir plus." -#: src/slic3r/GUI/GUI_App.cpp:1219 -msgid "See Releases page." -msgstr "Voir la page des versions." +#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 +msgid "Select Filament Settings Tab" +msgstr "Sélectionner l'Onglet des Réglages du Filament" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 +msgid "Select Plater Tab" +msgstr "Sélectionner l'Onglet du Plateau" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 +msgid "Select Print Settings Tab" +msgstr "Sélectionner l'Onglet des Réglages d'Impression" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 +msgid "Select Printer Settings Tab" +msgstr "Sélectionner l'Onglet des Réglages de l'Imprimante" + +#: src/slic3r/GUI/DoubleSlider.cpp:2532 +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/FirmwareDialog.cpp:813 msgid "Select a file" @@ -10982,26 +10560,10 @@ msgstr "" "Sélectionnez un espace de coordonnées dans lequel la transformation sera " "effectuée." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 -msgid "Select Filament Settings Tab" -msgstr "Sélectionner l'Onglet des Réglages du Filament" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 -msgid "Select Plater Tab" -msgstr "Sélectionner l'Onglet du Plateau" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 msgid "Select presets to compare" msgstr "Sélectionner les préréglages à comparer" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 -msgid "Select Print Settings Tab" -msgstr "Sélectionner l'Onglet des Réglages d'Impression" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 -msgid "Select Printer Settings Tab" -msgstr "Sélectionner l'Onglet des Réglages de l'Imprimante" - #: src/slic3r/GUI/GalleryDialog.cpp:76 msgid "Select shape from the gallery" msgstr "Sélectionner la forme dans la galerie" @@ -11010,6 +10572,10 @@ msgstr "Sélectionner la forme dans la galerie" msgid "Select showing settings" msgstr "Sélectionner les réglages d'affichage" +#: src/slic3r/GUI/MainFrame.cpp:1726 +msgid "Select the STL file to repair:" +msgstr "Sélectionner le fichier STL à réparer :" + #: src/slic3r/GUI/GUI_App.cpp:2010 msgid "Select the language" msgstr "Sélectionner la langue" @@ -11027,10 +10593,6 @@ msgstr "" msgid "Select the printers this profile is compatible with." msgstr "Sélectionner les imprimantes avec lesquelles ce profil est compatible." -#: src/slic3r/GUI/MainFrame.cpp:1726 -msgid "Select the STL file to repair:" -msgstr "Sélectionner le fichier STL à réparer :" - #: src/slic3r/GUI/Preferences.cpp:709 msgid "Select toolbar icon size in respect to the default one." msgstr "" @@ -11049,18 +10611,6 @@ msgstr "Choisissez le type de socle dont vous avez besoin" msgid "Select what kind of support do you need" msgstr "Choisissez le type de support dont vous avez besoin" -#: src/slic3r/GUI/DoubleSlider.cpp:2532 -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:168 msgid "Selection-Add" msgstr "Sélection-Ajouter" @@ -11069,14 +10619,6 @@ msgstr "Sélection-Ajouter" msgid "Selection-Add All" msgstr "Sélection-Ajouter Tout" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 -msgid "Selection-Add from list" -msgstr "Sélection-Ajouter depuis la liste" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6446 -msgid "Selection-Add from rectangle" -msgstr "Sélection-Ajouter depuis le rectangle" - #: src/slic3r/GUI/Selection.cpp:278 msgid "Selection-Add Instance" msgstr "Sélection-Ajouter Instance" @@ -11085,6 +10627,14 @@ msgstr "Sélection-Ajouter Instance" msgid "Selection-Add Object" msgstr "Sélection-Ajouter Objet" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 +msgid "Selection-Add from list" +msgstr "Sélection-Ajouter depuis la liste" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6446 +msgid "Selection-Add from rectangle" +msgstr "Sélection-Ajouter depuis le rectangle" + #: src/slic3r/GUI/Selection.cpp:209 msgid "Selection-Remove" msgstr "Sélection-Retirer" @@ -11093,14 +10643,6 @@ msgstr "Sélection-Retirer" msgid "Selection-Remove All" msgstr "Sélection-Retirer Tout" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 -msgid "Selection-Remove from list" -msgstr "Sélection-Retirer de la liste" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6461 -msgid "Selection-Remove from rectangle" -msgstr "Sélection-Retirer du rectangle" - #: src/slic3r/GUI/Selection.cpp:297 msgid "Selection-Remove Instance" msgstr "Sélection-Supprimer l'Instance" @@ -11109,18 +10651,26 @@ msgstr "Sélection-Supprimer l'Instance" msgid "Selection-Remove Object" msgstr "Sélection-Supprimer l'Objet" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 +msgid "Selection-Remove from list" +msgstr "Sélection-Retirer de la liste" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6461 +msgid "Selection-Remove from rectangle" +msgstr "Sélection-Retirer du rectangle" + #: src/slic3r/GUI/MainFrame.cpp:1320 msgid "Selects all objects" msgstr "Sélectionner tous les objets" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 -msgid "Send G-code" -msgstr "Envoyer le G-code" - #: src/slic3r/GUI/PrintHostDialogs.cpp:40 msgid "Send G-Code to printer host" msgstr "Envoyer le G-Code à l'hôte d'imprimante" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +msgid "Send G-code" +msgstr "Envoyer le G-code" + #: src/slic3r/GUI/SendSystemInfoDialog.cpp:550 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:618 msgid "Send system info" @@ -11171,6 +10721,46 @@ msgstr "Nom du service" msgid "Set" msgstr "Appliquer" +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 +msgid "Set Mirror" +msgstr "Appliquer la Symétrie" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 +msgid "Set Orientation" +msgstr "Définir l'Orientation" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 +msgid "Set Position" +msgstr "Définir la Position" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Printable" +msgstr "Définir Imprimable" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Printable Instance" +msgstr "Définir une Instance Imprimable" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Printable group" +msgstr "Définir le groupe imprimable" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 +msgid "Set Scale" +msgstr "Définir l'Échelle" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Unprintable" +msgstr "Définir non-Imprimable" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Unprintable Instance" +msgstr "Définir une Instance non-Imprimable" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Unprintable group" +msgstr "Définir le groupe Non Imprimable" + #: src/slic3r/GUI/GUI_Factories.cpp:636 src/slic3r/GUI/GUI_Factories.cpp:648 msgid "Set as a Separated Object" msgstr "Définir comme Objet Séparé" @@ -11219,9 +10809,9 @@ msgstr "Définir le curseur de gauche comme actif" msgid "Set lower thumb as active" msgstr "Définir le curseur du bas comme actif" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 -msgid "Set Mirror" -msgstr "Appliquer la Symétrie" +#: src/slic3r/GUI/GUI_Factories.cpp:1090 +msgid "Set number of instances" +msgstr "Définir le nombre d'instances" #: resources/data/hints.ini: [hint:Set number of instances] msgid "" @@ -11234,35 +10824,11 @@ msgstr "" "définir un nombre exact d'instances au lieu de le copier-coller plusieurs " "fois ?" -#: src/slic3r/GUI/GUI_Factories.cpp:1090 -msgid "Set number of instances" -msgstr "Définir le nombre d'instances" - #: src/slic3r/GUI/Plater.cpp:5573 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Régler le nombre de copies sur %d" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 -msgid "Set Orientation" -msgstr "Définir l'Orientation" - -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 -msgid "Set Position" -msgstr "Définir la Position" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Printable" -msgstr "Définir Imprimable" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Printable group" -msgstr "Définir le groupe imprimable" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Printable Instance" -msgstr "Définir une Instance Imprimable" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:249 msgid "Set right thumb as active" msgstr "Définir le curseur de droite comme actif" @@ -11271,10 +10837,6 @@ msgstr "Définir le curseur de droite comme actif" msgid "Set ruler mode" msgstr "Définir le mode règle" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 -msgid "Set Scale" -msgstr "Définir l'Échelle" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:196 msgid "Set selected items as Printable/Unprintable" msgstr "Définir les éléments sélectionnés comme Imprimables/Non Imprimables" @@ -11448,18 +11010,6 @@ msgstr "" "elle représente la profondeur maximum à laquelle peut descendre l'extrudeur " "avant d'entrer en collision avec d'autres objets imprimés." -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Unprintable" -msgstr "Définir non-Imprimable" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Unprintable group" -msgstr "Définir le groupe Non Imprimable" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Unprintable Instance" -msgstr "Définir une Instance non-Imprimable" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:235 msgid "Set upper thumb as active" msgstr "Définir le curseur du haut comme actif" @@ -11484,6 +11034,10 @@ msgstr "Réglages" msgid "Settings for height range" msgstr "Réglages pour la zone de hauteur" +#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 +msgid "Settings in non-modal window" +msgstr "Réglages dans une fenêtre non modale" + #: resources/data/hints.ini: [hint:Settings in non-modal window] msgid "" "Settings in non-modal window\n" @@ -11497,10 +11051,6 @@ msgstr "" "et l'Aperçu du G-code sur l'autre. Allez dans les Préférences et " "sélectionnez Réglages dans la fenêtre non modale." -#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 -msgid "Settings in non-modal window" -msgstr "Réglages dans une fenêtre non modale" - #: src/slic3r/GUI/ConfigManipulation.cpp:167 msgid "Shall I adjust those settings for supports?" msgstr "Dois-je ajuster ces paramètres pour les supports ?" @@ -11583,6 +11133,10 @@ msgstr "Afficher le Répertoire de &Configuration" msgid "Show &Labels" msgstr "Afficher les &Labels" +#: src/slic3r/GUI/MainFrame.cpp:1097 +msgid "Show Tip of the Day" +msgstr "Afficher l'Astuce du Jour" + #: src/slic3r/GUI/MainFrame.cpp:1092 src/slic3r/GUI/MainFrame.cpp:1095 msgid "Show about dialog" msgstr "Afficher la boîte de dialogue à propos" @@ -11671,16 +11225,16 @@ msgstr "Afficher la prévisualisation des tranches 3D" msgid "Show the filament settings" msgstr "Afficher les réglages de filament" -#: src/libslic3r/PrintConfig.cpp:4296 -msgid "Show the full list of print/G-code configuration options." -msgstr "" -"Afficher la liste complète des options de configuration d'impression/G-code." - #: src/libslic3r/PrintConfig.cpp:4301 msgid "Show the full list of SLA print configuration options." msgstr "" "Afficher la liste complète des options de configuration d'impression SLA." +#: src/libslic3r/PrintConfig.cpp:4296 +msgid "Show the full list of print/G-code configuration options." +msgstr "" +"Afficher la liste complète des options de configuration d'impression/G-code." + #: src/slic3r/GUI/MainFrame.cpp:1100 msgid "Show the list of the keyboard shortcuts" msgstr "Afficher la liste des raccourcis clavier" @@ -11701,10 +11255,6 @@ msgstr "Afficher les réglages de l'imprimante" msgid "Show this help." msgstr "Afficher cette aide." -#: src/slic3r/GUI/MainFrame.cpp:1097 -msgid "Show Tip of the Day" -msgstr "Afficher l'Astuce du Jour" - #: src/slic3r/GUI/MainFrame.cpp:1087 msgid "Show user configuration folder (datadir)" msgstr "Afficher le répertoire de configuration utilisateur (datadir)" @@ -11745,14 +11295,14 @@ msgstr "Afficher/Masquer les labels de l'objet/instance" msgid "Simple" msgstr "Simple" -#: src/slic3r/GUI/ConfigWizard.cpp:1279 -msgid "Simple mode" -msgstr "Mode simple" - #: src/slic3r/GUI/GUI_App.cpp:2237 msgid "Simple View Mode" msgstr "Mode de Vue Simple" +#: src/slic3r/GUI/ConfigWizard.cpp:1279 +msgid "Simple mode" +msgstr "Mode simple" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:156 msgid "Simplification is currently only allowed when a single part is selected" msgstr "" @@ -11786,10 +11336,6 @@ msgstr "" msgid "Simplify model" msgstr "Simplifier le modèle" -#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 -msgid "Single extruder MM setup" -msgstr "Réglage MM pour extrudeur unique" - #: src/libslic3r/PrintConfig.cpp:2459 msgid "Single Extruder Multi Material" msgstr "Multi Material à extrudeur unique" @@ -11806,6 +11352,10 @@ msgstr "" "Voulez-vous modifier le diamètre pour tous les extrudeurs\n" "en utilisant la valeur du diamètre de la buse du premier extrudeur ?" +#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 +msgid "Single extruder MM setup" +msgstr "Réglage MM pour extrudeur unique" + #: src/slic3r/GUI/Tab.cpp:2734 msgid "Single extruder multimaterial parameters" msgstr "Paramètres multimatériaux pour extrudeur unique" @@ -11836,6 +11386,10 @@ msgstr "Taille en X et Y du plateau rectangulaire." msgid "Skirt" msgstr "Jupe" +#: src/libslic3r/PrintConfig.cpp:2282 +msgid "Skirt Loops" +msgstr "Boucles de la Jupe" + #: src/slic3r/GUI/GUI_Factories.cpp:136 src/slic3r/GUI/Tab.cpp:1536 #: src/libslic3r/PrintConfig.cpp:494 src/libslic3r/PrintConfig.cpp:505 #: src/libslic3r/PrintConfig.cpp:521 @@ -11846,65 +11400,11 @@ msgstr "Jupe et bordure" msgid "Skirt height" msgstr "Hauteur de la jupe" -#: src/libslic3r/PrintConfig.cpp:2282 -msgid "Skirt Loops" -msgstr "Boucles de la Jupe" - #: src/slic3r/GUI/GUI_Preview.cpp:248 src/libslic3r/ExtrusionEntity.cpp:327 #: src/libslic3r/ExtrusionEntity.cpp:358 msgid "Skirt/Brim" msgstr "Jupe/Bordure" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 -msgid "SLA gizmo keyboard shortcuts" -msgstr "Raccourcis clavier pour le gizmo SLA" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 -msgid "SLA material" -msgstr "Matériau SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Material Profiles Selection" -msgstr "Sélection des Profils Matériaux SLA" - -#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 -msgid "SLA material type" -msgstr "Type de matériau SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Materials" -msgstr "Matériaux SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:752 -msgid "SLA materials" -msgstr "Matériaux SLA" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 -msgid "SLA print" -msgstr "Impression SLA" - -#: src/libslic3r/PrintConfig.cpp:3382 -msgid "SLA print material notes" -msgstr "Notes concernant le matériau d'impression SLA" - -#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 -msgid "SLA print settings" -msgstr "Réglages d'impression SLA" - -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 -msgid "SLA Support Points" -msgstr "Points de Support SLA" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6369 -msgid "SLA supports outside the print area were detected." -msgstr "Des supports SLA en dehors de la zone d'impression ont été détectés." - -#: src/slic3r/GUI/ConfigWizard.cpp:2102 -msgid "SLA Technology Printers" -msgstr "Imprimantes Technologie SLA" - #: src/slic3r/GUI/GUI_Factories.cpp:461 msgid "Slab" msgstr "Pavé" @@ -12001,6 +11501,14 @@ msgstr "L'objet découpe \"%1%\" ressemble à un logo ou à un signe" msgid "Slicing" msgstr "Découpe" +#: src/slic3r/GUI/MainFrame.cpp:1710 +msgid "Slicing Done!" +msgstr "Découpe Effectuée !" + +#: src/libslic3r/PrintConfig.cpp:2489 +msgid "Slicing Mode" +msgstr "Mode de Découpage" + #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:162 #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:204 msgid "Slicing complete" @@ -12010,10 +11518,6 @@ msgstr "Découpe terminée" msgid "Slicing done" msgstr "Découpe effectuée" -#: src/slic3r/GUI/MainFrame.cpp:1710 -msgid "Slicing Done!" -msgstr "Découpe Effectuée !" - #: src/slic3r/GUI/NotificationManager.cpp:1113 msgid "Slicing finished." msgstr "Découpage terminé." @@ -12025,10 +11529,6 @@ msgstr "" "La découpe a du être interrompue du fait d'une erreur interne : index de " "découpage inconsistant." -#: src/libslic3r/PrintConfig.cpp:2489 -msgid "Slicing Mode" -msgstr "Mode de Découpage" - #: src/libslic3r/SLAPrintSteps.cpp:47 msgid "Slicing model" msgstr "Découpe du modèle" @@ -12087,10 +11587,6 @@ msgstr "Ajusté" msgid "Software &Releases" msgstr "Publications du Softwa&re " -#: src/slic3r/GUI/PresetHints.cpp:176 -msgid "solid infill" -msgstr "remplissage solide" - #: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:322 #: src/libslic3r/ExtrusionEntity.cpp:348 src/libslic3r/PrintConfig.cpp:2342 #: src/libslic3r/PrintConfig.cpp:2354 @@ -12105,6 +11601,10 @@ msgstr "Remplissage solide toutes les" msgid "Solid infill extruder" msgstr "Extrudeur pour le remplissage solide" +#: src/libslic3r/PrintConfig.cpp:2313 +msgid "Solid infill threshold area" +msgstr "Surface de seuil pour le remplissage solide" + #: resources/data/hints.ini: [hint:Solid infill threshold area] msgid "" "Solid infill threshold area\n" @@ -12118,10 +11618,6 @@ msgstr "" "Définissez la zone de seuil de remplissage solide. (Mode expert " "uniquement.)" -#: src/libslic3r/PrintConfig.cpp:2313 -msgid "Solid infill threshold area" -msgstr "Surface de seuil pour le remplissage solide" - #: src/slic3r/GUI/Tab.cpp:1470 src/libslic3r/PrintConfig.cpp:2367 msgid "Solid layers" msgstr "Couches solides" @@ -12135,17 +11631,6 @@ msgid "Soluble material is most likely used for a soluble support." msgstr "" "Il est probable qu'un matériau soluble soit utilisé pour un support soluble." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 -msgid "" -"Some fields are too long to fit. Right mouse click reveals the full text." -msgstr "" -"Certains champs sont trop longs pour s'afficher. Un clic droit de la souris " -"révèle le texte intégral." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some filaments were uninstalled." -msgstr "Certains filaments ont été désinstallés." - #: src/libslic3r/PrintConfig.cpp:1321 msgid "" "Some G/M-code commands, including temperature control and others, are not " @@ -12159,6 +11644,25 @@ msgstr "" "\"Pas d'extrusion\" empêche complètement PrusaSlicer d'exporter toute valeur " "d'extrusion." +#: src/slic3r/GUI/ConfigWizard.cpp:2696 +msgid "Some Printers were uninstalled." +msgstr "Certaines imprimantes ont été désinstallées." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some SLA materials were uninstalled." +msgstr "Certains matériaux SLA ont été désinstallés." + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +msgid "" +"Some fields are too long to fit. Right mouse click reveals the full text." +msgstr "" +"Certains champs sont trop longs pour s'afficher. Un clic droit de la souris " +"révèle le texte intégral." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some filaments were uninstalled." +msgstr "Certains filaments ont été désinstallés." + #: src/slic3r/GUI/GLCanvas3D.cpp:6370 msgid "Some objects are not visible during editing." msgstr "Certains objets ne sont pas visibles lors de l'édition." @@ -12212,14 +11716,6 @@ msgstr "" "des difficultés pour imprimer avec une hauteur de couche variable. Activé " "par défaut." -#: src/slic3r/GUI/ConfigWizard.cpp:2696 -msgid "Some Printers were uninstalled." -msgstr "Certaines imprimantes ont été désinstallées." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some SLA materials were uninstalled." -msgstr "Certains matériaux SLA ont été désinstallés." - #: src/slic3r/GUI/GLCanvas3D.cpp:4041 msgid "Spacing" msgstr "Espacement" @@ -12389,14 +11885,14 @@ msgstr "Vitesse:" msgid "Sphere" msgstr "Sphère" -#: src/libslic3r/PrintConfig.cpp:2381 -msgid "Spiral vase" -msgstr "Mode de vase spirale" - #: src/slic3r/GUI/ConfigManipulation.cpp:91 msgid "Spiral Vase" msgstr "Vase Spirale" +#: src/libslic3r/PrintConfig.cpp:2381 +msgid "Spiral vase" +msgstr "Mode de vase spirale" + #: src/slic3r/GUI/GUI_Factories.cpp:944 src/slic3r/GUI/GUI_Factories.cpp:954 #: src/slic3r/GUI/GUI_Factories.cpp:975 src/libslic3r/PrintConfig.cpp:4400 msgid "Split" @@ -12420,22 +11916,22 @@ msgstr "Scinder l'objet sélectionné en objets individuels" msgid "Split the selected object into individual parts" msgstr "Diviser l'objet sélectionné en parties individuelles" -#: src/slic3r/GUI/GLCanvas3D.cpp:4565 -msgid "Split to objects" -msgstr "Diviser en objets individuels" - #: src/slic3r/GUI/Plater.cpp:3095 msgid "Split to Objects" msgstr "Diviser en Objets" -#: src/slic3r/GUI/GLCanvas3D.cpp:4575 -msgid "Split to parts" -msgstr "Scinder en pièces" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2008 msgid "Split to Parts" msgstr "Scinder en Pièces" +#: src/slic3r/GUI/GLCanvas3D.cpp:4565 +msgid "Split to objects" +msgstr "Diviser en objets individuels" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4575 +msgid "Split to parts" +msgstr "Scinder en pièces" + #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:66 #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:132 msgid "Split triangles" @@ -12463,6 +11959,12 @@ msgstr "Standard" msgid "Stars" msgstr "Étoiles" +#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 +#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 +#: src/libslic3r/PrintConfig.cpp:2415 +msgid "Start G-code" +msgstr "G-code de début" + #: src/slic3r/GUI/MainFrame.cpp:1142 msgid "Start a new project" msgstr "Démarrer un nouveau projet" @@ -12471,12 +11973,6 @@ msgstr "Démarrer un nouveau projet" msgid "Start at height" msgstr "Hauteur de début" -#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 -#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 -#: src/libslic3r/PrintConfig.cpp:2415 -msgid "Start G-code" -msgstr "G-code de début" - #: src/slic3r/GUI/MainFrame.cpp:1293 msgid "Start new slicing process" msgstr "Démarrer un nouveau processus de découpe" @@ -12532,10 +12028,6 @@ msgstr "État :" msgid "Stealth" msgstr "Mode silencieux" -#: src/slic3r/GUI/Plater.cpp:1435 -msgid "stealth mode" -msgstr "mode silencieux" - #: src/slic3r/GUI/GCodeViewer.cpp:3755 msgid "Stealth mode" msgstr "Mode furtif" @@ -12576,22 +12068,6 @@ msgstr "" "Démonté avec succès. Le périphérique %s(% s) peut maintenant être retiré en " "toute sécurité de l'ordinateur." -#: src/slic3r/GUI/PresetHints.cpp:181 -msgid "support" -msgstr "support" - -#: src/libslic3r/PrintConfig.cpp:3517 -msgid "Support base diameter" -msgstr "Diamètre de la base du support" - -#: src/libslic3r/PrintConfig.cpp:3527 -msgid "Support base height" -msgstr "Hauteur de la base du support" - -#: src/libslic3r/PrintConfig.cpp:3536 -msgid "Support base safety distance" -msgstr "Distance de sécurité de la base du support" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Support Blocker" msgstr "Bloqueur de Support" @@ -12608,14 +12084,22 @@ msgstr "Générateur de Support" msgid "Support Generator" msgstr "Générateur de support" +#: src/libslic3r/PrintConfig.cpp:3517 +msgid "Support base diameter" +msgstr "Diamètre de la base du support" + +#: src/libslic3r/PrintConfig.cpp:3527 +msgid "Support base height" +msgstr "Hauteur de la base du support" + +#: src/libslic3r/PrintConfig.cpp:3536 +msgid "Support base safety distance" +msgstr "Distance de sécurité de la base du support" + #: src/slic3r/GUI/Tab.cpp:4599 msgid "Support head" msgstr "Tête du support" -#: src/slic3r/GUI/PresetHints.cpp:183 -msgid "support interface" -msgstr "interface du support" - #: src/slic3r/GUI/GUI_Factories.cpp:56 src/slic3r/GUI/GUI_Factories.cpp:131 #: src/slic3r/GUI/GUI_Preview.cpp:249 src/slic3r/GUI/Tab.cpp:1550 #: src/slic3r/GUI/Tab.cpp:1552 src/libslic3r/ExtrusionEntity.cpp:328 @@ -12701,10 +12185,6 @@ msgstr "Éditer les points de support" msgid "Supports" msgstr "Supports" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "supports and pad" -msgstr "supports et socle" - #: src/libslic3r/PrintConfig.cpp:1596 msgid "Supports remaining times" msgstr "Temps de support restant" @@ -12739,10 +12219,6 @@ msgstr "" msgid "Suppress to open hyperlink in browser" msgstr "Supprimer pour ouvrir l'hyperlien dans le navigateur" -#: src/slic3r/GUI/MainFrame.cpp:1661 -msgid "SVG" -msgstr "SVG" - #: src/slic3r/GUI/Mouse3DController.cpp:508 msgid "Swap Y/Z axes" msgstr "Permuter les axes Y/Z" @@ -12764,10 +12240,6 @@ msgstr "Code de changement pour Changer de couleur (%1%) pour :" msgid "Switch to 3D" msgstr "Basculer vers la 3D" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 -msgid "Switch to editing mode" -msgstr "Basculer vers le mode édition" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:113 msgid "Switch to Preview" msgstr "Basculer vers la Prévisualisation" @@ -12776,6 +12248,10 @@ msgstr "Basculer vers la Prévisualisation" msgid "Switch to Settings" msgstr "Basculer dans le Réglages" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 +msgid "Switch to editing mode" +msgstr "Basculer vers le mode édition" + #: src/slic3r/GUI/wxExtensions.cpp:644 #, c-format, boost-format msgid "Switch to the %s mode" @@ -12816,10 +12292,6 @@ msgstr "" "\n" "Voulez-vous continuer ?" -#: src/slic3r/GUI/Tab.cpp:1413 -msgid "symbolic profile name" -msgstr "nom de profil symbolique" - #: src/libslic3r/PrintConfig.cpp:2761 msgid "" "Synchronize support layers with the object print layers. This is useful with " @@ -12837,14 +12309,14 @@ msgstr "Synchroniser avec les couches de l'objet" msgid "System &Info" msgstr "&Informations sur le Système" -#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 -msgid "System info sent successfully. Thank you." -msgstr "Informations système envoyées avec succès. Merci." - #: src/slic3r/GUI/SysInfoDialog.cpp:84 msgid "System Information" msgstr "Informations sur le Système" +#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 +msgid "System info sent successfully. Thank you." +msgstr "Informations système envoyées avec succès. Merci." + #: src/slic3r/GUI/PresetComboBoxes.cpp:249 #: src/slic3r/GUI/PresetComboBoxes.cpp:287 #: src/slic3r/GUI/PresetComboBoxes.cpp:794 @@ -12931,6 +12403,149 @@ msgstr "" "Si l'équipement est connecté, veuillez appuyer sur le bouton Reset à côté du " "connecteur USB ..." +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 +msgid "" +"The SLA archive doesn't contain any presets. Please activate some SLA " +"printer preset first before importing that SLA archive." +msgstr "" +"L'archive SLA ne contient aucun préréglage. Veuillez d'abord activer " +"certains préréglages d'imprimante SLA avant d'importer cette archive SLA." + +#: src/slic3r/GUI/ConfigManipulation.cpp:82 +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 "" +"Les prérequis du mode Vase Spiral sont :\n" +"-Un seul périmètre\n" +"-Aucunes couches solides supérieures\n" +"-Une densité de remplissage de 0%\n" +"-Pas de support\n" +"-Vérifier que l'épaisseur de coque verticale est activée\n" +"-La détection de parois fines doit être désactivée" + +#: src/libslic3r/Print.cpp:469 +msgid "" +"The Spiral Vase option can only be used when printing single material " +"objects." +msgstr "" +"L'option Vase Spirale ne peut être utilisé que lors de l'impression d'objets " +"mono-matériau." + +#: src/libslic3r/Print.cpp:494 +msgid "" +"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." +msgstr "" +"À l'heure actuelle, la Tour de Nettoyage ne prend pas en charge l'E " +"volumétrique (use_volumetric_e-0)." + +#: src/slic3r/GUI/ConfigManipulation.cpp:121 +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 tour de nettoyage prend actuellement en charge les supports non solubles " +"seulement\n" +"si ils sont imprimés avec l'extrudeur actuel sans déclencher un changement " +"d'outil.\n" +"(support_material_extruder et support_material_interface_extruder doivent " +"être réglés sur 0)." + +#: src/libslic3r/Print.cpp:598 +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)." +msgstr "" +"A l'heure actuelle la Tour de Nettoyage ne tolère les supports non-solubles " +"que s'ils sont imprimés avec l'extrudeur en cours d'utilisation sans " +"déclencher un changement d'outil. (support_material_extruder de même que " +"support_material_interface_extruder doivent être réglés sur 0)." + +#: src/libslic3r/Print.cpp:496 +msgid "" +"The Wipe Tower is currently not supported for multimaterial sequential " +"prints." +msgstr "" +"La tour de nettoyage n'est actuellement pas prise en charge pour les " +"impressions séquentielles multimatériaux." + +#: src/libslic3r/Print.cpp:488 +msgid "" +"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." +msgstr "" +"La tour de nettoyage n'est actuellement prise en charge que pour les " +"versions du G-code Marlin, RepRap / Sprinter, RepRapFirmware et Repetier." + +#: src/libslic3r/Print.cpp:490 +msgid "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." +msgstr "" +"La tour de nettoyage est actuellement supportée uniquement avec l'adressage " +"relatif de l'extrudeur (use_relative_e_distances=1)." + +#: src/libslic3r/Print.cpp:519 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"over an equal number of raft layers" +msgstr "" +"La tour de nettoyage est uniquement supportées pour plusieurs objets s'ils " +"sont imprimés avec un nombre égal de couche de radeau" + +#: src/libslic3r/Print.cpp:522 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"with the same support_material_contact_distance" +msgstr "" +"La tour de nettoyage est uniquement supportée pour plusieurs objets s'ils " +"sont imprimés avec la même support_material_contact_distance" + +#: src/libslic3r/Print.cpp:524 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are sliced " +"equally." +msgstr "" +"La tour de nettoyage est uniquement supportée pour plusieurs objets s'ils " +"découpés de la même façon." + +#: src/libslic3r/Print.cpp:517 +msgid "" +"The Wipe Tower is only supported for multiple objects if they have equal " +"layer heights" +msgstr "" +"La tour de nettoyage est uniquement supportée pour plusieurs objets s'ils " +"ont une même hauteur de couche" + +#: src/slic3r/GUI/Tab.cpp:3005 +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 "" +"L'option Nettoyage n'est pas disponible lorsque vous utilisez le mode " +"Rétractation du Firmware.\n" +"\n" +"Voulez-vous que je la désactive pour permettre la Rétractation du Firmware ?" + +#: src/libslic3r/Print.cpp:537 +msgid "" +"The Wipe tower is only supported if all objects have the same variable layer " +"height" +msgstr "" +"La tour de Nettoyage n'est prise en charge que si tous les objets ont la " +"même hauteur de couche variable" + #: src/slic3r/GUI/GUI_App.cpp:957 #, boost-format msgid "" @@ -13091,21 +12706,22 @@ msgstr "" "afin de compenser l'écrasement de la première couche également connu sous le " "nom d'effet Pied d'Éléphant." +#: src/slic3r/GUI/ConfigWizard.cpp:2459 +msgid "The following FFF printer models have no filament selected:" +msgstr "" +"Les modèles d'imprimantes FFF suivants n'ont aucun filament sélectionné :" + +#: src/slic3r/GUI/ConfigWizard.cpp:2477 +msgid "The following SLA printer models have no materials selected:" +msgstr "" +"Les modèles d'imprimantes SLA suivants n'ont aucun matériau sélectionné :" + #: src/slic3r/GUI/Plater.cpp:5717 msgid "The following characters are not allowed by a FAT file system:" msgstr "" "Les caractères suivants ne sont pas autorisés par un système de fichiers " "FAT :" -#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 -msgid "the following characters are not allowed:" -msgstr "les caractères suivant ne sont pas autorisés :" - -#: src/slic3r/GUI/ConfigWizard.cpp:2459 -msgid "The following FFF printer models have no filament selected:" -msgstr "" -"Les modèles d'imprimantes FFF suivants n'ont aucun filament sélectionné :" - #: src/slic3r/GUI/Tab.cpp:1842 #, c-format, boost-format msgid "" @@ -13159,15 +12775,6 @@ msgid "" msgstr "" "Les raccourcis suivants s'appliquent lorsque le gizmo spécifié est actif" -#: src/slic3r/GUI/ConfigWizard.cpp:2477 -msgid "The following SLA printer models have no materials selected:" -msgstr "" -"Les modèles d'imprimantes SLA suivants n'ont aucun matériau sélectionné :" - -#: src/slic3r/GUI/SavePresetDialog.cpp:110 -msgid "the following suffix is not allowed:" -msgstr "le suffixe suivant n'est pas autorisé :" - #: src/slic3r/GUI/GUI.cpp:327 msgid "The following values were substituted:" msgstr "Les valeurs suivantes ont été remplacées :" @@ -13495,6 +13102,15 @@ msgstr "" "Le projet sélectionné n'est plus disponible.\n" "Voulez-vous le retirer de la liste des projets récents?" +#: src/slic3r/GUI/DoubleSlider.cpp:1408 +msgid "" +"The sequential print is on.\n" +"It's impossible to apply any custom G-code for objects printing sequentually." +msgstr "" +"L'impression séquentielle est activée.\n" +"Il est impossible d'appliquer un G-code personnalisé pour l'impression " +"séquentielle d'objets." + #: src/slic3r/GUI/DoubleSlider.cpp:1440 msgid "" "The sequential print is on.\n" @@ -13507,15 +13123,6 @@ msgstr "" "séquentielle d'objets.\n" "Ce code ne sera pas traité lors de la génération du G-code." -#: src/slic3r/GUI/DoubleSlider.cpp:1408 -msgid "" -"The sequential print is on.\n" -"It's impossible to apply any custom G-code for objects printing sequentually." -msgstr "" -"L'impression séquentielle est activée.\n" -"Il est impossible d'appliquer un G-code personnalisé pour l'impression " -"séquentielle d'objets." - #: src/slic3r/GUI/ConfigWizard.cpp:1287 msgid "The size of the object can be specified in inches" msgstr "La taille de l'objet peut être spécifiée en pouces" @@ -13524,14 +13131,6 @@ msgstr "La taille de l'objet peut être spécifiée en pouces" msgid "The size of the object is zero" msgstr "La taille de l'objet est nulle" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 -msgid "" -"The SLA archive doesn't contain any presets. Please activate some SLA " -"printer preset first before importing that SLA archive." -msgstr "" -"L'archive SLA ne contient aucun préréglage. Veuillez d'abord activer " -"certains préréglages d'imprimante SLA avant d'importer cette archive SLA." - #: src/libslic3r/PrintConfig.cpp:3671 msgid "" "The slope of the pad wall relative to the bed plane. 90 degrees means " @@ -13555,32 +13154,6 @@ msgid "The speed for retractions (it only applies to the extruder motor)." msgstr "" "La vitesse des rétractations (ne s'applique qu'au moteur de l'extrudeur)." -#: src/slic3r/GUI/ConfigManipulation.cpp:82 -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 "" -"Les prérequis du mode Vase Spiral sont :\n" -"-Un seul périmètre\n" -"-Aucunes couches solides supérieures\n" -"-Une densité de remplissage de 0%\n" -"-Pas de support\n" -"-Vérifier que l'épaisseur de coque verticale est activée\n" -"-La détection de parois fines doit être désactivée" - -#: src/libslic3r/Print.cpp:469 -msgid "" -"The Spiral Vase option can only be used when printing single material " -"objects." -msgstr "" -"L'option Vase Spirale ne peut être utilisé que lors de l'impression d'objets " -"mono-matériau." - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:630 msgid "The supplied name is empty. It can't be saved." msgstr "Le nom proposé est vide. Sauvegarde impossible." @@ -13634,107 +13207,6 @@ msgstr "" "support_material_contact_distance sera utilisé pour les distances Z de " "contact supérieur et inférieur." -#: src/slic3r/GUI/Tab.cpp:3005 -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 "" -"L'option Nettoyage n'est pas disponible lorsque vous utilisez le mode " -"Rétractation du Firmware.\n" -"\n" -"Voulez-vous que je la désactive pour permettre la Rétractation du Firmware ?" - -#: src/libslic3r/Print.cpp:494 -msgid "" -"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." -msgstr "" -"À l'heure actuelle, la Tour de Nettoyage ne prend pas en charge l'E " -"volumétrique (use_volumetric_e-0)." - -#: src/slic3r/GUI/ConfigManipulation.cpp:121 -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 tour de nettoyage prend actuellement en charge les supports non solubles " -"seulement\n" -"si ils sont imprimés avec l'extrudeur actuel sans déclencher un changement " -"d'outil.\n" -"(support_material_extruder et support_material_interface_extruder doivent " -"être réglés sur 0)." - -#: src/libslic3r/Print.cpp:598 -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)." -msgstr "" -"A l'heure actuelle la Tour de Nettoyage ne tolère les supports non-solubles " -"que s'ils sont imprimés avec l'extrudeur en cours d'utilisation sans " -"déclencher un changement d'outil. (support_material_extruder de même que " -"support_material_interface_extruder doivent être réglés sur 0)." - -#: src/libslic3r/Print.cpp:496 -msgid "" -"The Wipe Tower is currently not supported for multimaterial sequential " -"prints." -msgstr "" -"La tour de nettoyage n'est actuellement pas prise en charge pour les " -"impressions séquentielles multimatériaux." - -#: src/libslic3r/Print.cpp:488 -msgid "" -"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " -"RepRapFirmware and Repetier G-code flavors." -msgstr "" -"La tour de nettoyage n'est actuellement prise en charge que pour les " -"versions du G-code Marlin, RepRap / Sprinter, RepRapFirmware et Repetier." - -#: src/libslic3r/Print.cpp:490 -msgid "" -"The Wipe Tower is currently only supported with the relative extruder " -"addressing (use_relative_e_distances=1)." -msgstr "" -"La tour de nettoyage est actuellement supportée uniquement avec l'adressage " -"relatif de l'extrudeur (use_relative_e_distances=1)." - -#: src/libslic3r/Print.cpp:519 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"over an equal number of raft layers" -msgstr "" -"La tour de nettoyage est uniquement supportées pour plusieurs objets s'ils " -"sont imprimés avec un nombre égal de couche de radeau" - -#: src/libslic3r/Print.cpp:522 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"with the same support_material_contact_distance" -msgstr "" -"La tour de nettoyage est uniquement supportée pour plusieurs objets s'ils " -"sont imprimés avec la même support_material_contact_distance" - -#: src/libslic3r/Print.cpp:524 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are sliced " -"equally." -msgstr "" -"La tour de nettoyage est uniquement supportée pour plusieurs objets s'ils " -"découpés de la même façon." - -#: src/libslic3r/Print.cpp:517 -msgid "" -"The Wipe Tower is only supported for multiple objects if they have equal " -"layer heights" -msgstr "" -"La tour de nettoyage est uniquement supportée pour plusieurs objets s'ils " -"ont une même hauteur de couche" - #: src/libslic3r/Print.cpp:482 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " @@ -13743,14 +13215,6 @@ msgstr "" "La tour de nettoyage n'est supportée que si tous les extrudeurs ont le même " "diamètre de buse et utilisent un filament de même diamètre." -#: src/libslic3r/Print.cpp:537 -msgid "" -"The Wipe tower is only supported if all objects have the same variable layer " -"height" -msgstr "" -"La tour de Nettoyage n'est prise en charge que si tous les objets ont la " -"même hauteur de couche variable" - #: src/slic3r/GUI/Plater.cpp:4096 msgid "There are active warnings concerning sliced models:" msgstr "Il existe des avertissements actifs concernant les modèles découpés :" @@ -13803,6 +13267,18 @@ msgstr "Ponts épais" msgid "This %s version: %s" msgstr "Version de ce %s : %s" +#: src/libslic3r/PrintConfig.cpp:2433 +msgid "This G-code will be used as a code for the color change" +msgstr "Ce G-code sera utilisé comme code pour le changement de couleur" + +#: src/libslic3r/PrintConfig.cpp:2442 +msgid "This G-code will be used as a code for the pause print" +msgstr "Ce G-code sera utilisé comme code pour la pause de l'impression" + +#: src/libslic3r/PrintConfig.cpp:2451 +msgid "This G-code will be used as a custom code" +msgstr "Ce G-code sera utilisé comme code personnalisé" + #: src/slic3r/GUI/DoubleSlider.cpp:2087 src/slic3r/GUI/Tab.cpp:1322 msgid "" "This action is not revertible.\n" @@ -14077,18 +13553,6 @@ msgstr "" "Cette option déplace la buse lors des rétractations, limitant ainsi " "l'apparition d'amas sur les extrudeurs ayant tendance à couler." -#: src/libslic3r/PrintConfig.cpp:2433 -msgid "This G-code will be used as a code for the color change" -msgstr "Ce G-code sera utilisé comme code pour le changement de couleur" - -#: src/libslic3r/PrintConfig.cpp:2442 -msgid "This G-code will be used as a code for the pause print" -msgstr "Ce G-code sera utilisé comme code pour la pause de l'impression" - -#: src/libslic3r/PrintConfig.cpp:2451 -msgid "This G-code will be used as a custom code" -msgstr "Ce G-code sera utilisé comme code personnalisé" - #: src/slic3r/GUI/Tab.cpp:1351 msgid "This is a default preset." msgstr "Ceci est un préréglage par défaut." @@ -14529,10 +13993,6 @@ msgstr "" "aider à obtenir des changements d'outils fiables avec des matériaux flexible " "qui ont besoin de plus de temps pour revenir à leurs dimensions originales." -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "to" -msgstr "à" - #: src/slic3r/GUI/Tab.cpp:1365 msgid "To do that please specify a new name for the preset." msgstr "Pour faire cela veuillez spécifier un nouveau nom pour le préréglage." @@ -14568,10 +14028,6 @@ msgstr "" msgid "Toggle %c axis mirroring" msgstr "Activer la symétrie sur l'axe %c" -#: src/libslic3r/miniz_extension.cpp:93 -msgid "too many files" -msgstr "trop de fichiers" - #: src/libslic3r/SLAPrintSteps.cpp:426 msgid "Too many overlapping holes." msgstr "Trop de trous qui se chevauchent." @@ -14627,6 +14083,10 @@ msgstr "" "Indice d'épaisseur de coque supérieure / inférieure : non disponible en " "raison de la hauteur de couche non valide." +#: src/slic3r/GUI/MainFrame.cpp:1118 +msgid "Top View" +msgstr "Vue du Dessus" + #: src/libslic3r/PrintConfig.cpp:2548 msgid "Top contact Z distance" msgstr "Distance Z du contact supérieur" @@ -14650,10 +14110,6 @@ msgstr "" "La coque supérieure a une épaisseur de %1% mm pour une hauteur de couche %2% " "mm." -#: src/slic3r/GUI/PresetHints.cpp:178 -msgid "top solid infill" -msgstr "remplissage solide supérieur" - #: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:323 #: src/libslic3r/ExtrusionEntity.cpp:350 src/libslic3r/PrintConfig.cpp:2839 #: src/libslic3r/PrintConfig.cpp:2852 @@ -14664,10 +14120,6 @@ msgstr "Remplissage solide supérieur" msgid "Top solid layers" msgstr "Couches supérieures solides" -#: src/slic3r/GUI/MainFrame.cpp:1118 -msgid "Top View" -msgstr "Vue du Dessus" - #: src/libslic3r/PrintConfig.cpp:1550 msgid "Topmost surface only" msgstr "Uniquement la partie supérieure de la surface" @@ -14750,6 +14202,34 @@ msgstr "Type d'imprimante." msgid "Type:" msgstr "Type :" +#: src/slic3r/GUI/Tab.cpp:4257 +msgid "UNLOCKED LOCK" +msgstr "CADENAS OUVERT" + +#: src/slic3r/GUI/Tab.cpp:4283 +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 "" +"L'icône CADENAS OUVERT 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" +"Cliquez pour régler tous les paramètres pour le groupe d'options actuel sur " +"les valeurs du système (ou par défaut)." + +#: src/slic3r/GUI/Tab.cpp:4298 +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 "" +"L'icône CADENAS OUVERT indique que la valeur a été changée et n'est pas " +"égale à la valeur du système (ou par défaut).\n" +"Cliquez pour réinitialiser la valeur actuelle sur les valeurs du système (ou " +"par défaut)." + #: src/libslic3r/SLAPrintSteps.cpp:441 msgid "Unable to drill the current configuration of holes into the model." msgstr "" @@ -14794,10 +14274,6 @@ msgstr "Groupe non défini" msgid "Undefined" msgstr "Non défini" -#: src/libslic3r/miniz_extension.cpp:91 -msgid "undefined error" -msgstr "erreur non définie" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:294 msgid "Underflow" msgstr "Soupassement" @@ -14819,6 +14295,10 @@ msgstr[1] "Annuler %1$d Actions" msgid "Undo / Redo is processing" msgstr "Annuler / Rétablir est en cours de traitement" +#: src/slic3r/GUI/GLCanvas3D.cpp:3916 +msgid "Undo History" +msgstr "Annuler Historique" + #: src/slic3r/GUI/NotificationManager.hpp:772 msgid "Undo desktop integration failed." msgstr "Échec de l'annulation de l'intégration au bureau." @@ -14827,10 +14307,6 @@ msgstr "Échec de l'annulation de l'intégration au bureau." msgid "Undo desktop integration was successful." msgstr "L'annulation de l'intégration au bureau a réussi." -#: src/slic3r/GUI/GLCanvas3D.cpp:3916 -msgid "Undo History" -msgstr "Annuler Historique" - #: resources/data/hints.ini: [hint:Undo/redo history] msgid "" "Undo/redo history\n" @@ -14842,10 +14318,6 @@ msgstr "" "annuler/rétablir pour voir l'historique des modifications et pour " "annuler ou rétablir plusieurs actions à la fois ?" -#: src/libslic3r/miniz_extension.cpp:115 -msgid "unexpected decompressed size" -msgstr "volume de décompression inattendu" - #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:28 #: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:317 msgid "Unknown" @@ -14862,10 +14334,6 @@ msgstr "Une erreur inconnue s'est produite" msgid "Unknown error occured during exporting G-code." msgstr "Une erreur inconnue s'est produite lors de l'exportation du G-code." -#: src/slic3r/GUI/WipeTowerDialog.cpp:308 -msgid "unloaded" -msgstr "déchargé" - #: src/libslic3r/PrintConfig.cpp:908 msgid "Unloading speed" msgstr "Vitesse de déchargement" @@ -14874,34 +14342,6 @@ msgstr "Vitesse de déchargement" msgid "Unloading speed at the start" msgstr "Vitesse de déchargement au démarrage" -#: src/slic3r/GUI/Tab.cpp:4257 -msgid "UNLOCKED LOCK" -msgstr "CADENAS OUVERT" - -#: src/slic3r/GUI/Tab.cpp:4283 -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 "" -"L'icône CADENAS OUVERT 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" -"Cliquez pour régler tous les paramètres pour le groupe d'options actuel sur " -"les valeurs du système (ou par défaut)." - -#: src/slic3r/GUI/Tab.cpp:4298 -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 "" -"L'icône CADENAS OUVERT indique que la valeur a été changée et n'est pas " -"égale à la valeur du système (ou par défaut).\n" -"Cliquez pour réinitialiser la valeur actuelle sur les valeurs du système (ou " -"par défaut)." - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 msgid "Unsaved Changes" msgstr "Modifications non enregistrées" @@ -14910,26 +14350,6 @@ msgstr "Modifications non enregistrées" msgid "Unselect gizmo or clear selection" msgstr "Désélectionner le Gizmo ou supprimer la sélection" -#: src/libslic3r/miniz_extension.cpp:119 -msgid "unsupported central directory size" -msgstr "volume du répertoire central non supporté" - -#: src/libslic3r/miniz_extension.cpp:99 -msgid "unsupported encryption" -msgstr "cryptage non supporté" - -#: src/libslic3r/miniz_extension.cpp:101 -msgid "unsupported feature" -msgstr "fonction non supportée" - -#: src/libslic3r/miniz_extension.cpp:97 -msgid "unsupported method" -msgstr "méthode non supportée" - -#: src/libslic3r/miniz_extension.cpp:109 -msgid "unsupported multidisk archive" -msgstr "archive multidisque non supportée" - #: src/slic3r/GUI/OpenGLManager.cpp:265 msgid "Unsupported OpenGL version" msgstr "Version d'OpenGL non supportée" @@ -14943,10 +14363,6 @@ msgstr "Sélection non supportée" msgid "Untitled" msgstr "Sans titre" -#: src/slic3r/GUI/GCodeViewer.cpp:3176 -msgid "up to" -msgstr "jusqu'à" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 msgid "Update available" msgstr "Mise à jour disponible" @@ -15018,6 +14434,10 @@ msgstr "" "Utiliser \"Pair-impair\" pour les modèles d'avions 3DLabPrint. Utiliser " "\"Fermer les trous\" pour fermer tous les trous du modèle." +#: src/slic3r/GUI/Preferences.cpp:268 +msgid "Use Retina resolution for the 3D scene" +msgstr "Utiliser la résolution Retina pour la scène 3D" + #: src/slic3r/GUI/DoubleSlider.cpp:1615 src/slic3r/GUI/GUI_Factories.cpp:787 msgid "Use another extruder" msgstr "Utiliser un autre extrudeur" @@ -15073,10 +14493,6 @@ msgstr "Utiliser l'appareil photo en perspective" msgid "Use relative E distances" msgstr "Utiliser des valeurs E relatives" -#: src/slic3r/GUI/Preferences.cpp:268 -msgid "Use Retina resolution for the 3D scene" -msgstr "Utiliser la résolution Retina pour la scène 3D" - #: src/slic3r/GUI/Preferences.cpp:507 msgid "Use system menu for application" msgstr "Utiliser le menu système pour l'application" @@ -15100,15 +14516,6 @@ msgstr "" msgid "Use volumetric E" msgstr "E Volumétrique" -#: src/slic3r/GUI/DoubleSlider.cpp:1634 -msgid "used" -msgstr "utilisé" - -#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 -#: src/slic3r/GUI/GCodeViewer.cpp:3562 -msgid "Used filament" -msgstr "Filament utilisé" - #: src/slic3r/GUI/Plater.cpp:296 src/slic3r/GUI/Plater.cpp:1376 msgid "Used Filament (g)" msgstr "Filament Utilisé (g)" @@ -15137,6 +14544,11 @@ msgstr "Matériau Utilisé (ml)" msgid "Used Material (unit)" msgstr "Matériau Utilisé (unité)" +#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 +#: src/slic3r/GUI/GCodeViewer.cpp:3562 +msgid "Used filament" +msgstr "Filament utilisé" + #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:25 src/libslic3r/PrintConfig.cpp:317 msgid "User" msgstr "Utilisateur" @@ -15147,10 +14559,6 @@ msgstr "Utilisateur" msgid "User presets" msgstr "Préréglages utilisateur" -#: src/libslic3r/miniz_extension.cpp:149 -msgid "validation failed" -msgstr "échec de la validation" - #: src/slic3r/GUI/ButtonsDescription.cpp:57 msgid "Value is the same as the system value" msgstr "La valeur est identique à la valeur du système" @@ -15171,6 +14579,11 @@ msgstr "Les valeurs de cette colonne sont pour le mode Normal" msgid "Values in this column are for Stealth mode" msgstr "Les valeurs de cette colonne sont pour le mode Silencieux" +#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 +msgid "Variable layer height" +msgstr "Hauteur de couche variable" + #: resources/data/hints.ini: [hint:Variable layer height] msgid "" "Variable layer height\n" @@ -15184,11 +14597,6 @@ msgstr "" "elles ? Essayez l'outil de Hauteur de couche variable. (Non " "disponible pour les imprimantes SLA.)" -#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 -msgid "Variable layer height" -msgstr "Hauteur de couche variable" - #: src/slic3r/GUI/GLCanvas3D.cpp:1273 msgid "Variable layer height - Adaptive" msgstr "Hauteur de couche variable - Adaptatif" @@ -15205,14 +14613,6 @@ msgstr "Hauteur de couche variable - Réinitialisation" msgid "Variable layer height - Smooth all" msgstr "Hauteur de couche variable - Tout lisser" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "variants" -msgstr "variantes" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 -msgid "vendor" -msgstr "fabriquant" - #: src/slic3r/GUI/ConfigWizard.cpp:642 msgid "Vendor:" msgstr "Fournisseur :" @@ -15226,18 +14626,14 @@ msgstr "G-code commenté" msgid "Version" msgstr "Version" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 -msgid "version" -msgstr "version" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 +msgid "Vertical Slider" +msgstr "Barre de Défilement Verticale" #: src/slic3r/GUI/Tab.cpp:1457 msgid "Vertical shells" msgstr "Parois verticales" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 -msgid "Vertical Slider" -msgstr "Barre de Défilement Verticale" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:218 #: src/slic3r/GUI/KBShortcutsDialog.cpp:222 msgid "Vertical slider - Move active thumb Down" @@ -15315,6 +14711,39 @@ msgstr "Débit volumétrique (mm³/s)" msgid "Volumetric speed" msgstr "Vitesse volumétrique" +#: src/slic3r/GUI/NotificationManager.cpp:1459 +#: src/slic3r/GUI/NotificationManager.cpp:1486 +#: src/slic3r/GUI/NotificationManager.cpp:1494 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +msgid "WARNING:" +msgstr "ATTENTION :" + +#: src/slic3r/GUI/Tab.cpp:4264 +msgid "WHITE BULLET" +msgstr "PUCE BLANCHE" + +#: src/slic3r/GUI/Tab.cpp:4286 +msgid "WHITE BULLET icon indicates a non system (or non default) preset." +msgstr "" +"L'icône en forme de PUCE BLANCHE indique un préréglage non-système (ou non " +"par défaut)." + +#: src/slic3r/GUI/Tab.cpp:4289 +msgid "" +"WHITE BULLET icon indicates that the settings are the same as in the last " +"saved preset for the current option group." +msgstr "" +"L'icône en forme de PUCE BLANCHE indique que les réglages sont identiques au " +"dernier préréglage sauvegardé pour le groupe d'options actuel." + +#: src/slic3r/GUI/Tab.cpp:4304 +msgid "" +"WHITE BULLET icon indicates that the value is the same as in the last saved " +"preset." +msgstr "" +"L'icône PUCE BLANCHE indique que la valeur est la même que pour le dernier " +"préréglage sauvegardé." + #: src/libslic3r/PrintConfig.cpp:3740 msgid "Wall thickness" msgstr "Épaisseur de la paroi" @@ -15327,13 +14756,6 @@ msgstr "Épaisseur de la paroi" msgid "Warning" msgstr "Alerte" -#: src/slic3r/GUI/NotificationManager.cpp:1459 -#: src/slic3r/GUI/NotificationManager.cpp:1486 -#: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 -msgid "WARNING:" -msgstr "ATTENTION :" - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:590 #, boost-format msgid "" @@ -15393,10 +14815,6 @@ msgstr "" "projet de fichier sur l'application, une boite de dialogue apparait pour " "vous demander de sélectionner l'action à accomplir sur le fichier à charger." -#: src/slic3r/GUI/PresetHints.cpp:192 -msgid "when printing" -msgstr "pendant l'impression des" - #: src/libslic3r/PrintConfig.cpp:530 msgid "" "When printing multi-material objects, this settings will make Slic3r to clip " @@ -15493,32 +14911,6 @@ msgstr "" "exprimera cette quantité de filament en plus. Ce réglage est rarement " "nécessaire." -#: src/slic3r/GUI/Tab.cpp:4264 -msgid "WHITE BULLET" -msgstr "PUCE BLANCHE" - -#: src/slic3r/GUI/Tab.cpp:4286 -msgid "WHITE BULLET icon indicates a non system (or non default) preset." -msgstr "" -"L'icône en forme de PUCE BLANCHE indique un préréglage non-système (ou non " -"par défaut)." - -#: src/slic3r/GUI/Tab.cpp:4289 -msgid "" -"WHITE BULLET icon indicates that the settings are the same as in the last " -"saved preset for the current option group." -msgstr "" -"L'icône en forme de PUCE BLANCHE indique que les réglages sont identiques au " -"dernier préréglage sauvegardé pour le groupe d'options actuel." - -#: src/slic3r/GUI/Tab.cpp:4304 -msgid "" -"WHITE BULLET icon indicates that the value is the same as in the last saved " -"preset." -msgstr "" -"L'icône PUCE BLANCHE indique que la valeur est la même que pour le dernier " -"préréglage sauvegardé." - #: src/slic3r/GUI/Tab.cpp:3999 msgid "Whole word" msgstr "Mot entier" @@ -15564,6 +14956,11 @@ msgstr "" msgid "Wipe" msgstr "Nettoyer" +#: src/slic3r/GUI/ConfigManipulation.cpp:126 +#: src/slic3r/GUI/ConfigManipulation.cpp:146 +msgid "Wipe Tower" +msgstr "Tour de Nettoyage" + #: src/libslic3r/PrintConfig.cpp:3013 msgid "Wipe into this object" msgstr "Nettoyer dans cet objet" @@ -15582,15 +14979,6 @@ msgstr "Options de nettoyage" msgid "Wipe tower" msgstr "Tour de nettoyage" -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "wipe tower" -msgstr "tour de nettoyage" - -#: src/slic3r/GUI/ConfigManipulation.cpp:126 -#: src/slic3r/GUI/ConfigManipulation.cpp:146 -msgid "Wipe Tower" -msgstr "Tour de Nettoyage" - #: src/slic3r/GUI/WipeTowerDialog.cpp:173 msgid "Wipe tower - Purging volume adjustment" msgstr "Tour de nettoyage - Ajustement du volume de purge" @@ -15615,10 +15003,6 @@ msgstr "Angle de rotation de la tour de nettoyage par rapport à l'axe X." msgid "Wipe while retracting" msgstr "Nettoyer lors des rétractions" -#: src/slic3r/GUI/PresetHints.cpp:193 -msgid "with a volumetric rate" -msgstr "avec un débit volumétrique" - #: src/libslic3r/PrintConfig.cpp:2122 msgid "" "With bowden extruders, it may be wise to do some amount of quick retract " @@ -15669,10 +15053,6 @@ msgstr "" "\n" "Ensembles de configuration mis à jour :" -#: src/libslic3r/miniz_extension.cpp:151 -msgid "write calledback failed" -msgstr "échec de l'écriture du rappel" - #: src/libslic3r/PrintConfig.cpp:4306 msgid "Write information about the model to the console." msgstr "" @@ -15686,6 +15066,10 @@ msgstr "Mauvais mot de passe" msgid "X coordinate of the left front corner of a wipe tower" msgstr "Coordonnée X du coin avant gauche d'une tour de nettoyage" +#: src/libslic3r/PrintConfig.cpp:3027 +msgid "XY Size Compensation" +msgstr "Compensation de Taille XY" + #: src/libslic3r/PrintConfig.cpp:2517 msgid "XY separation between an object and its support" msgstr "Séparation XY entre un objet et ses supports" @@ -15699,10 +15083,6 @@ msgstr "" "pourcentage (par exemple 50%), elle sera calculée à partir de la largeur du " "périmètre extérieur." -#: src/libslic3r/PrintConfig.cpp:3027 -msgid "XY Size Compensation" -msgstr "Compensation de Taille XY" - #: src/libslic3r/PrintConfig.cpp:2976 msgid "Y coordinate of the left front corner of a wipe tower" msgstr "Coordonnée Y du coin avant gauche d'une tour de nettoyage" @@ -15766,6 +15146,12 @@ msgstr "" "Vous pouvez inscrire ici vos commentaires personnels. Ce texte sera ajouté " "au commentaire en entête du G-Code." +#: src/libslic3r/PrintConfig.cpp:3383 +msgid "You can put your notes regarding the SLA print material here." +msgstr "" +"Vous pouvez mettre ici vos annotations concernant le matériau d'impression " +"SLA." + #: src/libslic3r/PrintConfig.cpp:874 msgid "You can put your notes regarding the filament here." msgstr "Vous pouvez saisir vos remarques concernant le filament ici." @@ -15774,12 +15160,6 @@ msgstr "Vous pouvez saisir vos remarques concernant le filament ici." msgid "You can put your notes regarding the printer here." msgstr "Vous pouvez saisir ici vos observations concernant l'imprimante." -#: src/libslic3r/PrintConfig.cpp:3383 -msgid "You can put your notes regarding the SLA print material here." -msgstr "" -"Vous pouvez mettre ici vos annotations concernant le matériau d'impression " -"SLA." - #: src/libslic3r/PrintConfig.cpp:637 msgid "" "You can set this to a positive value to disable fan at all during the first " @@ -16022,6 +15402,622 @@ msgstr "" "Zoomer sur l'objet sélectionné\n" "ou sur tous les objets sur la scène, si aucun n'est sélectionné" +#: src/slic3r/GUI/GCodeViewer.cpp:3182 +msgid "above" +msgstr "au-dessus" + +#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 +msgid "active" +msgstr "actif" + +#: src/libslic3r/miniz_extension.cpp:121 +msgid "allocation failed" +msgstr "échec de l'allocation" + +#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 +msgid "approximate seconds" +msgstr "secondes approximatives" + +#: src/libslic3r/miniz_extension.cpp:147 +msgid "archive is too large" +msgstr "l'archive est trop volumineuse" + +#: src/slic3r/GUI/MainFrame.cpp:655 +msgid "based on Slic3r" +msgstr "basé sur Slic3r" + +#: src/libslic3r/miniz_extension.cpp:141 +msgid "buffer too small" +msgstr "buffer trop petit" + +#: src/slic3r/GUI/PresetHints.cpp:191 +msgid "by the print profile maximum" +msgstr "par le maximum du profil de l'imprimante" + +#: src/libslic3r/miniz_extension.cpp:113 +msgid "compression failed" +msgstr "échec de la compression" + +#: src/slic3r/GUI/DoubleSlider.cpp:1458 +msgid "continue" +msgstr "continuer" + +#: src/libslic3r/miniz_extension.cpp:111 +msgid "decompression failed or archive is corrupted" +msgstr "la décompression a échoué ou l'archive est corrompue" + +#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 +#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 +msgid "default" +msgstr "défaut" + +#: src/slic3r/GUI/Tab.cpp:1400 +msgid "default SLA material profile" +msgstr "profil par défaut du matériau SLA" + +#: src/slic3r/GUI/Tab.cpp:1404 +msgid "default SLA print profile" +msgstr "profil d'impression SLA par défaut" + +#: src/slic3r/GUI/GCodeViewer.cpp:3388 +msgid "default color" +msgstr "couleur par défaut" + +#: src/slic3r/GUI/Tab.cpp:1386 +msgid "default filament profile" +msgstr "profil du filament par défaut" + +#: src/slic3r/GUI/Tab.cpp:1383 +msgid "default print profile" +msgstr "profil d'impression par défaut" + +#: src/slic3r/GUI/Field.cpp:190 +msgid "default value" +msgstr "valeur par défaut" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "delete" +msgstr "supprimer" + +#: src/slic3r/GUI/Plater.cpp:3652 +msgid "differs from the original file" +msgstr "diffère du fichier d'origine" + +#: src/slic3r/GUI/Plater.cpp:5202 +msgid "does not contain valid gcode." +msgstr "ne contient pas de gcode valide." + +#: src/slic3r/GUI/PresetHints.cpp:59 +#, boost-format +msgid "except for the first %1% layers." +msgstr "sauf pour les %1% première couches." + +#: src/slic3r/GUI/PresetHints.cpp:61 +msgid "except for the first layer." +msgstr "sauf pour la première couche." + +#: src/slic3r/GUI/PresetHints.cpp:170 +msgid "external perimeters" +msgstr "périmètres externes" + +#: src/libslic3r/miniz_extension.cpp:103 +msgid "failed finding central directory" +msgstr "impossible de trouver le répertoire central" + +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +msgid "filament" +msgstr "filament" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 +msgid "filaments" +msgstr "filaments" + +#: src/libslic3r/miniz_extension.cpp:131 +msgid "file close failed" +msgstr "échec de la fermeture du fichier" + +#: src/libslic3r/miniz_extension.cpp:125 +msgid "file create failed" +msgstr "échec de création du fichier" + +#: src/libslic3r/miniz_extension.cpp:145 +msgid "file not found" +msgstr "fichier non trouvé" + +#: src/libslic3r/miniz_extension.cpp:123 +msgid "file open failed" +msgstr "échec de l'ouverture du fichier" + +#: src/libslic3r/miniz_extension.cpp:129 +msgid "file read failed" +msgstr "échec de lecture du fichier" + +#: src/libslic3r/miniz_extension.cpp:133 +msgid "file seek failed" +msgstr "impossible de trouver le fichier" + +#: src/libslic3r/miniz_extension.cpp:135 +msgid "file stat failed" +msgstr "impossible d'établir des statistiques pour ce fichier" + +#: src/libslic3r/miniz_extension.cpp:95 +msgid "file too large" +msgstr "fichier trop volumineux" + +#: src/libslic3r/miniz_extension.cpp:127 +msgid "file write failed" +msgstr "échec d'écriture du fichier" + +#: src/slic3r/GUI/PresetHints.cpp:188 +msgid "flow rate is maximized" +msgstr "le débit est maximisé" + +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:4266 +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/GCodeViewer.cpp:3190 +msgid "from" +msgstr "de" + +#: src/slic3r/GUI/Tab.cpp:1412 +msgid "full profile name" +msgstr "nom de profil complet" + +#: src/libslic3r/PrintConfig.cpp:1057 +msgid "g" +msgstr "g" + +#: src/libslic3r/PrintConfig.cpp:1006 +msgid "g/cm³" +msgstr "g/cm³" + +#: src/libslic3r/PrintConfig.cpp:3288 +msgid "g/ml" +msgstr "g/ml" + +#: src/slic3r/GUI/Plater.cpp:4107 +msgid "generated warnings" +msgstr "avertissements générés" + +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +msgid "in" +msgstr "in" + +#. TRN Description for "UNLOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4259 +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 "" +"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" +"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" +#: src/slic3r/GUI/Tab.cpp:4255 +msgid "" +"indicates that the settings are the same as the system (or default) values " +"for the current option group" +msgstr "" +"indique que les paramètres sont les mêmes que les valeurs système (ou par " +"défaut) pour le groupe d'options en cours" + +#. TRN Description for "BACK ARROW" +#: src/slic3r/GUI/Tab.cpp:4271 +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 "" +"indique que les paramètres ont été changés et qu'ils ne sont pas identiques " +"au dernier préréglage enregistré du groupe d'options en cours.\n" +"Cliquez sur l'icône FLÈCHE ARRIÈRE pour restaurer tous les paramètres du " +"groupe d'options en cours avec les valeurs du dernier préréglage enregistré." + +#: src/slic3r/GUI/PresetHints.cpp:174 +msgid "infill" +msgstr "remplissage" + +#: src/libslic3r/miniz_extension.cpp:143 +msgid "internal error" +msgstr "erreur interne" + +#: src/libslic3r/miniz_extension.cpp:139 +msgid "invalid filename" +msgstr "nom de fichier non valide" + +#: src/libslic3r/miniz_extension.cpp:107 +msgid "invalid header or archive is corrupted" +msgstr "entête non valide ou archive corrompue" + +#: src/libslic3r/miniz_extension.cpp:137 +msgid "invalid parameter" +msgstr "paramètre non valide" + +#: src/slic3r/GUI/GUI_App.cpp:266 +msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." +msgstr "est basé sur Slic3r par Alessandro Ranellucci et la communauté RepRap." + +#. TRN "Slic3r _is licensed under the_ License" +#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 +msgid "is licensed under the" +msgstr "est sous licence" + +#: src/libslic3r/PrintConfig.cpp:3281 +msgid "kg" +msgstr "kg" + +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 +#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 +#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 +#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 +#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 +msgid "layers" +msgstr "couches" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:309 +msgid "loaded" +msgstr "chargé" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 +msgid "max PrusaSlicer version" +msgstr "Version maximum de PrusaSlicer" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 +msgid "min PrusaSlicer version" +msgstr "Version minimum de PrusaSlicer" + +#: src/libslic3r/PrintConfig.cpp:3274 +msgid "ml" +msgstr "ml" + +#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 +#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 +#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 +#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 +#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 +#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 +#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 +#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 +#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 +#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 +#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 +#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 +#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 +#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 +#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 +#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 +#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 +#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 +#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 +#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 +#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 +#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 +#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 +#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 +#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 +#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 +#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 +#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 +#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 +#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 +#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 +#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 +#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 +#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 +#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 +#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 +#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 +#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 +#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 +#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 +#: src/libslic3r/PrintConfig.cpp:3767 +msgid "mm" +msgstr "mm" + +#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 +#: src/libslic3r/PrintConfig.cpp:2148 +msgid "mm (zero to disable)" +msgstr "mm (zéro pour désactiver)" + +#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 +#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 +#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 +#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 +#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 +#: src/libslic3r/PrintConfig.cpp:2845 +msgid "mm or %" +msgstr "mm ou %" + +#: src/libslic3r/PrintConfig.cpp:385 +msgid "mm or % (zero to disable)" +msgstr "mm ou % (zéro pour désactiver)" + +#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 +#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 +#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 +#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 +#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 +#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 +#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 +#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 +#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 +#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 +#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 +msgid "mm/s" +msgstr "mm/s" + +#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 +#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 +#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 +#: src/libslic3r/PrintConfig.cpp:2859 +msgid "mm/s or %" +msgstr "mm/s ou %" + +#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 +#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 +#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 +#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 +#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 +msgid "mm/s²" +msgstr "mm/s²" + +#: src/libslic3r/PrintConfig.cpp:2316 +msgid "mm²" +msgstr "mm²" + +#: src/libslic3r/PrintConfig.cpp:957 +msgid "mm³" +msgstr "mm³" + +#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 +#: src/libslic3r/PrintConfig.cpp:1782 +msgid "mm³/s" +msgstr "mm³/s" + +#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 +msgid "mm³/s²" +msgstr "mm³/s²" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "model" +msgstr "modèle" + +#: src/slic3r/GUI/GUI_App.cpp:2159 +msgid "modified" +msgstr "modifié" + +#: src/libslic3r/PrintConfig.cpp:3295 +msgid "money/bottle" +msgstr "prix/bouteille" + +#: src/libslic3r/PrintConfig.cpp:1047 +msgid "money/kg" +msgstr "argent/kg" + +#: src/slic3r/GUI/Plater.cpp:1428 +msgid "normal mode" +msgstr "mode normal" + +#: src/libslic3r/miniz_extension.cpp:105 +msgid "not a ZIP archive" +msgstr "n'est pas une archive ZIP" + +#: src/slic3r/GUI/ConfigWizard.cpp:262 +msgid "nozzle" +msgstr "buse" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "object" +msgid_plural "objects" +msgstr[0] "objet" +msgstr[1] "objets" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "objects" +msgstr "objets" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 +msgid "of a current Object" +msgstr "d'un Objet en cours" + +#: src/slic3r/GUI/DoubleSlider.cpp:1431 +msgid "or press \"+\" key" +msgstr "ou appuyez sur la touche \"+\"" + +#: src/slic3r/GUI/Field.cpp:193 +msgid "parameter name" +msgstr "nom du paramètre" + +#: src/slic3r/GUI/PresetHints.cpp:171 +msgid "perimeters" +msgstr "périmètres" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +msgid "print" +msgstr "imprimer" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +msgid "printer" +msgstr "imprimer" + +#: src/slic3r/GUI/Tab.cpp:1375 +msgid "printer model" +msgstr "modèle de l'imprimante" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "remove" +msgstr "retirer" + +#: src/slic3r/Utils/PresetUpdater.cpp:815 +#, c-format, boost-format +msgid "requires max. %s" +msgstr "nécessite max. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:812 +#, c-format, boost-format +msgid "requires min. %s" +msgstr "nécessite min. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:808 +#, c-format, boost-format +msgid "requires min. %s and max. %s" +msgstr "nécessite min. %s et max. %s" + +#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 +#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 +#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 +#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 +#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 +#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 +#: src/libslic3r/PrintConfig.cpp:3349 +msgid "s" +msgstr "s" + +#: src/slic3r/GUI/PresetHints.cpp:176 +msgid "solid infill" +msgstr "remplissage solide" + +#: src/slic3r/GUI/Plater.cpp:1435 +msgid "stealth mode" +msgstr "mode silencieux" + +#: src/slic3r/GUI/PresetHints.cpp:181 +msgid "support" +msgstr "support" + +#: src/slic3r/GUI/PresetHints.cpp:183 +msgid "support interface" +msgstr "interface du support" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "supports and pad" +msgstr "supports et socle" + +#: src/slic3r/GUI/Tab.cpp:1413 +msgid "symbolic profile name" +msgstr "nom de profil symbolique" + +#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 +msgid "the following characters are not allowed:" +msgstr "les caractères suivant ne sont pas autorisés :" + +#: src/slic3r/GUI/SavePresetDialog.cpp:110 +msgid "the following suffix is not allowed:" +msgstr "le suffixe suivant n'est pas autorisé :" + +#: src/slic3r/GUI/GCodeViewer.cpp:3190 +msgid "to" +msgstr "à" + +#: src/libslic3r/miniz_extension.cpp:93 +msgid "too many files" +msgstr "trop de fichiers" + +#: src/slic3r/GUI/PresetHints.cpp:178 +msgid "top solid infill" +msgstr "remplissage solide supérieur" + +#: src/libslic3r/miniz_extension.cpp:91 +msgid "undefined error" +msgstr "erreur non définie" + +#: src/libslic3r/miniz_extension.cpp:115 +msgid "unexpected decompressed size" +msgstr "volume de décompression inattendu" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:308 +msgid "unloaded" +msgstr "déchargé" + +#: src/libslic3r/miniz_extension.cpp:119 +msgid "unsupported central directory size" +msgstr "volume du répertoire central non supporté" + +#: src/libslic3r/miniz_extension.cpp:99 +msgid "unsupported encryption" +msgstr "cryptage non supporté" + +#: src/libslic3r/miniz_extension.cpp:101 +msgid "unsupported feature" +msgstr "fonction non supportée" + +#: src/libslic3r/miniz_extension.cpp:97 +msgid "unsupported method" +msgstr "méthode non supportée" + +#: src/libslic3r/miniz_extension.cpp:109 +msgid "unsupported multidisk archive" +msgstr "archive multidisque non supportée" + +#: src/slic3r/GUI/GCodeViewer.cpp:3176 +msgid "up to" +msgstr "jusqu'à" + +#: src/slic3r/GUI/DoubleSlider.cpp:1634 +msgid "used" +msgstr "utilisé" + +#: src/libslic3r/miniz_extension.cpp:149 +msgid "validation failed" +msgstr "échec de la validation" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "variants" +msgstr "variantes" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 +msgid "vendor" +msgstr "fabriquant" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 +msgid "version" +msgstr "version" + +#: src/slic3r/GUI/PresetHints.cpp:192 +msgid "when printing" +msgstr "pendant l'impression des" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "wipe tower" +msgstr "tour de nettoyage" + +#: src/slic3r/GUI/PresetHints.cpp:193 +msgid "with a volumetric rate" +msgstr "avec un débit volumétrique" + +#: src/libslic3r/miniz_extension.cpp:151 +msgid "write calledback failed" +msgstr "échec de l'écriture du rappel" + #: src/libslic3r/PrintConfig.cpp:456 src/libslic3r/PrintConfig.cpp:1075 #: src/libslic3r/PrintConfig.cpp:2232 src/libslic3r/PrintConfig.cpp:2242 #: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2774 @@ -17178,6 +17174,10 @@ msgstr "AddToPropertyCollection appelé sans additionneur valable" msgid "Adding book %s" msgstr "Ajouter le manuel %s" +#: ../src/common/preferencescmn.cpp:43 +msgid "Advanced" +msgstr "Avancé" + #: ../src/richtext/richtextliststylepage.cpp:435 msgid "After a paragraph:" msgstr "Après un paragraphe:" @@ -17445,6 +17445,10 @@ msgstr "Bord" msgid "Borders" msgstr "Bords" +#: ../src/richtext/richtextsizepage.cpp:288 ../src/common/stockitem.cpp:144 +msgid "Bottom" +msgstr "Bas" + #: ../src/generic/prntdlgg.cpp:893 msgid "Bottom margin (mm):" msgstr "Marge de bas de page (mm) :" @@ -18255,6 +18259,10 @@ msgstr "Copié dans le presse-papiers « %s »" msgid "Copies:" msgstr "Copies :" +#: ../src/common/stockitem.cpp:150 ../src/stc/stc_i18n.cpp:18 +msgid "Copy" +msgstr "Copier" + #: ../src/common/stockitem.cpp:258 msgid "Copy selection" msgstr "Copier la sélection" diff --git a/resources/localization/hu/PrusaSlicer_hu.po b/resources/localization/hu/PrusaSlicer_hu.po index a9f8882bd..09567ee4b 100644 --- a/resources/localization/hu/PrusaSlicer_hu.po +++ b/resources/localization/hu/PrusaSlicer_hu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -602,7 +602,7 @@ msgstr "Aktív" msgid "PrusaSlicer version" msgstr "PrusaSlicer verzió" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "nyomtatás" @@ -610,17 +610,17 @@ msgstr "nyomtatás" msgid "filaments" msgstr "filamentek" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "SLA nyomtatás" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "SLA anyag" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "nyomtató" @@ -679,7 +679,7 @@ msgstr "Standard" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "Összes" @@ -770,7 +770,7 @@ msgstr "SLA anyagok" msgid "All installed printers are compatible with the selected %1%." msgstr "Minden telepített nyomtató kompatibilis a kiválasztott %1% -val." -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "filament" @@ -865,7 +865,7 @@ msgstr "" "pillanatfelvétel készül." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "Újratöltés lemezről" @@ -1175,7 +1175,7 @@ msgstr "Befejezés" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "Mégse" @@ -1248,7 +1248,7 @@ msgstr "" "létrejött." #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "Asztal integráció" @@ -1741,8 +1741,8 @@ msgid "parameter name" msgstr "paraméter név" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "N/A" @@ -1951,7 +1951,7 @@ msgstr "Hozzáadás a tárgyasztalhoz" msgid "Add selected shape(s) to the bed" msgstr "Kijelölt alakzat(ok) hozzáadása a tárgyasztalhoz" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "Hozzáadás" @@ -2156,7 +2156,7 @@ msgid "Wipe" msgstr "Törlés" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "Opciók" @@ -2425,7 +2425,7 @@ msgid "Add..." msgstr "Hozzáadás..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "Összes törlése" @@ -3354,7 +3354,7 @@ msgstr "Kritikus hiba" msgid "Internal error: %1%" msgstr "Belső hiba: %1%" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " @@ -3364,7 +3364,7 @@ msgstr "" "Próbálja meg manuálisan törölni a fájlt a hiba elhárításához. A felhasználói " "profilok nem lesznek érintettek." -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." @@ -3372,12 +3372,12 @@ msgstr "" "Hiba a PrusaGCodeViewer konfigurációs fájl elemzése során, valószínűleg " "sérült. Próbálja meg manuálisan törölni a fájlt a hiba elhárításához." -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "Ön a %1% %2% verzióját nyitja meg." -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3395,7 +3395,7 @@ msgstr "" "Ha igen, akkor az aktív konfigurációról biztonsági másolat készül az új " "konfiguráció importálása előtt." -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3408,19 +3408,19 @@ msgstr "" "\n" "Importáljuk ezt a meglévő konfigurációt?" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "Importálás_" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "Ne importálja" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "Folytatás és az újabb konfiguráció importálása?" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3436,7 +3436,7 @@ msgstr "" "https://www.prusa3d.cz/prusaslicer/ oldalról.\n" "Szeretné folytatni?" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" @@ -3445,46 +3445,46 @@ msgstr "" "%s\n" "Szeretné folytatni?" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "Emlékezzen a választásomra" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "Konfiguráció betöltése" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "Elérhető a(z) %1% új kiadott verziója." -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "Tekintse meg a Letöltési oldalt." -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "Elérhető a(z) %1% új kiadás előtti verziója." -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "Tekintse meg a kiadások oldalt." -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "A beállítások fül előkészítése" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "Ablak pozíciójának visszaállítása indításkor" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "A PrusaSlicer összeomlást követően indult el" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3510,24 +3510,24 @@ msgstr "" "\n" "Translated with www.DeepL.com/Translator (free version)" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "\"%1%\" letiltása" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "Hagyja engedélyezve a \"%1%\"-ot" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" "A következő előbeállítások állnak rendelkezésre a \"Nyomtató feltöltés\" " "mentett beállításaival" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" @@ -3537,7 +3537,7 @@ msgstr "" "nyomtató beállításaiban. \n" "A beállítások a fizikai nyomtatók beállításaiban lesznek elérhetőek." -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" @@ -3547,138 +3547,138 @@ msgstr "" "létrehozásuk során.\n" "Megjegyzés: Ez a név később módosítható a fizikai nyomtató beállításainál" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "Információ" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "Újralétrehozás_" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "Az aktuális előbeállítások betöltése" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "Mód nézet betöltése" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "Válasszon ki egy fájlt (3MF/AMF):" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Válasszon ki egy vagy több fájlt (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "Válasszon ki egy fájlt (GCODE/.GCO/.G/.ngc/NGC):" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "Egy alkalmazás nyelvének megváltoztatása" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "Válassza ki a nyelvet" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "Nyelv" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "módosított" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "%s Fut_" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "Konfigurációs Pillanatfelvételek" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "Konfigurációs pillanatfelvételek megtekintése / aktiválása" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "Konfigurációs Pillanatfelvétel Készítése" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "Pillanatfelvétel készítése az aktuális konfigurációról" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "Konfigurációs Frissítések Keresése" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "Konfigurációs frissítések keresése" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "Beállítások" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "Alkalmazás beállítások" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "Egyszerű" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "Egyszerű Megjelenítési Mód" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "Haladó" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "Haladó Megjelenítési Mód" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "Szakértő" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "Szakértő Megjelenítési Mód" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "Mód" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "%s Megjelenítési Mód" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "Nyelv" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "Nyomtató &Firmware Feltöltése" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "Firmware feltöltése Arduino alapú nyomtatóra" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "Konfigurációs pillanatkép készítése" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." @@ -3686,32 +3686,32 @@ msgstr "" "Néhány előbeállítás módosult, és a nem mentett változásokat a konfigurációs " "pillanatkép nem rögzíti." -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "Pillanatkép neve" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "Konfigurációs pillanatkép betöltése" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "Folytatja a konfigurációs pillanatkép aktiválását: %1%?" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "Nem sikerült a konfigurációs pillanatkép aktiválása." -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "Alkalmazás újraindítása" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "Nyelv kiválasztása" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3719,89 +3719,89 @@ msgstr "" "A nyelv megváltoztatása újraindítja az alkalmazást.\n" "Elveszíti a tárgyasztal tartalmát." -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "Akarja folytatni?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "Konfiguráció" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "Az előbeállítás módosításai sikeresen elmentésre kerültek" msgstr[1] "Az előbeállítások módosításai sikeresen elmentésre kerültek" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "Új projekt esetén az összes módosítás visszaállításra kerül" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "Új projekt betöltése az jelenlegi projekt módosítása közben." -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "A projekt betöltődik" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "Új projekt megnyitása, miközben néhány előbeállítás nincs elmentve." -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "A feltöltések még mindig folyamatban vannak" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "Megállítja őket, és akkor is folytatja?" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "Folyamatban lévő feltöltések" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "" "SLA technológiával nem lehetséges több részből álló objektum(ok) nyomtatása." -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "Ellenőrizze az objektumlistát, előbeállítás váltás előtt." -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "Konfiguráció szerkesztése a ConfigWizardból_" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "Válasszon egy gcode fájlt:" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "Hiperhivatkozás megnyitása az alapértelmezett böngészőben?" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "PrusaSlicer: Hiperhivatkozás megnyitása" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "A hiperhivatkozások böngészőben való megnyitásának letiltása" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "A PrusaSlicer emlékezni fog a választására." -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" "Erről nem fogjuk újra megkérdezni a hiperhivatkozások lebegtetésével " "kapcsolatban." -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -3810,8 +3810,8 @@ msgstr "" "Látogasson el a \"Beállítások\" menüpontba, és jelölje be a \"%1%\" \n" "lehetőséget a választása módosításához." -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "PrusaSlicer: Ne kérdezzen rá újra" @@ -3917,7 +3917,7 @@ msgstr "Szoknya és karima" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3927,7 +3927,7 @@ msgid "Advanced" msgstr "Haladó" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3941,8 +3941,8 @@ msgid "Supports" msgstr "Támasztékok" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3952,8 +3952,8 @@ msgstr "Támasztékok" msgid "Pad" msgstr "Párna" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -4056,7 +4056,7 @@ msgstr "Exportálás STL-ként" msgid "Reload the selected volumes from disk" msgstr "A kiválasztott térfogatok újra betöltésé a lemezről" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "Helyettesítés STL-lel" @@ -4083,19 +4083,19 @@ msgid "Scale the selected object to fit the print volume" msgstr "" "Méretezze a kiválasztott objektumot a (maximális) nyomtatási térfogathoz" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "Konvertálás angolszász mértékegységről" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "Konvertálás visszavonása (angolszász mértékegységről)" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "Konvertálás metrikus mértékegységről" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "Konvertálás visszavonása (metrikus mértékegységről)" @@ -4362,7 +4362,7 @@ msgstr "Módosító Betöltése" msgid "Loading" msgstr "Betöltés" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "Fájl betöltése" @@ -4805,7 +4805,7 @@ msgstr "Paraméter eltávolítása" msgid "Delete Option %s" msgstr "%s Opció Törlése" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "%s Opció Megváltoztatása" @@ -4925,18 +4925,18 @@ msgstr "Szerszám jelölő" msgid "Legend/Estimated printing time" msgstr "Magyarázat/becsült nyomtatási idő" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "Bővebben" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "Beállítások megnyitása." -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "Dokumentáció megnyitása a webböngészőben." @@ -5113,13 +5113,13 @@ msgstr "" "Az importált SLA-archívum nem tartalmazott előbeállításokat. Az aktuális SLA " "előbeállítások kerülnek felhasználásra." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" "Nem tölthet be olyan SLA projektet, amelyben több részből álló objektum van " "a tárgyasztalon" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "Figyelem!" @@ -5162,11 +5162,11 @@ msgstr "" "Konfiguráció betöltése ini/amf/3mf/gcode fájlból, és hozzáadás a meglévőhöz" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "G-kód exportálása" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "G-kód küldése" @@ -5560,7 +5560,7 @@ msgstr "Jelmagyarázat és becsült nyomtatási idő megjelenítése/elrejtése" msgid "Show/Hide G-code window" msgstr "G-kód ablak megjelenítése/elrejtése" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "Előnézet" @@ -5678,29 +5678,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "A PrusaSlicer bezárása, miközben egyes előbeállítások módosultak." #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "Nyomtatási Beállítások" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "Alapanyag Beállítások" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "Filament Beállítások" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "Nyomtató Beállítások" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "Névtelen" @@ -6214,7 +6214,7 @@ msgid "Open New Instance" msgstr "Új Példány Megnyitása" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "Előbeállítások Összehasonlítása" @@ -6323,9 +6323,9 @@ msgstr "G-kód" msgid "Save zip file as:" msgstr "Zip fájl mentése másként:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "Szeletelés" @@ -6595,7 +6595,7 @@ msgstr "HIBA:" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "FIGYELMEZTETÉS:" @@ -6621,8 +6621,8 @@ msgstr "Példányok" msgid "Instance %d" msgstr "Példány %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "Rétegek" @@ -6903,12 +6903,12 @@ msgstr "Objektum alatt" msgid "Around object" msgstr "Objektum körül" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "Küldés nyomtatóra" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "Szeletelés most" @@ -7020,7 +7020,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "A %s(%s) eszköz eltávolítása nem sikerült." -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "Új Projekt" @@ -7028,7 +7028,7 @@ msgstr "Új Projekt" msgid "Expand sidebar" msgstr "Az oldalsáv kibontása" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -7042,12 +7042,12 @@ msgstr[1] "" "Az alábbi_ előbeállítások ideiglenesen telepítve lettek a PrusaSlicer aktív " "példányára" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "A \"%1%\" fájl betöltése nem sikerült érvénytelen konfiguráció miatt." -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -7062,11 +7062,11 @@ msgstr[1] "" "A fájlban lévő %s objektumuk mérete nullának tűnik.\n" "Ezek az objektumok eltávolításra kerültek a modellből" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "Az objektum mérete zéró" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -7087,15 +7087,15 @@ msgstr[1] "" "A PrusaSlicer belső mértékegysége a milliméter. Szeretné újraszámolni az " "objektumok méreteit?" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "Az objektum túl kicsi" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "Alkalmazza az összes hátralévő betöltendő kis objektumra." -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -7116,7 +7116,7 @@ msgstr[1] "" "A PrusaSlicer belső mértékegysége a milliméter. Szeretné újraszámolni az " "objektumok méreteit?" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" @@ -7126,22 +7126,22 @@ msgstr "" "Több különálló objektum helyett, egyetlen, több részből álló objektumként " "kell betölteni őket?" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "Több részből álló objektum észlelve" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 msgid "" "This file cannot be loaded in a simple mode. Do you want to switch to an " "advanced mode?" msgstr "" "Ez a fájl nem tölthető be egyszerű módban. Szeretne haladó módra váltani?" -#: src/slic3r/GUI/Plater.cpp:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "Fejlett adatok érzékelve" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " @@ -7150,7 +7150,7 @@ msgstr "" "Nem lehet hozzáadni az objektum(ok)at %s-ből, mert az egyik vagy néhány " "közülük több részből áll(nak)" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" @@ -7160,7 +7160,7 @@ msgstr "" "Több különálló objektum helyett, egyetlen, több részből álló objektumként " "kell betölteni őket?" -#: src/slic3r/GUI/Plater.cpp:2767 +#: src/slic3r/GUI/Plater.cpp:2779 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." @@ -7168,39 +7168,39 @@ msgstr "" "Az objektum túl nagynak tűnik, ezért automatikusan le lett méretezve, hogy " "illeszkedjen a tárgyasztalhoz." -#: src/slic3r/GUI/Plater.cpp:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "Az objektum túl nagy?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "STL fájl exportálása:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "AMF fájl exportálása:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "Fájl mentése mint:" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "OBJ fájl exportálása:" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "Objektum Törlése" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "Az Összes Objektum Törlése" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "Projekt Újraindítása" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." @@ -7208,15 +7208,15 @@ msgstr "" "A kijelölt objektumot nem lehetett szétválasztani, mert csak egy szilárd " "alkatrészt tartalmaz." -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "Minden nem szilárd alkatrész (módosító) törlésre került" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "Objektumokra Osztás" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." @@ -7224,87 +7224,87 @@ msgstr "" "Egy objektumnak vannak olyan egyéni támaszték kényszerítői, amelyek nem " "lesznek használva, mivel a támasztékok le vannak tiltva." -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "Támasztékok engedélyezése csak a kényszerítőkre" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "Érvénytelen adat" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "Jelenleg egy másik exportálási feladat is fut." -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "Helyettesítés innen:" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "Nem lehet egynél több térfogattal helyettesíteni" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "Hiba helyettesítés közben" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "Válassza ki az új fájlt" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "A helyettesítéshez nem volt fájl kiválasztva" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "Válassza ki az újratöltendő fájlt" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "A kiválasztott fájl" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "különbözik az eredeti fájltól" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "Szeretné helyettesíteni" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "Újratöltés innen:" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "Újratöltés sikertelen:" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "Hiba újratöltés közben" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "Minden újratöltése lemezről" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "Aktív figyelmeztetések vonatkoznak a szeletelt modellekre:" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "generált figyelmeztetések" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "3D szerkesztő nézet" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "Visszavonás / Mégis folyamatban" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -7315,21 +7315,21 @@ msgstr "" "Néhány %1% előbeállítás módosult, amelyek a nyomtatási technológia átváltása " "után elvesznek." -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "Új projekt létrehozása a jelenlegi projekt módosítása közben." -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "Új projekt létrehozása néhány előbeállítás módosítása közben." -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" "Az előbeállítások módosításait megtarthatja az új projekthez, vagy elvetheti " "őket" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" @@ -7340,125 +7340,125 @@ msgstr "" "Megjegyzés: ha a módosítások elmentésre kerülnek, akkor az új projekt nem " "tartja meg őket" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "Új projekt létrehozása" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "Projekt Betöltése" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "Objektum Importálása" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "Objektumok Importálása" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "nem tartalmaz érvényes g-kódot." -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "Hiba a .gcode fájl betöltése közben" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "%s - Projekt fájl ejtése" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "Megnyitás Projektként" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "Csak geometria importálása" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "Csak a konfiguráció importálása" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "Válassza ki a fájlra alkalmazandó műveletet" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "Művelet" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "Ne mutassa újra" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "Egyszerre csak egy .gcode fájlt nyithat meg." -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "Húzza és ejtse a G-kód fájlt" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "Fájl Betöltése" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "Fájlok Betöltése" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "Minden objektum el lesz távolítva, folytatja?" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "Kijelölt Objektumok Törlése" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "Példányszám Növelése" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "Példányszám Csökkentése" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "Adja meg a szükséges példányok számát:" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "A kijelölt objektum másolatai" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "A másolatok számának beállítása erre: %d" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "Vágás Síkkal" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "G-kód fájl mentése másként:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "SL1 / SL1S fájl mentése másként:" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "A megadott fájlnév érvénytelen." -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "A következő karaktereket a FAT fájlrendszer nem támogatja:" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" @@ -7466,15 +7466,15 @@ msgstr "" "A tárgyasztal üres.\n" "Szeretné elmenteni a projektet?" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "Projekt mentése" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "Exportálás" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." @@ -7482,14 +7482,14 @@ msgstr "" "Az egyedi támasztékok, varratok és a többanyagú festés eltávolításra került " "háló javítása után." -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "Beillesztés Vágólapról" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "Általános" @@ -7640,7 +7640,7 @@ msgstr "" "- Új projekt betöltésekor, vagy létrehozásakor" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7659,7 +7659,7 @@ msgstr "" "- Új projekt betöltésekor, miközben egyes előbeállítások módosultak" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" "Kérdezzen rá az előbeállítások nem mentett módosításaira új előbeállítás " @@ -7674,7 +7674,7 @@ msgstr "" "előbeállítást választ vagy visszaállít egy előbeállítást" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" "Kérdezzen rá az előbeállítások nem mentett módosításaira, amikor új " @@ -8246,11 +8246,11 @@ msgstr "G-kód küldése a nyomtató gazdagépének" msgid "Upload to Printer Host with the following filename:" msgstr "Feltöltés a Nyomtató gazdagépére a következő fájlnévvel:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "Ha szükséges, használjon perjeleket ( / ) könyvtárelválasztóként." -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "Csoport" @@ -8259,18 +8259,18 @@ msgstr "Csoport" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "A feltöltött fájl neve nem végződik „%s”-ra. Szeretné folytatni?" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "Feltöltés" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "Feltöltés és Nyomtatás" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "Feltöltés és Szimuláció" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "Feltöltés" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "Azonosító" @@ -8730,7 +8730,7 @@ msgstr "teljes profil név" msgid "symbolic profile name" msgstr "szimbolikus profil név" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "Rétegek és kerületek" @@ -8814,11 +8814,11 @@ msgstr "Átfedés" msgid "Flow" msgstr "Áramlás" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "Egyéb" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "Kimeneti lehetőségek" @@ -8830,11 +8830,11 @@ msgstr "Szekvenciális nyomtatás" msgid "Extruder clearance" msgstr "Extruder körüli szabad tér" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "Kimeneti fájl" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "Utófeldolgozó szkriptek" @@ -8842,19 +8842,20 @@ msgstr "Utófeldolgozó szkriptek" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "Megjegyzések" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "Függőségek" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "Profilfüggőségek" @@ -8936,7 +8937,7 @@ msgid "Ramming settings" msgstr "Tömörítési beállítások" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "Egyéni G-kód" @@ -8983,8 +8984,8 @@ msgstr "" msgid "Size and coordinates" msgstr "Méret és koordináták" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "Képességek" @@ -9052,11 +9053,11 @@ msgstr "Billentés" msgid "Tilt time" msgstr "Billentési idő" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "Korrekciók" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "Expozíció" @@ -9236,42 +9237,46 @@ msgstr "Biztos, hogy a kiválasztott előbeállítást %1% szeretné?" msgid "%1% Preset" msgstr "%1% Előbeállítás" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "Beállítás" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "Keresés" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "Csere erre" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "Reguláris kifejezés" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "Nagy- és kisbetű érzékeny" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "Teljes szó" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "Egysoros egyeztetés" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" "A gépi korlátok a G-kódba kerülnek, és a nyomtatási idő becslésére " "szolgálnak." -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " @@ -9281,7 +9286,7 @@ msgstr "" "felhasználásra kerülnek. A nyomtató más gépi korlátokat alkalmazhat, ezért a " "nyomtatási idő becslése pontatlan lehet." -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." @@ -9289,12 +9294,12 @@ msgstr "" "A gépi korlátok nincsenek beállítva, ezért a nyomtatási idő becslése " "pontatlan lehet." -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "ZÁRT LAKAT" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 msgid "" "indicates that the settings are the same as the system (or default) values " "for the current option group" @@ -9302,12 +9307,12 @@ msgstr "" "azt jelzi, hogy a beállítások megegyeznek az aktuális opciócsoport rendszer- " "(vagy alapértelmezett) értékeivel" -#: src/slic3r/GUI/Tab.cpp:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "NYITOTT LAKAT" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -9319,12 +9324,12 @@ msgstr "" "Kattintson a NYITOTT LAKAT ikonra az aktuális opciócsoport összes " "beállításának visszaállításához a rendszer (vagy az alapértelmezett) értékre." -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "SZÜRKE PÖTTY" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 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." @@ -9333,12 +9338,12 @@ msgstr "" "értéket jelez,\n" "jobb gomb esetén: azt jelzi, hogy a beállításokat nem módosították." -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "VISSZA NYÍL" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -9350,7 +9355,7 @@ msgstr "" "Kattintson a VISSZA NYÍL ikonra az aktuális opciócsoport összes " "beállításának visszaállításához az utoljára mentett állapotra." -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" @@ -9358,7 +9363,7 @@ msgstr "" "ZÁRT LAKAT ikon azt jelzi, hogy a beállítások megegyeznek az aktuális " "opciócsoport rendszer- (vagy alapértelmezett) értékeivel" -#: src/slic3r/GUI/Tab.cpp:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -9371,13 +9376,13 @@ msgstr "" "Kattintson az aktuális opciócsoport összes beállításának visszaállításához a " "rendszer (vagy az alapértelmezett) értékre." -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" "A SZÜRKE PÖTTY ikon a rendszeren kívüli (vagy nem alapértelmezett) " "előbeállítást jelzi." -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." @@ -9385,7 +9390,7 @@ msgstr "" "A SZÜRKE PÖTTY ikon azt jelzi, hogy a beállítások megegyeznek az aktuális " "opciócsoport utoljára mentett előbeállításával." -#: src/slic3r/GUI/Tab.cpp:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -9397,7 +9402,7 @@ msgstr "" "Kattintson az aktuális opciócsoport összes beállításának visszaállításához " "az utoljára mentett állapotra." -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." @@ -9405,7 +9410,7 @@ msgstr "" "ZÁRT LAKAT ikon azt jelzi, hogy az érték megegyezik a rendszer (vagy " "alapértelmezett) értékével." -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" @@ -9416,7 +9421,7 @@ msgstr "" "Kattintson az aktuális érték visszaállításához a rendszer (vagy " "alapértelmezett) értékre." -#: src/slic3r/GUI/Tab.cpp:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." @@ -9424,7 +9429,7 @@ msgstr "" "A SZÜRKE PÖTTY azt jelzi, hogy az érték megegyezik az utoljára mentett " "előbeállítással." -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -9435,31 +9440,31 @@ msgstr "" "Kattintson az aktuális érték visszaállításához az utoljára mentett " "beállításra." -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "Anyag" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "Anyag nyomtatási profil" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "Támasztó fej" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "Támasztó pillér" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "A tartópálcák és a csomópontok csatlakoztatása" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "Automatikus generálás" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" @@ -9469,62 +9474,62 @@ msgstr "" "kategóriában. \n" "\"%1%\" engedélyezéséhez kapcsolja ki a \"%2%\"-ot." -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "Objektum magassága" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "Párna az objektum körül" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "Nem definált" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "Nem Mentett Változások" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "Előbeállítások Átváltása: Nem Mentett Módosítások" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "Régi Érték" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "Új Érték" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "Megtartás" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "Átvitel" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "Ne mentse" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "Elvetés" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "Mentés" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" @@ -9532,7 +9537,7 @@ msgstr "" "Az előbeállítások nem mentett módosításaira legközelebb nem kérdez rá a " "rendszer új projekt létrehozásakor" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" @@ -9540,7 +9545,7 @@ msgstr "" "Az előbeállítások nem mentett módosításaira legközelebb nem kérdez rá a " "rendszer előbeállítás váltáskor" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -9552,11 +9557,11 @@ msgstr "" "- A PrusaSlicer bezárásakor, miközben egyes előbeállítások módosultak,\n" "- Új projekt betöltésekor, miközben egyes előbeállítások módosultak" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "A PrusaSlicer emlékezni fog a műveletére." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -9566,59 +9571,60 @@ msgstr "" "lehetőséget.\n" "hogy újra rákérdezzen a nem mentett módosításokra." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" "Néhány mező túl hosszú ahhoz, hogy elférjen. A jobb egérgombbal történő " "kattintással a teljes szöveg megjelenik." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "A beállítások módosításai nem kerülnek mentésre" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "Minden beállítási változtatás elvetése." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "A kiválasztott beállítások mentése." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "A kiválasztott beállítások megtartása." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "" "A kiválasztott beállítások átvitele az újonnan kijelölt előbeállításba." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format msgid "Save the selected options to preset \"%1%\"." msgstr "A kiválasztott beállítások mentése a \"%1%\" előbeállításba." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 #, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "" "A kiválasztott beállítások átvitele az újonnan kijelölt \"%1%\" " "előbeállításba." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "A következő előbeállítás módosult" msgstr[1] "A következő előbeállítások módosultak" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "" "A \"%1%\" előbeállítás a következő el nem mentett változásokat tartalmazza:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " @@ -9627,7 +9633,7 @@ msgstr "" "A \"%1%\" előbeállítás nem kompatibilis az új nyomtatóprofillal, és a " "következő el nem mentett változtatásokat tartalmazza:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " @@ -9636,42 +9642,42 @@ msgstr "" "A \"%1%\" előbeállítás nem kompatibilis az új nyomtatási profillal, és a " "következő el nem mentett változtatásokat tartalmazza:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "Extruderek száma" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "Előbeállítások kiválasztása az összehasonlításhoz" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "Minden előbeállítás megjelenítése (beleértve az inkompatibiliseket is)" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "Bal Előbeállítás Értéke" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "Jobb Előbeállítás Értéke" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "Az egyik előbeállítás nem található" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" "Az összehasonlított előbeállítások különböző nyomtatási technológiával " "rendelkeznek" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "Az előbeállítások megyegyeznek" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." @@ -9680,11 +9686,11 @@ msgstr "" "Erre a gombra kattintva ugyanazt az előbeállítást választhatja ki a jobb és " "a bal előbeállításhoz." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "Nem definiált kategória" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "Nem definiált csoport" @@ -10557,27 +10563,27 @@ msgstr "validáció sikertelen" msgid "write calledback failed" msgstr "írás calledback sikertelen" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "Minden objektum a nyomtatási területen kívülre esik." -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "A megadott beállítások üres nyomtatáshoz vezetnek." -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "" "Néhány objektum túl közel van egymáshoz; az extruder ütközni fog velük." -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "" "Néhány objektum túl magas, ezért nem nyomtathatók ki az extruder ütközése " "nélkül." -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " @@ -10587,7 +10593,7 @@ msgstr "" "távolítsa el az összes objektumot az utolsó kivételével, vagy engedélyezze a " "szekvenciális módot a „complete_objects” paraméterrel." -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." @@ -10595,7 +10601,7 @@ msgstr "" "A Spirálváza opció csak egyféle anyagból álló objektum nyomtatásához " "használható." -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." @@ -10603,7 +10609,7 @@ msgstr "" "A törlőtorony csak akkor támogatott, ha minden extruder azonos " "fúvókaátmérővel rendelkezik és azonos átmérőjű filamentet használ." -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." @@ -10611,7 +10617,7 @@ msgstr "" "A törlőtorony jelenleg csak a Marlin, a RepRap/Sprinter, a RepRapFirmware és " "a Repetier G-kód változatokhoz támogatott." -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." @@ -10619,19 +10625,19 @@ msgstr "" "A törlőtorony jelenleg csak relatív extruder címzéssel " "(use_relative_e_distances=1) támogatott." -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" "A szivárgásmegelőzés jelenleg nem támogatott, ha a törlőtorony engedélyezve " "van." -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" "A törlőtorony jelenleg nem támogatja a volumetrikus E-t (use_volumetric_e=0)." -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." @@ -10639,7 +10645,7 @@ msgstr "" "A törlőtorony jelenleg nem támogatott a több anyagos szekvenciális nyomatok " "esetében." -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" @@ -10647,7 +10653,7 @@ msgstr "" "A törlőtorony csak akkor támogatott több objektum nyomtatásához, ha azok " "azonos rétegmagassággal rendelkeznek" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" @@ -10655,7 +10661,7 @@ msgstr "" "A törlőtorony csak akkor támogatott több objektum nyomtatása esetén, ha azok " "azonos számú tutaj rétegre vannak nyomtatva" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -10663,7 +10669,7 @@ msgstr "" "A törlőtorony csak akkor támogatott több objektum esetében, ha azok azonos " "support_material_contact_distance paraméterbeálltással vannak nyomtatva" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." @@ -10671,7 +10677,7 @@ msgstr "" "A törlőtorony csak akkor támogatott több objektum esetén, ha azok egyformán " "vannak felszeletelve." -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" @@ -10679,27 +10685,27 @@ msgstr "" "A törlőtorony csak akkor támogatott, ha minden objektumnak ugyanaz a változó " "rétegmagassága" -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "" "Egy vagy több objektumhoz olyan extruder lett hozzárendelve, amely nincs a " "nyomtatóban." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "" "%1%=%2% mm túl alacsony ahhoz, hogy nyomtatható legyen %3% mm-es " "rétegmagasságnál" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "" "%1%=%2% mm túl sok ahhoz, hogy nyomtatható legyen %3% mm fúvókaátmérővel" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -10711,7 +10717,7 @@ msgstr "" "support_material_interface_extruder == 0), akkor minden fúvókának azonos " "átmérőjűnek kell lennie." -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." @@ -10719,7 +10725,7 @@ msgstr "" "Ahhoz, hogy a törlőtorony működjön az oldható támasztékokkal, a támasztó " "rétegeket szinkronizálni kell az objektum rétegeivel." -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -10731,27 +10737,46 @@ msgstr "" "support_material_extruder, mind a support_material_interface_extruder " "értékét 0-ra kell állítani)." -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "Az első réteg magassága nem lehet nagyobb, mint a fúvóka átmérője" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "A réteg magassága nem lehet nagyobb, mint a fúvóka átmérője" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "Kitöltő rétegek" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "Szoknya és karima generálása" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "G-kód exportálása" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "G-kód generálása" diff --git a/resources/localization/it/PrusaSlicer.mo b/resources/localization/it/PrusaSlicer.mo index 60bd8dc12..f2b3dc56b 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 949027657..aa0cecb72 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: Phrase (phrase.com)\n" +"X-Generator: Prusalator\n" #: src/slic3r/GUI/Tab.cpp:4707 #, boost-format @@ -16,6 +16,22 @@ msgstr "" "\"%1%\" è disattivato perchè \"%2%\" è nella categoria \"%3%\".\n" "Per attivare \"%1%\", si prega di spegnere \"%2%\"" +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" +"\"G92 E0\" trovato in before_layer_gcode, che è incompatibile con " +"l'indirizzamento assoluto dell'estrusore." + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" +"\"G92 E0\" trovato in layer_gcode, che è incompatibile con l'indirizzamento " +"assoluto dell'estrusore." + #: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:1087 #: src/libslic3r/PrintConfig.cpp:1559 src/libslic3r/PrintConfig.cpp:1751 #: src/libslic3r/PrintConfig.cpp:1814 src/libslic3r/PrintConfig.cpp:2065 @@ -108,6 +124,12 @@ msgid_plural "%1% (%2$d shells)" msgstr[0] "%1% (%2$d guscio)" msgstr[1] "%1% (%2$d gusci)" +#. TRN Remove/Delete +#: src/slic3r/GUI/Tab.cpp:3736 +#, boost-format +msgid "%1% Preset" +msgstr "%1% Preset" + #: src/slic3r/GUI/ConfigWizard.cpp:752 #, boost-format msgid "" @@ -117,12 +139,6 @@ msgstr "" "%1% marcati con * non sono compatibili con alcune stampanti " "installate." -#. TRN Remove/Delete -#: src/slic3r/GUI/Tab.cpp:3736 -#, boost-format -msgid "%1% Preset" -msgstr "%1% Preset" - #: src/slic3r/GUI/GUI.cpp:317 #, boost-format msgid "%1% was substituted with %2%" @@ -183,6 +199,16 @@ msgstr "%s - BREAKING CHANGE" msgid "%s - Drop project file" msgstr "%s - Rilascia file progetto" +#: src/slic3r/GUI/ConfigWizard.cpp:550 +#, c-format, boost-format +msgid "%s Family" +msgstr "Famiglia %s" + +#: src/slic3r/GUI/GUI_App.cpp:2245 +#, c-format, boost-format +msgid "%s View Mode" +msgstr "%s Modalità Visualizzazione" + #: src/slic3r/GUI/UpdateDialogs.cpp:213 #, c-format, boost-format msgid "%s configuration is incompatible" @@ -198,11 +224,6 @@ msgstr "%s non supporta la percentuale" msgid "%s error" msgstr "errore %s" -#: src/slic3r/GUI/ConfigWizard.cpp:550 -#, c-format, boost-format -msgid "%s Family" -msgstr "Famiglia %s" - #: src/slic3r/GUI/MsgDialog.cpp:233 #, c-format, boost-format msgid "%s has a warning" @@ -213,6 +234,17 @@ msgstr "%s ha un avviso" msgid "%s has encountered an error" msgstr "%s ha riscontrato un errore" +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 +#, c-format, boost-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 riscontrato un errore. Probabilmente è stato causato dalla memoria " +"piena. Se sei sicuro di avere abbastanza RAM nel sistema, questo potrebbe " +"essere un bug e te ne saremmo grati se potessi informarci." + #: src/slic3r/GUI/GUI_App.cpp:698 #, c-format, boost-format msgid "" @@ -228,17 +260,6 @@ msgstr "" "\n" "L'applicazione verrà chiusa." -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 -#, c-format, boost-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 riscontrato un errore. Probabilmente è stato causato dalla memoria " -"piena. Se sei sicuro di avere abbastanza RAM nel sistema, questo potrebbe " -"essere un bug e te ne saremmo grati se potessi informarci." - #: src/slic3r/GUI/UpdateDialogs.cpp:304 #, c-format, boost-format msgid "%s has no configuration updates available." @@ -286,11 +307,6 @@ msgstr "" "Si prega di procedere con il %s che segue per impostare i nuovi preset e " "scegliere se abilitare gli aggiornamenti automatici del preset." -#: src/slic3r/GUI/GUI_App.cpp:2245 -#, c-format, boost-format -msgid "%s View Mode" -msgstr "%s Modalità Visualizzazione" - #: src/slic3r/GUI/MsgDialog.cpp:232 #, c-format, boost-format msgid "%s warning" @@ -445,22 +461,14 @@ msgstr "Fines&tra" msgid "(All)" msgstr "(Tutto)" -#: src/slic3r/GUI/Plater.cpp:1401 -msgid "(including spool)" -msgstr "(bobina inclusa)" - -#: src/libslic3r/PrintConfig.cpp:1985 -msgid "(minimum)" -msgstr "(minimo)" +#: src/slic3r/GUI/MainFrame.cpp:1293 +msgid "(Re)Slice No&w" +msgstr "(Re)Sli&ce Ora" #: src/slic3r/GUI/KBShortcutsDialog.cpp:81 msgid "(Re)slice" msgstr "(Ri)processa" -#: src/slic3r/GUI/MainFrame.cpp:1293 -msgid "(Re)Slice No&w" -msgstr "(Re)Sli&ce Ora" - #: src/libslic3r/GCode.cpp:573 msgid "(Some lines not shown)" msgstr "(Alcune linee non mostrate)" @@ -469,6 +477,14 @@ msgstr "(Alcune linee non mostrate)" msgid "(Unknown)" msgstr "(Sconosciuto)" +#: src/slic3r/GUI/Plater.cpp:1401 +msgid "(including spool)" +msgstr "(bobina inclusa)" + +#: src/libslic3r/PrintConfig.cpp:1985 +msgid "(minimum)" +msgstr "(minimo)" + #: src/slic3r/GUI/MainFrame.cpp:1625 msgid ") not found." msgstr ") non trovato." @@ -529,10 +545,6 @@ msgstr "3 (pesante)" msgid "3&D" msgstr "3&D" -#: src/slic3r/GUI/Plater.cpp:4438 -msgid "3D editor view" -msgstr "Vista modifica 3D" - #: src/libslic3r/PrintConfig.cpp:1153 msgid "3D Honeycomb" msgstr "Nido d'ape 3D" @@ -541,6 +553,10 @@ msgstr "Nido d'ape 3D" msgid "3D Mouse disconnected." msgstr "Mouse 3D disconnesso." +#: src/slic3r/GUI/Plater.cpp:4438 +msgid "3D editor view" +msgstr "Vista modifica 3D" + #: src/slic3r/GUI/Mouse3DController.cpp:453 msgid "3Dconnexion settings" msgstr "Impostazioni 3Dconnexion" @@ -581,10 +597,6 @@ msgstr "" "Verrà creata una copia del preset di sistema corrente, e verrà distaccata " "dal preset di sistema." -#: src/slic3r/GUI/ConfigWizard.cpp:2717 -msgid "A new filament was installed and it will be activated." -msgstr "Un nuovo filamento è stato installato e sarà attivato." - #: src/slic3r/GUI/ConfigWizard.cpp:2691 msgid "A new Printer was installed and it will be activated." msgstr "Una nuova stampante è stata installata e sarà attivata." @@ -593,6 +605,10 @@ msgstr "Una nuova stampante è stata installata e sarà attivata." msgid "A new SLA material was installed and it will be activated." msgstr "Un nuovo materiale SLA è stato installato e sarà attivato." +#: src/slic3r/GUI/ConfigWizard.cpp:2717 +msgid "A new filament was installed and it will be activated." +msgstr "Un nuovo filamento è stato installato e sarà attivato." + #: src/slic3r/GUI/ConfigWizard.cpp:2596 msgid "A new vendor was installed and one of its printers will be activated" msgid_plural "" @@ -630,6 +646,14 @@ msgstr "" msgid "A toolpath outside the print area was detected." msgstr "È stato rilevato un percorso fuori dall'area di stampa." +#: src/libslic3r/PrintConfig.cpp:291 +msgid "API Key / Password" +msgstr "Chiave API / Password" + +#: src/libslic3r/PrintConfig.cpp:351 +msgid "API key" +msgstr "Chiave API" + #: src/slic3r/Config/Snapshot.cpp:601 msgid "Abort" msgstr "Annulla" @@ -639,10 +663,6 @@ msgstr "Annulla" msgid "About %s" msgstr "Informazioni su %s" -#: src/slic3r/GUI/GCodeViewer.cpp:3182 -msgid "above" -msgstr "sopra" - #: src/libslic3r/PrintConfig.cpp:2161 msgid "Above Z" msgstr "Z Sopra" @@ -675,10 +695,6 @@ msgstr "Attiva" msgid "Active" msgstr "Attivo" -#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 -msgid "active" -msgstr "attivo" - #: src/slic3r/GUI/GLCanvas3D.cpp:248 msgid "Adaptive" msgstr "Adattivo" @@ -708,6 +724,60 @@ msgstr "Aggiungi" msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\"" msgstr "Aggiunge \"%1%\" come prossimo preset per la stampante fisica \"%2%\"" +#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 +msgid "Add Generic Subobject" +msgstr "Aggiungi sotto-oggetto generico" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 +msgid "Add Height Range" +msgstr "Aggiungi Intervallo Altezza" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 +msgid "Add Instance of the selected object" +msgstr "Aggiungi istanza all'oggetto selezionato" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 +msgid "Add Layers" +msgstr "Aggiungi layer" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 +msgid "Add Settings Bundle for Height range" +msgstr "Aggiungi Gruppo impostazioni per intervallo Altezza" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 +msgid "Add Settings Bundle for Object" +msgstr "Aggiungi gruppo di impostazioni per l'oggetto" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 +msgid "Add Settings Bundle for Sub-object" +msgstr "Aggiungi Gruppi di Impostazioni per il sotto-progetto" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 +msgid "Add Settings for Layers" +msgstr "Aggiungi impostazioni per i layer" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 +msgid "Add Settings for Object" +msgstr "Aggiungi impostazioni per l'oggetto" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 +msgid "Add Settings for Sub-object" +msgstr "Aggiungi impostazioni per il sotto-oggetto" + +#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 +msgid "Add Shape" +msgstr "Aggiungi Forma" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shape from Gallery" +msgstr "Aggiungi forma da Galleria" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shapes from Gallery" +msgstr "Aggiungere forme dalla galleria" + #: src/libslic3r/PrintConfig.cpp:3607 msgid "Add a pad underneath the supported model" msgstr "Aggiungi un pad sotto il modello supportato" @@ -778,33 +848,15 @@ msgstr "Aggiungi cambio estrusore - Clic sinistro" msgid "Add extruder to sequence" msgstr "Aggiungi estrusore alla sequenza" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 -msgid "Add Generic Subobject" -msgstr "Aggiungi sotto-oggetto generico" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 -msgid "Add Height Range" -msgstr "Aggiungi Intervallo Altezza" - #: src/slic3r/GUI/GLCanvas3D.cpp:4541 src/slic3r/GUI/GUI_Factories.cpp:1084 #: src/slic3r/GUI/GUI_Factories.cpp:1108 src/slic3r/GUI/GUI_Factories.cpp:1119 msgid "Add instance" msgstr "Aggiungi istanza" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 -msgid "Add Instance of the selected object" -msgstr "Aggiungi istanza all'oggetto selezionato" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:164 msgid "Add layer range" msgstr "Aggiungi intervallo layer" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 -msgid "Add Layers" -msgstr "Aggiungi layer" - #: src/slic3r/GUI/GUI_Factories.cpp:162 msgid "Add modifier" msgstr "Aggiungi modificatore" @@ -864,42 +916,6 @@ msgstr "Aggiungi la forma (le forme) selezionate al piano" msgid "Add settings" msgstr "Aggiungi impostazioni" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 -msgid "Add Settings Bundle for Height range" -msgstr "Aggiungi Gruppo impostazioni per intervallo Altezza" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 -msgid "Add Settings Bundle for Object" -msgstr "Aggiungi gruppo di impostazioni per l'oggetto" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 -msgid "Add Settings Bundle for Sub-object" -msgstr "Aggiungi Gruppi di Impostazioni per il sotto-progetto" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 -msgid "Add Settings for Layers" -msgstr "Aggiungi impostazioni per i layer" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 -msgid "Add Settings for Object" -msgstr "Aggiungi impostazioni per l'oggetto" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 -msgid "Add Settings for Sub-object" -msgstr "Aggiungi impostazioni per il sotto-oggetto" - -#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 -msgid "Add Shape" -msgstr "Aggiungi Forma" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shape from Gallery" -msgstr "Aggiungi forma da Galleria" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shapes from Gallery" -msgstr "Aggiungere forme dalla galleria" - #: src/libslic3r/PrintConfig.cpp:686 msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " @@ -954,14 +970,14 @@ msgstr "Aggiungi/Rimuovi preset" msgid "Add/Remove printers" msgstr "Aggiungi/Rimuovi stampanti" -#: src/slic3r/GUI/Tab.cpp:1369 -msgid "Additional information:" -msgstr "Informazioni aggiuntive:" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:63 msgid "Additional Settings" msgstr "Impostazioni Aggiuntive" +#: src/slic3r/GUI/Tab.cpp:1369 +msgid "Additional information:" +msgstr "Informazioni aggiuntive:" + #: src/slic3r/GUI/ConfigWizard.cpp:1236 msgid "" "Additionally a backup snapshot of the whole configuration is created before " @@ -974,26 +990,19 @@ msgstr "" msgid "Address" msgstr "Indirizzo" -#: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 -#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 -#: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4661 -#: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 -#: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 -#: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 -#: src/libslic3r/PrintConfig.cpp:2490 src/libslic3r/PrintConfig.cpp:3028 -#: src/libslic3r/PrintConfig.cpp:3224 +#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 +msgctxt "Mode" msgid "Advanced" -msgstr "Avanzate" - -#: src/slic3r/GUI/ConfigWizard.cpp:1280 -msgid "Advanced mode" -msgstr "Modalità Avanzata" +msgstr "Avanzata" #: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Advanced View Mode" msgstr "Modalità Visualizzazione Avanzata" +#: src/slic3r/GUI/ConfigWizard.cpp:1280 +msgid "Advanced mode" +msgstr "Modalità Avanzata" + #: src/slic3r/GUI/FirmwareDialog.cpp:851 msgid "Advanced: Output log" msgstr "Avanzato: Log di output" @@ -1018,14 +1027,14 @@ msgstr "" msgid "After layer change G-code" msgstr "G-code dopo il cambio layer" -#: src/libslic3r/PrintConfig.cpp:4322 -msgid "Align the model to the given point." -msgstr "Allinea il modello al punto dato." - #: src/libslic3r/PrintConfig.cpp:4321 msgid "Align XY" msgstr "Allinea XY" +#: src/libslic3r/PrintConfig.cpp:4322 +msgid "Align the model to the given point." +msgstr "Allinea il modello al punto dato." + #: src/libslic3r/PrintConfig.cpp:2223 msgid "Aligned" msgstr "Allineato" @@ -1091,10 +1100,6 @@ msgstr "Tutti i preset dell'utente saranno cancellati." msgid "All walls" msgstr "Tutte le pareti" -#: src/libslic3r/miniz_extension.cpp:121 -msgid "allocation failed" -msgstr "allocazione fallita" - #: src/slic3r/GUI/Preferences.cpp:208 src/slic3r/GUI/Preferences.cpp:212 msgid "Allow just a single PrusaSlicer instance" msgstr "Permetti una singola istanza di PrusaSlicer" @@ -1187,6 +1192,10 @@ msgstr "" "Un oggetto ha dei rinforzi di supporto personalizzati che non saranno " "utilizzati perché i supporti sono disabilitati." +#: src/slic3r/GUI/GLCanvas3D.cpp:6367 +msgid "An object outside the print area was detected." +msgstr "È stato rilevato un oggetto al di fuori dell'area di stampa." + #: src/slic3r/GUI/GLCanvas3D.cpp:6372 msgid "" "An object outside the print area was detected.\n" @@ -1195,10 +1204,6 @@ msgstr "" "È stato rilevato un oggetto al di fuori dell'area di stampa.\n" "Risolvere il problema per continuare lo slicing." -#: src/slic3r/GUI/GLCanvas3D.cpp:6367 -msgid "An object outside the print area was detected." -msgstr "È stato rilevato un oggetto al di fuori dell'area di stampa." - #: src/slic3r/GUI/Jobs/PlaterJob.cpp:13 msgid "An unexpected error occured" msgstr "Si è verificato un errore inaspettato" @@ -1219,14 +1224,6 @@ msgstr "" "Qualunque modifica deve essere salvata come un nuovo preset ereditato da " "questo." -#: src/libslic3r/PrintConfig.cpp:351 -msgid "API key" -msgstr "Chiave API" - -#: src/libslic3r/PrintConfig.cpp:291 -msgid "API Key / Password" -msgstr "Chiave API / Password" - #: src/slic3r/GUI/GUI_App.cpp:2232 msgid "Application preferences" msgstr "Preferenze applicazione" @@ -1249,18 +1246,10 @@ msgstr "Applica automaticamente il cambio di colore" msgid "Apply to all the remaining small objects being loaded." msgstr "Applicare a tutti i piccoli oggetti rimanenti che vengono caricati." -#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 -msgid "approximate seconds" -msgstr "secondi approssimativi" - #: src/libslic3r/PrintConfig.cpp:709 src/libslic3r/PrintConfig.cpp:1156 msgid "Archimedean Chords" msgstr "Corde di Archimede" -#: src/libslic3r/miniz_extension.cpp:147 -msgid "archive is too large" -msgstr "l'archivio è troppo grande" - #: src/slic3r/GUI/Tab.cpp:3731 #, boost-format msgid "Are you sure you want to %1% the selected preset?" @@ -1292,6 +1281,10 @@ msgstr "" msgid "Are you sure you want to delete \"%1%\" printer?" msgstr "Sicuro di voler eliminare la stampante \"%1%\"?" +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "Sei sicuro di voler cancellare tutte le sostituzioni?" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1132 msgid "Are you sure you want to do it?" msgstr "Sei sicuro di voler procedere?" @@ -1547,14 +1540,22 @@ msgstr "Abbandona su valori di configurazione sconosciuti" msgid "Balanced" msgstr "Bilanciato" -#: src/slic3r/GUI/MainFrame.cpp:655 -msgid "based on Slic3r" -msgstr "basato su Slic3r" - #: src/slic3r/GUI/Tab.cpp:1989 msgid "Bed" msgstr "Piano" +#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape" +msgstr "Forma Piano" + +#: src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape and Size" +msgstr "Forma e dimensioni del piano di stampa" + +#: src/slic3r/GUI/ConfigWizard.cpp:1581 +msgid "Bed Temperature:" +msgstr "Temperatura piano di stampa:" + #: src/libslic3r/PrintConfig.cpp:241 msgid "Bed custom model" msgstr "Modello piano personalizzato" @@ -1571,18 +1572,10 @@ msgstr "Riempimento piano annullato." msgid "Bed filling done." msgstr "Riempimento del piano eseguito." -#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape" -msgstr "Forma Piano" - #: src/libslic3r/PrintConfig.cpp:231 msgid "Bed shape" msgstr "Forma piano" -#: src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape and Size" -msgstr "Forma e dimensioni del piano di stampa" - #: src/libslic3r/PrintConfig.cpp:396 msgid "Bed temperature" msgstr "Temperatura piano" @@ -1595,10 +1588,6 @@ msgstr "" "Temperatura per i layer dopo il primo. Imposta a zero per disattivare i " "comandi di controllo della temperatura del piano di stampa in output." -#: src/slic3r/GUI/ConfigWizard.cpp:1581 -msgid "Bed Temperature:" -msgstr "Temperatura piano di stampa:" - #: src/slic3r/GUI/Tab.cpp:2422 src/libslic3r/GCode.cpp:709 #: src/libslic3r/PrintConfig.cpp:402 msgid "Before layer change G-code" @@ -1608,14 +1597,14 @@ msgstr "G-code prima del cambio layer" msgid "Before roll back" msgstr "Prima di tornare indietro" -#: src/slic3r/GUI/Plater.cpp:579 -msgid "Below object" -msgstr "Sotto l'oggetto" - #: src/libslic3r/PrintConfig.cpp:2170 msgid "Below Z" msgstr "Z Sotto" +#: src/slic3r/GUI/Plater.cpp:579 +msgid "Below object" +msgstr "Sotto l'oggetto" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:21 msgid "Best surface quality" msgstr "Migliore qualità superfice" @@ -1654,14 +1643,15 @@ msgstr "Volume bottiglia" msgid "Bottle weight" msgstr "Peso bottiglia" -#. 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:1121 src/libslic3r/PrintConfig.cpp:423 -#: src/libslic3r/PrintConfig.cpp:432 +#: src/slic3r/GUI/OptionsGroup.cpp:352 +msgctxt "Layers" msgid "Bottom" msgstr "Inferiore" +#: src/slic3r/GUI/MainFrame.cpp:1121 +msgid "Bottom View" +msgstr "Vista inferiore" + #: src/libslic3r/PrintConfig.cpp:2566 msgid "Bottom contact Z distance" msgstr "Distanza di contatto Z inferiore" @@ -1687,10 +1677,6 @@ msgstr "Il guscio inferiore è spesso %1% mm per l'altezza layer %2% mm." msgid "Bottom solid layers" msgstr "Layer solidi sul fondo" -#: src/slic3r/GUI/MainFrame.cpp:1121 -msgid "Bottom View" -msgstr "Vista inferiore" - #: src/slic3r/GUI/GUI_Factories.cpp:461 src/slic3r/GUI/GUI_Factories.cpp:501 #: src/slic3r/GUI/GUI_Factories.cpp:505 msgid "Box" @@ -1789,10 +1775,6 @@ msgstr "Dimensione Pennello" msgid "Bucket fill" msgstr "Riempimento di colore" -#: src/libslic3r/miniz_extension.cpp:141 -msgid "buffer too small" -msgstr "buffer troppo piccolo" - #: src/slic3r/GUI/GUI_App.cpp:1660 msgid "" "But since this version of PrusaSlicer we don't show this information in " @@ -1819,18 +1801,30 @@ msgstr "" "Nota: Questo nome può essere cambiato in seguito dalle impostazioni delle " "stampanti fisiche" -#: src/slic3r/GUI/PresetHints.cpp:191 -msgid "by the print profile maximum" -msgstr "secondo il massimo del profilo di stampa" +#: src/slic3r/GUI/NotificationManager.cpp:890 +msgid "CANCELED" +msgstr "ANNULLATO" + +#: src/slic3r/GUI/NotificationManager.cpp:895 +msgid "COMPLETED" +msgstr "COMPLETATO" + +#: src/libslic3r/miniz_extension.cpp:117 +msgid "CRC-32 check failed" +msgstr "verifica CRC-32 fallita" + +#: src/slic3r/Utils/Http.cpp:91 +msgid "" +"CURL init has failed. PrusaSlicer will be unable to establish network " +"connections. See logs for additional details." +msgstr "" +"CURL init non riuscito. PrusaSlicer non sarà in grado di stabilire " +"connessioni di rete. Vedere i log per ulteriori dettagli." #: src/slic3r/GUI/Preferences.cpp:314 msgid "Camera" msgstr "Camera" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 -msgid "Camera view" -msgstr "Vista camera" - #: resources/data/hints.ini: [hint:Camera Views] msgid "" "Camera Views\n" @@ -1841,6 +1835,10 @@ msgstr "" "Sapevi che puoi usare i tasti numerici 0-6 per passare rapidamente da " "un'angolazione predefinita della visuale a un' altra?" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 +msgid "Camera view" +msgstr "Vista camera" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:322 msgid "Can't apply when proccess preview." msgstr "Non si può applicare durante la creazione dell'anteprima." @@ -1863,10 +1861,6 @@ msgstr "Cancella selezione" msgid "Cancel upload" msgstr "Annulla il caricamento" -#: src/slic3r/GUI/NotificationManager.cpp:890 -msgid "CANCELED" -msgstr "ANNULLATO" - #: src/slic3r/GUI/PrintHostDialogs.cpp:375 msgid "Cancelled" msgstr "Annullato" @@ -1967,30 +1961,10 @@ msgstr "File di certificato (*.crt, *.pem)|*.crt;*.pem|All files|*.*" msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"" msgstr "Cambia \"%1%\" a \"%2%\" per questa stampante fisica \"%3%\"" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 -msgid "Change camera type (perspective, orthographic)" -msgstr "Cambia tipo di visuale (prospettica, ortografica)" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 -msgid "Change drainage hole diameter" -msgstr "Modifica il diametro dei fori di drenaggio" - -#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 -msgid "Change extruder" -msgstr "Cambia estrusore" - #: src/slic3r/GUI/GUI_ObjectList.cpp:616 msgid "Change Extruder" msgstr "Cambio estrusore" -#: src/slic3r/GUI/DoubleSlider.cpp:1613 -msgid "Change extruder (N/A)" -msgstr "Cambio estrusore (N/A)" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:722 -msgid "Change extruder color" -msgstr "Cambia colore estrusore" - #: src/slic3r/GUI/GUI_ObjectList.cpp:4267 msgid "Change Extruders" msgstr "Cambio Estrusori" @@ -2004,6 +1978,26 @@ msgstr "Modifica Opzione %s" msgid "Change Part Type" msgstr "Modifica il tipo di Parte" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 +msgid "Change camera type (perspective, orthographic)" +msgstr "Cambia tipo di visuale (prospettica, ortografica)" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 +msgid "Change drainage hole diameter" +msgstr "Modifica il diametro dei fori di drenaggio" + +#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 +msgid "Change extruder" +msgstr "Cambia estrusore" + +#: src/slic3r/GUI/DoubleSlider.cpp:1613 +msgid "Change extruder (N/A)" +msgstr "Cambio estrusore (N/A)" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:722 +msgid "Change extruder color" +msgstr "Cambia colore estrusore" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:702 msgid "Change point head diameter" msgstr "Modifica diametro punta della testa" @@ -2040,6 +2034,10 @@ msgstr "" "Cambiando alcune opzioni, l'applicazione si riavvia.\n" "Si perde il contenuto del piano." +#: src/slic3r/GUI/GUI_App.cpp:2219 +msgid "Check for Configuration Updates" +msgstr "Controlla aggiornamenti di configurazione" + #: src/slic3r/GUI/ConfigWizard.cpp:1214 msgid "Check for application updates" msgstr "Verifica la presenza di aggiornamenti" @@ -2048,9 +2046,9 @@ msgstr "Verifica la presenza di aggiornamenti" msgid "Check for configuration updates" msgstr "Controlla aggiornamenti di configurazione" -#: src/slic3r/GUI/GUI_App.cpp:2219 -msgid "Check for Configuration Updates" -msgstr "Controlla aggiornamenti di configurazione" +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 +msgid "Choose SLA archive:" +msgstr "Scegliere l'archivio SLA:" #: src/slic3r/GUI/BedShapeDialog.cpp:552 msgid "Choose a file to import bed texture from (PNG/SVG):" @@ -2069,6 +2067,10 @@ msgstr "Scegli un file STL da cui importare il modello del piano:" msgid "Choose an STL file to import bed shape from:" msgstr "Scegli un file STL da cui importare la forma del piano:" +#: src/slic3r/GUI/GalleryDialog.cpp:453 +msgid "Choose one PNG file:" +msgstr "Scegli un file PNG:" + #: src/slic3r/GUI/GUI_App.cpp:1836 msgid "Choose one file (3MF/AMF):" msgstr "Seleziona un file (3MF/AMF):" @@ -2085,14 +2087,6 @@ msgstr "Scegli uno o più file (STL, OBJ):" msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Seleziona uno o più file (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GalleryDialog.cpp:453 -msgid "Choose one PNG file:" -msgstr "Scegli un file PNG:" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 -msgid "Choose SLA archive:" -msgstr "Scegliere l'archivio SLA:" - #: src/slic3r/GUI/ConfigWizard.cpp:1361 msgid "Choose the type of firmware used by your printer." msgstr "Indica il firmware usato dalla tua stampante." @@ -2107,10 +2101,6 @@ msgstr "Cerchio" msgid "Circular" msgstr "Circolare" -#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 -msgid "Clear all" -msgstr "Pulisci tutto" - #: src/slic3r/GUI/Preferences.cpp:295 msgid "Clear Undo / Redo stack on new project" msgstr "Cancella la cronologia Annulla / Ripeti sul nuovo progetto" @@ -2122,6 +2112,10 @@ msgstr "" "Svuota la cronologia Annulla / Ripeti con un nuovo progetto o quando viene " "caricato un progetto esistente." +#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 +msgid "Clear all" +msgstr "Pulisci tutto" + #: src/slic3r/GUI/GLCanvas3D.cpp:4689 src/slic3r/GUI/GLCanvas3D.cpp:4728 msgid "Click right mouse button to open/close History" msgstr "" @@ -2177,11 +2171,6 @@ msgstr "Chiudi" msgid "Close holes" msgstr "Chiudi i fori" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 -#: src/libslic3r/PrintConfig.cpp:3759 -msgid "Closing distance" -msgstr "Distanza di chiusura" - #: src/slic3r/GUI/MainFrame.cpp:232 msgid "Closing PrusaSlicer while some presets are modified." msgstr "Chiusura di PrusaSlicer mentre alcuni preset vengono modificati." @@ -2190,6 +2179,11 @@ msgstr "Chiusura di PrusaSlicer mentre alcuni preset vengono modificati." msgid "Closing PrusaSlicer. Current project is modified." msgstr "Chiusura di PrusaSlicer. Il progetto corrente è modificato." +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 +#: src/libslic3r/PrintConfig.cpp:3759 +msgid "Closing distance" +msgstr "Distanza di chiusura" + #: src/libslic3r/PrintConfig.cpp:2667 msgid "Closing radius" msgstr "Raggio di chiusura" @@ -2206,6 +2200,15 @@ msgstr "Riduci/Espandi barra laterale" msgid "Color" msgstr "Colore" +#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 +msgid "Color Change G-code" +msgstr "G-code cambio colore" + +#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 +#: src/slic3r/GUI/GUI_Preview.cpp:957 +msgid "Color Print" +msgstr "Color Print (Stampa a Colori)" + #: src/slic3r/GUI/GCodeViewer.cpp:3487 src/slic3r/GUI/GCodeViewer.cpp:3543 msgid "Color change" msgstr "Cambio colore" @@ -2220,10 +2223,6 @@ msgstr "Cambio colore (\"%1%\")" msgid "Color change (\"%1%\") for Extruder %2%" msgstr "Cambio colore (\"%1%\") per Estrusore %2%" -#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 -msgid "Color Change G-code" -msgstr "G-code cambio colore" - #: src/libslic3r/PrintConfig.cpp:2432 msgid "Color change G-code" msgstr "G-code cambio colore" @@ -2232,11 +2231,6 @@ msgstr "G-code cambio colore" msgid "Color changes" msgstr "Cambi colore" -#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 -#: src/slic3r/GUI/GUI_Preview.cpp:957 -msgid "Color Print" -msgstr "Color Print (Stampa a Colori)" - #: src/libslic3r/PrintConfig.cpp:537 msgid "Colorprint height" msgstr "Altezza Colorprint" @@ -2270,15 +2264,15 @@ msgstr "Comandi" msgid "Comment:" msgstr "Commento:" -#: src/slic3r/GUI/MainFrame.cpp:1417 -msgid "Compare presets" -msgstr "Confronta i preset" - #: src/slic3r/GUI/MainFrame.cpp:1417 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 msgid "Compare Presets" msgstr "Confronta Preset" +#: src/slic3r/GUI/MainFrame.cpp:1417 +msgid "Compare presets" +msgstr "Confronta i preset" + #: src/slic3r/GUI/Tab.cpp:216 msgid "Compare this preset with some another" msgstr "Confronta questo preset con un altro" @@ -2311,14 +2305,6 @@ msgstr "Completa singoli oggetti" msgid "Completed" msgstr "Completato" -#: src/slic3r/GUI/NotificationManager.cpp:895 -msgid "COMPLETED" -msgstr "COMPLETATO" - -#: src/libslic3r/miniz_extension.cpp:113 -msgid "compression failed" -msgstr "compressione fallita" - #: src/libslic3r/PrintConfig.cpp:707 src/libslic3r/PrintConfig.cpp:1151 #: src/libslic3r/PrintConfig.cpp:2722 msgid "Concentric" @@ -2336,6 +2322,23 @@ msgstr "Co&nfigurazione guidata" msgid "Configuration Assistant" msgstr "Assistente configurazione" +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 +msgid "Configuration Snapshots" +msgstr "Istantanee di Configurazione" + +#: src/slic3r/Utils/PresetUpdater.cpp:777 +msgid "" +"Configuration Updates causes a lost of preset modification.\n" +"So, check unsaved changes and save them if necessary." +msgstr "" +"Gli aggiornamenti di configurazione causano la perdita della modifica del " +"preset.\n" +"Quindi, controlla le modifiche non salvate e salvale se necessario." + +#: src/slic3r/GUI/ConfigWizard.cpp:3039 +msgid "Configuration Wizard" +msgstr "Configurazione Guidata" + #: src/slic3r/GUI/GUI.cpp:355 msgid "" "Configuration bundle was loaded, however some configuration values were not " @@ -2378,10 +2381,6 @@ msgstr "" "tra le istantanee usando il menu Configurazione - Istantanee di " "Configurazione." -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 -msgid "Configuration Snapshots" -msgstr "Istantanee di Configurazione" - #: src/slic3r/GUI/UpdateDialogs.cpp:94 src/slic3r/GUI/UpdateDialogs.cpp:261 msgid "Configuration update" msgstr "Aggiornamento di configurazione" @@ -2398,19 +2397,6 @@ msgstr "Aggiornamento di configurazione disponibile." msgid "Configuration updates" msgstr "Aggiornamenti di configurazione" -#: src/slic3r/Utils/PresetUpdater.cpp:777 -msgid "" -"Configuration Updates causes a lost of preset modification.\n" -"So, check unsaved changes and save them if necessary." -msgstr "" -"Gli aggiornamenti di configurazione causano la perdita della modifica del " -"preset.\n" -"Quindi, controlla le modifiche non salvate e salvale se necessario." - -#: src/slic3r/GUI/ConfigWizard.cpp:3039 -msgid "Configuration Wizard" -msgstr "Configurazione Guidata" - #: src/slic3r/GUI/FirmwareDialog.cpp:916 msgid "Confirmation" msgstr "Conferma" @@ -2480,11 +2466,6 @@ msgstr "" msgid "Connection to OctoPrint works correctly." msgstr "Connessione con OctoPrint funzionante." -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 -msgid "Connection to printers connected via the print host failed." -msgstr "" -"Collegamento alle stampanti collegate tramite l'host di stampa fallito." - #: src/slic3r/Utils/OctoPrint.cpp:292 msgid "Connection to Prusa SL1 / SL1S works correctly." msgstr "Collegamento a Prusa SL1 / SL1S correttamente funzionante." @@ -2497,9 +2478,10 @@ msgstr "Il collegamento a PrusaLink funziona correttamente." msgid "Connection to Repetier works correctly." msgstr "La connessione a Repetier funziona correttamente." -#: src/slic3r/GUI/DoubleSlider.cpp:1458 -msgid "continue" -msgstr "continua" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 +msgid "Connection to printers connected via the print host failed." +msgstr "" +"Collegamento alle stampanti collegate tramite l'host di stampa fallito." #: src/slic3r/Config/Snapshot.cpp:601 msgid "Continue" @@ -2586,25 +2568,26 @@ msgstr "Posizione tubo di raffreddamento" msgid "Copies of the selected object" msgstr "Copie dell'oggetto selezionato" -#: src/slic3r/GUI/GLCanvas3D.cpp:4520 +#: src/slic3r/GUI/SavePresetDialog.cpp:221 +msgctxt "PresetName" msgid "Copy" msgstr "Copia" +#: src/slic3r/GUI/AboutDialog.cpp:308 +msgid "Copy Version Info" +msgstr "Copia info versione" + #: src/slic3r/GUI/MainFrame.cpp:1343 msgid "Copy selection to clipboard" msgstr "Copia selezione negli appunti" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 -msgid "Copy to clipboard" -msgstr "Copia negli appunti" - #: src/slic3r/GUI/SysInfoDialog.cpp:169 msgid "Copy to Clipboard" msgstr "Copia negli appunti" -#: src/slic3r/GUI/AboutDialog.cpp:308 -msgid "Copy Version Info" -msgstr "Copia info versione" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 +msgid "Copy to clipboard" +msgstr "Copia negli appunti" #: src/slic3r/Utils/PresetUpdater.cpp:61 #, boost-format @@ -2759,10 +2742,6 @@ msgstr "" "risoluzione finale di stampa, dunque è preferibile settare il valore " "ragionevolmente basso." -#: src/libslic3r/miniz_extension.cpp:117 -msgid "CRC-32 check failed" -msgstr "verifica CRC-32 fallita" - #: src/libslic3r/PrintConfig.cpp:3682 msgid "Create pad around object and ignore the support elevation" msgstr "Genera Pad intorno all'oggetto ed ignora l'elevazione del supporto" @@ -2801,14 +2780,6 @@ msgstr "Ctrl + Rotella del mouse" msgid "Cubic" msgstr "Cubico" -#: src/slic3r/Utils/Http.cpp:91 -msgid "" -"CURL init has failed. PrusaSlicer will be unable to establish network " -"connections. See logs for additional details." -msgstr "" -"CURL init non riuscito. PrusaSlicer non sarà in grado di stabilire " -"connessioni di rete. Vedere i log per ulteriori dettagli." - #: src/slic3r/GUI/wxExtensions.cpp:645 #, c-format, boost-format msgid "Current mode is %s" @@ -2926,10 +2897,6 @@ msgstr "Zona morta:" msgid "Decimate ratio" msgstr "Rapporto di decimazione" -#: src/libslic3r/miniz_extension.cpp:111 -msgid "decompression failed or archive is corrupted" -msgstr "decompressione non riuscita o archivio corrotto" - #: src/slic3r/GUI/Plater.cpp:5517 msgid "Decrease Instances" msgstr "Diminuisci Istanze" @@ -2940,16 +2907,9 @@ msgstr "Diminuisci Istanze" msgid "Default" msgstr "Predefinito" -#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 -#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 -msgid "default" -msgstr "predefinito" +#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 +msgid "Default SLA material profile" +msgstr "Profilo materiale SLA predefinito" #: src/libslic3r/PrintConfig.cpp:1072 msgid "" @@ -2966,18 +2926,10 @@ msgstr "" msgid "Default color" msgstr "Colore predefinito" -#: src/slic3r/GUI/GCodeViewer.cpp:3388 -msgid "default color" -msgstr "colore predefinito" - #: src/libslic3r/PrintConfig.cpp:837 msgid "Default extrusion width" msgstr "Larghezza estrusione predefinita" -#: src/slic3r/GUI/Tab.cpp:1386 -msgid "default filament profile" -msgstr "profilo filamento predefinito" - #: src/libslic3r/PrintConfig.cpp:622 msgid "Default filament profile" msgstr "Profilo filamento predefinito" @@ -2992,10 +2944,6 @@ msgstr "" "Quando si seleziona il profilo stampante corrente, questo profilo filamento " "verrà attivato." -#: src/slic3r/GUI/Tab.cpp:1383 -msgid "default print profile" -msgstr "profilo di stampa predefinito" - #: src/libslic3r/PrintConfig.cpp:629 msgid "Default print profile" msgstr "Profilo di stampa predefinito" @@ -3011,22 +2959,6 @@ msgstr "" "selezione del profilo stampante corrente, questo profilo di stampa verrà " "attivato." -#: src/slic3r/GUI/Tab.cpp:1400 -msgid "default SLA material profile" -msgstr "profilo materiale SLA predefinito" - -#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 -msgid "Default SLA material profile" -msgstr "Profilo materiale SLA predefinito" - -#: src/slic3r/GUI/Tab.cpp:1404 -msgid "default SLA print profile" -msgstr "profilo di stampa SLA predefinito" - -#: src/slic3r/GUI/Field.cpp:190 -msgid "default value" -msgstr "valore predefinito" - #: src/slic3r/GUI/ConfigWizard.cpp:1177 msgid "Define a custom printer profile" msgstr "Inserisci un profilo stampante personalizzato" @@ -3047,10 +2979,6 @@ msgstr "" msgid "Delay after unloading" msgstr "Ritardo dopo lo scarico" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "delete" -msgstr "elimina" - #: src/slic3r/GUI/GalleryDialog.cpp:118 src/slic3r/GUI/GalleryDialog.cpp:508 #: src/slic3r/GUI/GLCanvas3D.cpp:4480 src/slic3r/GUI/GUI_Factories.cpp:444 #: src/slic3r/GUI/Tab.cpp:3734 @@ -3061,11 +2989,6 @@ msgstr "Elimina" msgid "Delete &All" msgstr "Elimin&a tutto" -#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 -msgid "Delete all" -msgstr "Elimina tutto" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1901 msgid "Delete All Instances from Object" msgstr "Elimina Tutte le Istanze dall'Oggetto" @@ -3074,22 +2997,6 @@ msgstr "Elimina Tutte le Istanze dall'Oggetto" msgid "Delete All Objects" msgstr "Cancella tutti gli oggetti" -#: src/slic3r/GUI/DoubleSlider.cpp:2012 -msgid "Delete color change" -msgstr "Elimina il cambio colore" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 -msgid "Delete color change marker for current layer" -msgstr "Elimina il segnale di cambio colore per il layer corrente" - -#: src/slic3r/GUI/DoubleSlider.cpp:2015 -msgid "Delete custom G-code" -msgstr "Elimina G-code personalizzato" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 -msgid "Delete drainage hole" -msgstr "Elimina foro di drenaggio" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1917 msgid "Delete Height Range" msgstr "Elimina Intervallo Altezza" @@ -3102,33 +3009,15 @@ msgstr "Elimina Istanza" msgid "Delete Object" msgstr "Elimina Oggetto" -#: src/slic3r/GUI/GalleryDialog.cpp:118 -msgid "Delete one or more custom shape. You can't delete system shapes" -msgstr "" -"Elimina una o più forme personalizzate. Non puoi cancellare le forme di " -"sistema" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:105 #, c-format, boost-format msgid "Delete Option %s" msgstr "Elimina Opzione %s" -#: src/slic3r/GUI/DoubleSlider.cpp:2014 -msgid "Delete pause print" -msgstr "Elimina pausa stampa" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:733 -msgid "Delete physical printer" -msgstr "Elimina stampante fisica" - #: src/slic3r/GUI/PresetComboBoxes.cpp:340 msgid "Delete Physical Printer" msgstr "Elimina stampante fisica" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 -msgid "Delete selected" -msgstr "Elimina selezionato" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2934 msgid "Delete Selected" msgstr "Elimina Selezionati" @@ -3149,6 +3038,45 @@ msgstr "Elimina Impostazioni" msgid "Delete Subobject" msgstr "Elimina Sotto-oggetto" +#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 +#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 +msgid "Delete all" +msgstr "Elimina tutto" + +#: src/slic3r/GUI/DoubleSlider.cpp:2012 +msgid "Delete color change" +msgstr "Elimina il cambio colore" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 +msgid "Delete color change marker for current layer" +msgstr "Elimina il segnale di cambio colore per il layer corrente" + +#: src/slic3r/GUI/DoubleSlider.cpp:2015 +msgid "Delete custom G-code" +msgstr "Elimina G-code personalizzato" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 +msgid "Delete drainage hole" +msgstr "Elimina foro di drenaggio" + +#: src/slic3r/GUI/GalleryDialog.cpp:118 +msgid "Delete one or more custom shape. You can't delete system shapes" +msgstr "" +"Elimina una o più forme personalizzate. Non puoi cancellare le forme di " +"sistema" + +#: src/slic3r/GUI/DoubleSlider.cpp:2014 +msgid "Delete pause print" +msgstr "Elimina pausa stampa" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:733 +msgid "Delete physical printer" +msgstr "Elimina stampante fisica" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 +msgid "Delete selected" +msgstr "Elimina selezionato" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:522 msgid "Delete support point" msgstr "Elimina punto di supporto" @@ -3225,10 +3153,6 @@ msgstr "Deseleziona tutti gli oggetti" msgid "Desktop Integration" msgstr "Integrazione desktop" -#: src/slic3r/GUI/NotificationManager.hpp:768 -msgid "Desktop integration failed." -msgstr "Integrazione desktop non riuscita." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:466 msgid "" "Desktop Integration sets this binary to be searchable by the system.\n" @@ -3240,6 +3164,10 @@ msgstr "" "\n" "Premi \"Esegui\" per procedere." +#: src/slic3r/GUI/NotificationManager.hpp:768 +msgid "Desktop integration failed." +msgstr "Integrazione desktop non riuscita." + #: src/slic3r/GUI/NotificationManager.hpp:766 msgid "Desktop integration was successful." msgstr "Integrazione desktop riuscita." @@ -3334,10 +3262,6 @@ msgstr "" "Perimetri e regola i valori nel pannello di destra. Leggi di più nella " "documentazione." -#: src/slic3r/GUI/Plater.cpp:3652 -msgid "differs from the original file" -msgstr "differisce dal file originale" - #: src/libslic3r/PrintConfig.cpp:2231 msgid "Direction" msgstr "Direzione" @@ -3514,19 +3438,15 @@ msgstr "Vuoi salvare le modifiche di \"%1%\"?" msgid "Do you want to save your manually edited support points?" msgstr "Vuoi salvare i punti di supporto modificati manualmente?" -#: src/slic3r/GUI/ConfigWizard.cpp:2463 -msgid "Do you want to select default filaments for these FFF printer models?" -msgstr "" -"Vuoi selezionare i filamenti predefiniti per questi modelli di stampante FFF?" - #: src/slic3r/GUI/ConfigWizard.cpp:2481 msgid "Do you want to select default SLA materials for these printer models?" msgstr "" "Vuoi selezionare i materiali SLA predefiniti per questi modelli di stampante?" -#: src/slic3r/GUI/Plater.cpp:5202 -msgid "does not contain valid gcode." -msgstr "non contiene un g-code valido." +#: src/slic3r/GUI/ConfigWizard.cpp:2463 +msgid "Do you want to select default filaments for these FFF printer models?" +msgstr "" +"Vuoi selezionare i filamenti predefiniti per questi modelli di stampante FFF?" #: src/libslic3r/PrintConfig.cpp:4353 msgid "Don't arrange" @@ -3621,10 +3541,37 @@ msgstr "Dinamico" msgid "E&xport" msgstr "Esporta" +#: src/slic3r/GUI/NotificationManager.cpp:885 +msgid "ERROR" +msgstr "ERRORE" + +#: src/slic3r/GUI/NotificationManager.cpp:1447 +#: src/slic3r/GUI/NotificationManager.cpp:1454 +#: src/slic3r/GUI/NotificationManager.cpp:1470 +#: src/slic3r/GUI/NotificationManager.cpp:1476 +#: src/slic3r/GUI/NotificationManager.cpp:1547 +msgid "ERROR:" +msgstr "ERRORE:" + +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 +msgid "" +"ERROR: Please close all manipulators available from the left toolbar first" +msgstr "" +"ERRORE: Chiudi prima tutti i manipolatori disponibili nella barra degli " +"strumenti di sinistra" + +#: src/slic3r/GUI/Jobs/Job.cpp:111 +msgid "ERROR: not enough resources to execute a new job." +msgstr "ERRORE: risorse non sufficienti per eseguire un nuovo lavoro." + #: src/slic3r/GUI/ImGuiWrapper.cpp:527 msgid "Edit" msgstr "Modifica" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 +msgid "Edit Height Range" +msgstr "Modifica Intervallo Altezza" + #: src/slic3r/GUI/DoubleSlider.cpp:2004 msgid "Edit color" msgstr "Modifica colore" @@ -3639,10 +3586,6 @@ msgstr "" msgid "Edit custom G-code" msgstr "Modifica G-code personalizzato" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 -msgid "Edit Height Range" -msgstr "Modifica Intervallo Altezza" - #: src/slic3r/GUI/DoubleSlider.cpp:2005 msgid "Edit pause print message" msgstr "Modifica messaggio pausa di stampa" @@ -3675,10 +3618,6 @@ msgstr "Vettorizzazione Eigen supportata:" msgid "Ejec&t SD Card / Flash Drive" msgstr "Espelli Scheda SD / Memoria flash (&t)" -#: src/slic3r/GUI/NotificationManager.cpp:701 -msgid "Eject drive" -msgstr "Espelli dispositivo" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:91 msgid "Eject SD card / Flash drive" msgstr "Espelli scheda SD / Memoria flash" @@ -3688,6 +3627,10 @@ msgid "Eject SD card / Flash drive after the G-code was exported to it." msgstr "" "Espelli scheda SD / Memoria flash dopo l'esportazione del G-code in essa." +#: src/slic3r/GUI/NotificationManager.cpp:701 +msgid "Eject drive" +msgstr "Espelli dispositivo" + #: src/slic3r/GUI/Plater.cpp:2202 #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." @@ -3992,9 +3935,9 @@ msgstr "" msgid "Error" msgstr "Errore" -#: src/slic3r/GUI/NotificationManager.cpp:885 -msgid "ERROR" -msgstr "ERRORE" +#: src/slic3r/GUI/PrintHostDialogs.cpp:253 +msgid "Error Message" +msgstr "Messaggio d'errore" #: src/slic3r/GUI/FirmwareDialog.cpp:650 #, c-format, boost-format @@ -4013,10 +3956,6 @@ msgstr "Errore durante la sostituzione" msgid "Error loading shaders" msgstr "Errore caricamento shader" -#: src/slic3r/GUI/PrintHostDialogs.cpp:253 -msgid "Error Message" -msgstr "Messaggio d'errore" - #: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " @@ -4056,30 +3995,11 @@ msgstr "Errore!" msgid "Error! Invalid model" msgstr "Errore! Modello non valido" -#: src/slic3r/GUI/NotificationManager.cpp:1447 -#: src/slic3r/GUI/NotificationManager.cpp:1454 -#: src/slic3r/GUI/NotificationManager.cpp:1470 -#: src/slic3r/GUI/NotificationManager.cpp:1476 -#: src/slic3r/GUI/NotificationManager.cpp:1547 -msgid "ERROR:" -msgstr "ERRORE:" - #: src/slic3r/GUI/FirmwareDialog.cpp:652 #, c-format, boost-format msgid "Error: %s" msgstr "Errore: %s" -#: src/slic3r/GUI/Jobs/Job.cpp:111 -msgid "ERROR: not enough resources to execute a new job." -msgstr "ERRORE: risorse non sufficienti per eseguire un nuovo lavoro." - -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 -msgid "" -"ERROR: Please close all manipulators available from the left toolbar first" -msgstr "" -"ERRORE: Chiudi prima tutti i manipolatori disponibili nella barra degli " -"strumenti di sinistra" - #: src/slic3r/GUI/Plater.cpp:301 src/slic3r/GUI/Plater.cpp:1339 #: src/slic3r/GUI/Plater.cpp:1426 msgid "Estimated printing time" @@ -4101,15 +4021,6 @@ msgstr "Evento" msgid "Everywhere" msgstr "Ovunque" -#: src/slic3r/GUI/PresetHints.cpp:59 -#, boost-format -msgid "except for the first %1% layers." -msgstr "ad eccezione dei primi %1% layer." - -#: src/slic3r/GUI/PresetHints.cpp:61 -msgid "except for the first layer." -msgstr "ad eccezione del primo layer." - #: src/libslic3r/Print.cpp:575 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" @@ -4157,14 +4068,14 @@ msgstr "" msgid "Expert" msgstr "Esperto" -#: src/slic3r/GUI/ConfigWizard.cpp:1281 -msgid "Expert mode" -msgstr "Modalità Esperto" - #: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Expert View Mode" msgstr "Modalità Visualizzazione Esperto" +#: src/slic3r/GUI/ConfigWizard.cpp:1281 +msgid "Expert mode" +msgstr "Modalità Esperto" + #: src/slic3r/GUI/Plater.cpp:6492 msgid "Export" msgstr "Esporta" @@ -4185,14 +4096,6 @@ msgstr "Esporta percorso strumen&to come OBJ" msgid "Export 3MF" msgstr "Esporta 3MF" -#: src/slic3r/GUI/MainFrame.cpp:1260 -msgid "Export all presets including physical printers to file" -msgstr "Esportazione di tutti i preset, incluse le stampanti fisiche, su file" - -#: src/slic3r/GUI/MainFrame.cpp:1257 -msgid "Export all presets to file" -msgstr "Esporta tutti i preset su file" - #: src/libslic3r/PrintConfig.cpp:4261 msgid "Export AMF" msgstr "Esporta AMF" @@ -4201,14 +4104,6 @@ msgstr "Esporta AMF" msgid "Export AMF file:" msgstr "Esporta file AMF:" -#: src/slic3r/GUI/GUI_Factories.cpp:715 -msgid "Export as STL" -msgstr "Esporta come STL" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:89 -msgid "Export config" -msgstr "Esporta config" - #: src/slic3r/GUI/MainFrame.cpp:1257 msgid "Export Config &Bundle" msgstr "Esporta Configurazione in &Bundle" @@ -4217,6 +4112,63 @@ msgstr "Esporta Configurazione in &Bundle" msgid "Export Config Bundle With Physical Printers" msgstr "Esportazione Config Bundle con stampanti fisiche" +#: src/slic3r/GUI/NotificationManager.cpp:1113 +msgid "Export G-Code." +msgstr "Esporta G-code." + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 +#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +msgid "Export G-code" +msgstr "Esporta G-code" + +#: src/slic3r/GUI/MainFrame.cpp:1235 +msgid "Export G-code to SD Card / Flash Drive" +msgstr "Esporta G-code su Scheda SD / Memoria flash" + +#: src/libslic3r/PrintConfig.cpp:4238 +msgid "Export OBJ" +msgstr "Esporta OBJ" + +#: src/slic3r/GUI/Plater.cpp:2865 +msgid "Export OBJ file:" +msgstr "Esporta file OBJ:" + +#: src/slic3r/GUI/MainFrame.cpp:1239 +msgid "Export Plate as &STL" +msgstr "Esporta piano come &STL" + +#: src/slic3r/GUI/MainFrame.cpp:1242 +msgid "Export Plate as STL &Including Supports" +msgstr "Esporta piano come STL &includendo i supporti" + +#: src/libslic3r/PrintConfig.cpp:4250 +msgid "Export SLA" +msgstr "Esporta SLA" + +#: src/libslic3r/PrintConfig.cpp:4266 +msgid "Export STL" +msgstr "Esporta STL" + +#: src/slic3r/GUI/Plater.cpp:2846 +msgid "Export STL file:" +msgstr "Esporta file STL:" + +#: src/slic3r/GUI/MainFrame.cpp:1260 +msgid "Export all presets including physical printers to file" +msgstr "Esportazione di tutti i preset, incluse le stampanti fisiche, su file" + +#: src/slic3r/GUI/MainFrame.cpp:1257 +msgid "Export all presets to file" +msgstr "Esporta tutti i preset su file" + +#: src/slic3r/GUI/GUI_Factories.cpp:715 +msgid "Export as STL" +msgstr "Esporta come STL" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:89 +msgid "Export config" +msgstr "Esporta config" + #: src/slic3r/GUI/MainFrame.cpp:1254 msgid "Export current configuration to file" msgstr "Esporta la configurazione corrente su file" @@ -4244,55 +4196,14 @@ msgstr "" "Esporta il percorso completo dei modelli e fonti delle parti nei file 3mf e " "amf" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 -msgid "Export G-code" -msgstr "Esporta G-code" - -#: src/slic3r/GUI/MainFrame.cpp:1235 -msgid "Export G-code to SD Card / Flash Drive" -msgstr "Esporta G-code su Scheda SD / Memoria flash" - -#: src/slic3r/GUI/NotificationManager.cpp:1113 -msgid "Export G-Code." -msgstr "Esporta G-code." - -#: src/libslic3r/PrintConfig.cpp:4238 -msgid "Export OBJ" -msgstr "Esporta OBJ" - -#: src/slic3r/GUI/Plater.cpp:2865 -msgid "Export OBJ file:" -msgstr "Esporta file OBJ:" - #: src/slic3r/Utils/FixModelByWin10.cpp:379 msgid "Export of a temporary 3mf file failed" msgstr "L'esportazione di un file 3mf non è riuscita" -#: src/slic3r/GUI/MainFrame.cpp:1239 -msgid "Export Plate as &STL" -msgstr "Esporta piano come &STL" - -#: src/slic3r/GUI/MainFrame.cpp:1242 -msgid "Export Plate as STL &Including Supports" -msgstr "Esporta piano come STL &includendo i supporti" - -#: src/libslic3r/PrintConfig.cpp:4250 -msgid "Export SLA" -msgstr "Esporta SLA" - #: src/slic3r/GUI/Preferences.cpp:148 msgid "Export sources full pathnames to 3mf and amf" msgstr "Esporta il percorso completo delle fonti su 3mf e amf" -#: src/libslic3r/PrintConfig.cpp:4266 -msgid "Export STL" -msgstr "Esporta STL" - -#: src/slic3r/GUI/Plater.cpp:2846 -msgid "Export STL file:" -msgstr "Esporta file STL:" - #: src/libslic3r/PrintConfig.cpp:4257 msgid "Export the model(s) as 3MF." msgstr "Esporta modello/i come 3MF." @@ -4321,6 +4232,10 @@ msgstr "Esporta percorso strumento come OBJ" msgid "Export." msgstr "Esporta." +#: src/libslic3r/Print.cpp:863 +msgid "Exporting G-code" +msgstr "Esportando il G-code" + #: src/slic3r/GUI/MainFrame.cpp:1809 msgid "Exporting configuration bundle" msgstr "Esportazione del bundle di configurazione" @@ -4329,10 +4244,6 @@ msgstr "Esportazione del bundle di configurazione" msgid "Exporting finished." msgstr "Esportazione completata." -#: src/libslic3r/Print.cpp:863 -msgid "Exporting G-code" -msgstr "Esportando il G-code" - #: src/slic3r/Utils/FixModelByWin10.cpp:221 #: src/slic3r/Utils/FixModelByWin10.cpp:362 msgid "Exporting source model" @@ -4359,10 +4270,6 @@ msgstr "Tempo di esposizione" msgid "External perimeter" msgstr "Perimetro esterno" -#: src/slic3r/GUI/PresetHints.cpp:170 -msgid "external perimeters" -msgstr "perimetri esterni" - #: src/libslic3r/PrintConfig.cpp:727 src/libslic3r/PrintConfig.cpp:739 msgid "External perimeters" msgstr "Perimetri esterni" @@ -4408,6 +4315,10 @@ msgstr "Estrusore %d" msgid "Extruder (tool) is changed to Extruder \"%1%\"" msgstr "Estrusore (strumento) viene cambiato a Estrusore \"%1%\"" +#: src/libslic3r/PrintConfig.cpp:804 +msgid "Extruder Color" +msgstr "Colore estrusore" + #: src/slic3r/GUI/WipeTowerDialog.cpp:300 msgid "Extruder changed to" msgstr "Cambia estrusore a" @@ -4416,10 +4327,6 @@ msgstr "Cambia estrusore a" msgid "Extruder clearance" msgstr "Margine estrusore" -#: src/libslic3r/PrintConfig.cpp:804 -msgid "Extruder Color" -msgstr "Colore estrusore" - #: src/libslic3r/PrintConfig.cpp:811 msgid "Extruder offset" msgstr "Offset estrusore" @@ -4441,22 +4348,10 @@ msgstr "Conteggio estrusori" msgid "Extrusion" msgstr "Estrusione" -#: src/libslic3r/PrintConfig.cpp:821 -msgid "Extrusion axis" -msgstr "Asse estrusore" - -#: src/libslic3r/PrintConfig.cpp:827 -msgid "Extrusion multiplier" -msgstr "Moltiplicatore estrusione" - #: src/slic3r/GUI/ConfigWizard.cpp:1567 msgid "Extrusion Temperature:" msgstr "Temperatura di estrusione:" -#: src/slic3r/GUI/Tab.cpp:1650 -msgid "Extrusion width" -msgstr "Larghezza estrusione" - #: src/slic3r/GUI/GUI_Factories.cpp:134 src/libslic3r/PrintConfig.cpp:728 #: src/libslic3r/PrintConfig.cpp:838 src/libslic3r/PrintConfig.cpp:1195 #: src/libslic3r/PrintConfig.cpp:1455 src/libslic3r/PrintConfig.cpp:1956 @@ -4465,6 +4360,22 @@ msgstr "Larghezza estrusione" msgid "Extrusion Width" msgstr "Larghezza Estrusione" +#: src/libslic3r/PrintConfig.cpp:821 +msgid "Extrusion axis" +msgstr "Asse estrusore" + +#: src/libslic3r/PrintConfig.cpp:827 +msgid "Extrusion multiplier" +msgstr "Moltiplicatore estrusione" + +#: src/slic3r/GUI/Tab.cpp:1650 +msgid "Extrusion width" +msgstr "Larghezza estrusione" + +#: src/slic3r/GUI/ConfigWizard.cpp:2097 +msgid "FFF Technology Printers" +msgstr "Stampanti con tecnologia FFF" + #: src/slic3r/GUI/Plater.cpp:213 msgid "Facets" msgstr "Facet" @@ -4473,10 +4384,6 @@ msgstr "Facet" msgid "Faded layers" msgstr "Layer sfumati" -#: src/libslic3r/miniz_extension.cpp:103 -msgid "failed finding central directory" -msgstr "directory centrale non trovata" - #: src/slic3r/GUI/Plater.cpp:2516 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." @@ -4500,6 +4407,10 @@ msgstr "Impossibile attivare l'istantanea di configurazione." msgid "Failed to drill some holes into the model" msgstr "Mancata esecuzione di alcuni fori nel modello" +#: src/slic3r/GUI/GCodeViewer.cpp:3296 +msgid "Fan Speed (%)" +msgstr "Velocità ventola (%)" + #: src/slic3r/GUI/Tab.cpp:2007 msgid "Fan settings" msgstr "Impostazioni ventola" @@ -4508,10 +4419,6 @@ msgstr "Impostazioni ventola" msgid "Fan speed" msgstr "Velocità ventola" -#: src/slic3r/GUI/GCodeViewer.cpp:3296 -msgid "Fan Speed (%)" -msgstr "Velocità ventola (%)" - #: src/slic3r/GUI/PresetHints.cpp:55 #, boost-format msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%." @@ -4569,19 +4476,41 @@ msgstr "Tipo di caratteristica" msgid "Feature types" msgstr "Tipi di caratteristica" -#: src/slic3r/GUI/ConfigWizard.cpp:2097 -msgid "FFF Technology Printers" -msgstr "Stampanti con tecnologia FFF" - #: src/slic3r/GUI/GCodeViewer.cpp:3696 src/slic3r/GUI/GCodeViewer.cpp:3722 #: src/slic3r/GUI/GUI.cpp:339 src/slic3r/GUI/Plater.cpp:818 #: src/slic3r/GUI/Tab.cpp:1962 src/slic3r/GUI/Tab.cpp:1963 msgid "Filament" msgstr "Filamento" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 -msgid "filament" -msgstr "filamento" +#: src/slic3r/GUI/ConfigWizard.cpp:1489 +msgid "Filament Diameter:" +msgstr "Diametro del filamento:" + +#: src/libslic3r/GCode.cpp:725 +msgid "Filament End G-code" +msgstr "G-code Finale Filamento" + +#: src/slic3r/GUI/Tab.cpp:1861 +msgid "Filament Overrides" +msgstr "Sovrascrittura filamento" + +#: src/slic3r/GUI/ConfigWizard.cpp:2912 +msgid "Filament Profiles Selection" +msgstr "Selezione Profili Filamento" + +#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 +#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 +#: src/slic3r/GUI/Tab.hpp:448 +msgid "Filament Settings" +msgstr "Impostazioni Filamento" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 +msgid "Filament Settings Tab" +msgstr "Scheda Impostazioni Filamento" + +#: src/libslic3r/GCode.cpp:718 +msgid "Filament Start G-code" +msgstr "G-code Iniziale Filamento" #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Filament and Nozzle Diameters" @@ -4592,14 +4521,6 @@ msgstr "Diametro filamento e ugello" msgid "Filament at extruder %1%" msgstr "Filamento all'estrusore %1%" -#: src/slic3r/GUI/ConfigWizard.cpp:1489 -msgid "Filament Diameter:" -msgstr "Diametro del filamento:" - -#: src/libslic3r/GCode.cpp:725 -msgid "Filament End G-code" -msgstr "G-code Finale Filamento" - #: src/libslic3r/PrintConfig.cpp:936 msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " @@ -4616,36 +4537,14 @@ msgstr "Durata caricamento filamento" msgid "Filament notes" msgstr "Note filamento" -#: src/slic3r/GUI/Tab.cpp:1861 -msgid "Filament Overrides" -msgstr "Sovrascrittura filamento" - #: src/libslic3r/PrintConfig.cpp:1920 msgid "Filament parking position" msgstr "Posizione di parcheggio del filamento" -#: src/slic3r/GUI/ConfigWizard.cpp:2912 -msgid "Filament Profiles Selection" -msgstr "Selezione Profili Filamento" - #: src/slic3r/GUI/Tab.cpp:2024 msgid "Filament properties" msgstr "Proprietà filamento" -#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 -#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 -msgid "Filament Settings" -msgstr "Impostazioni Filamento" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 -msgid "Filament Settings Tab" -msgstr "Scheda Impostazioni Filamento" - -#: src/libslic3r/GCode.cpp:718 -msgid "Filament Start G-code" -msgstr "G-code Iniziale Filamento" - #: src/libslic3r/PrintConfig.cpp:1011 msgid "Filament type" msgstr "Tipo filamento" @@ -4654,58 +4553,18 @@ msgstr "Tipo filamento" msgid "Filament unload time" msgstr "Durata scaricamento filamento" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 -msgid "filaments" -msgstr "filamenti" - #: src/slic3r/GUI/ConfigWizard.cpp:752 src/slic3r/GUI/ConfigWizard.cpp:2043 #: src/slic3r/GUI/ConfigWizard.cpp:2912 msgid "Filaments" msgstr "Filamenti" -#: src/libslic3r/miniz_extension.cpp:131 -msgid "file close failed" -msgstr "chiusura del file fallita" - -#: src/libslic3r/miniz_extension.cpp:125 -msgid "file create failed" -msgstr "generazione del file non riuscita" - -#: src/slic3r/GUI/Plater.cpp:3529 -msgid "File for the replace wasn't selected" -msgstr "Non è stato selezionato il file per la sostituzione" - #: src/slic3r/GUI/MainFrame.cpp:1626 msgid "File Not Found" msgstr "file non trovato" -#: src/libslic3r/miniz_extension.cpp:145 -msgid "file not found" -msgstr "file non trovato" - -#: src/libslic3r/miniz_extension.cpp:123 -msgid "file open failed" -msgstr "apertura file non riuscita" - -#: src/libslic3r/miniz_extension.cpp:129 -msgid "file read failed" -msgstr "lettura del file non riuscita" - -#: src/libslic3r/miniz_extension.cpp:133 -msgid "file seek failed" -msgstr "ricerca file fallita" - -#: src/libslic3r/miniz_extension.cpp:135 -msgid "file stat failed" -msgstr "statistica file non riuscita" - -#: src/libslic3r/miniz_extension.cpp:95 -msgid "file too large" -msgstr "file troppo grande" - -#: src/libslic3r/miniz_extension.cpp:127 -msgid "file write failed" -msgstr "scrittura file fallita" +#: src/slic3r/GUI/Plater.cpp:3529 +msgid "File for the replace wasn't selected" +msgstr "Non è stato selezionato il file per la sostituzione" #: src/slic3r/GUI/PrintHostDialogs.cpp:252 msgid "Filename" @@ -4784,14 +4643,6 @@ msgstr "Finito" msgid "Firmware" msgstr "Firmware" -#: src/slic3r/GUI/FirmwareDialog.cpp:787 -msgid "Firmware flasher" -msgstr "Firmware flasher" - -#: src/slic3r/GUI/FirmwareDialog.cpp:812 -msgid "Firmware image:" -msgstr "Immagine firmware:" - #: src/slic3r/GUI/Tab.cpp:3007 msgid "Firmware Retraction" msgstr "Retrazione Firmware" @@ -4800,6 +4651,14 @@ msgstr "Retrazione Firmware" msgid "Firmware Type" msgstr "Tipo Firmware" +#: src/slic3r/GUI/FirmwareDialog.cpp:787 +msgid "Firmware flasher" +msgstr "Firmware flasher" + +#: src/slic3r/GUI/FirmwareDialog.cpp:812 +msgid "Firmware image:" +msgstr "Immagine firmware:" + #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:116 msgid "First color" msgstr "Primo colore" @@ -4910,10 +4769,6 @@ msgstr "Flusso" msgid "Flow rate" msgstr "Flusso" -#: src/slic3r/GUI/PresetHints.cpp:188 -msgid "flow rate is maximized" -msgstr "il flusso viene massimizzato" - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:670 #, boost-format msgid "" @@ -4982,15 +4837,6 @@ msgstr "" msgid "For support enforcers only" msgstr "Solo per rinforzi supporto" -#. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4266 -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:142 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -5045,10 +4891,6 @@ msgstr "Trovate parole chiave riservate in" msgid "From" msgstr "Da" -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "from" -msgstr "da" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1949 msgid "From Object List You can't delete the last solid part from object." msgstr "" @@ -5067,10 +4909,6 @@ msgstr "Vista anteriore" msgid "Full fan speed at layer" msgstr "Massima velocità della ventola al layer" -#: src/slic3r/GUI/Tab.cpp:1412 -msgid "full profile name" -msgstr "nome completo profilo" - #: src/slic3r/GUI/MainFrame.cpp:1435 msgid "Fullscreen" msgstr "Schermo intero" @@ -5085,6 +4923,12 @@ msgstr "" "Sapevi che puoi usare PrusaSlicer in modalità schermo intero? Usa il tasto " "rapido F11." +#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 +#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 +#: src/libslic3r/PrintConfig.cpp:1286 +msgid "Fuzzy Skin" +msgstr "Superficie Crespa" + #: resources/data/hints.ini: [hint:Fuzzy skin] msgid "" "Fuzzy skin\n" @@ -5098,12 +4942,6 @@ msgstr "" "modificatori per applicare la superficie crespa solo ad una parte del tuo " "modello." -#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 -#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 -#: src/libslic3r/PrintConfig.cpp:1286 -msgid "Fuzzy Skin" -msgstr "Superficie Crespa" - #: src/slic3r/GUI/Tab.cpp:1500 msgid "Fuzzy skin (experimental)" msgstr "Superficie crespa (sperimentale)" @@ -5120,10 +4958,6 @@ msgstr "Spessore superficie crespa" msgid "Fuzzy skin type." msgstr "Tipo superficie crespa." -#: src/libslic3r/PrintConfig.cpp:1057 -msgid "g" -msgstr "g" - #: src/slic3r/GUI/MainFrame.cpp:1661 msgid "G-code" msgstr "G-code" @@ -5166,13 +5000,13 @@ msgstr "Miniature G-code" msgid "G-code viewer" msgstr "Visualizzatore G-code" -#: src/libslic3r/PrintConfig.cpp:1006 -msgid "g/cm³" -msgstr "g/cm³" +#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 +msgid "GNU Affero General Public License, version 3" +msgstr "GNU Affero General Public License, versione 3" -#: src/libslic3r/PrintConfig.cpp:3288 -msgid "g/ml" -msgstr "g/ml" +#: src/slic3r/GUI/Preferences.cpp:343 +msgid "GUI" +msgstr "GUI" #: src/slic3r/GUI/GUI_Factories.cpp:471 msgid "Gallery" @@ -5224,10 +5058,6 @@ msgstr "Genera supporti" msgid "Generate supports for the models" msgstr "Genera supporti per i modelli" -#: src/slic3r/GUI/Plater.cpp:4107 -msgid "generated warnings" -msgstr "ha generato avvisi" - #: src/libslic3r/Print.cpp:867 msgid "Generating G-code" msgstr "Generazione G-code" @@ -5272,10 +5102,6 @@ msgstr "Generazione buffer vertici" msgid "Generic" msgstr "Generico" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 -msgid "Gizmo cut" -msgstr "Gizmo Taglia" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:155 msgid "Gizmo FDM paint-on seam" msgstr "Gizmo Dipingi giunzione FDM" @@ -5284,14 +5110,6 @@ msgstr "Gizmo Dipingi giunzione FDM" msgid "Gizmo FDM paint-on supports" msgstr "Gizmo supporti paint-on FDM" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 -msgid "Gizmo move" -msgstr "Gizmo Sposta" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 -msgid "Gizmo move: Press to snap by 1mm" -msgstr "Gizmo Sposta: Premere per scatti di 1mm" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:156 msgid "Gizmo Multi Material painting" msgstr "Gizmo Pittura Multi Material" @@ -5300,6 +5118,26 @@ msgstr "Gizmo Pittura Multi Material" msgid "Gizmo Place face on bed" msgstr "Gizmo Posiziona faccia sul piano" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 +msgid "Gizmo SLA hollow" +msgstr "Gizmo SLA Svuota" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 +msgid "Gizmo SLA support points" +msgstr "Gizmo Punti supporto SLA" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 +msgid "Gizmo cut" +msgstr "Gizmo Taglia" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 +msgid "Gizmo move" +msgstr "Gizmo Sposta" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 +msgid "Gizmo move: Press to snap by 1mm" +msgstr "Gizmo Sposta: Premere per scatti di 1mm" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:149 msgid "Gizmo rotate" msgstr "Gizmo Ruota" @@ -5333,14 +5171,6 @@ msgstr "" "Gizmo ridimensiona: Ridimensiona la selezione per riempire il volume di " "stampa" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 -msgid "Gizmo SLA hollow" -msgstr "Gizmo SLA Svuota" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 -msgid "Gizmo SLA support points" -msgstr "Gizmo Punti supporto SLA" - #: src/slic3r/GUI/GLCanvas3D.cpp:2557 #: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:560 msgid "Gizmo-Move" @@ -5363,10 +5193,6 @@ msgstr "Gizmo-Ridimensiona" msgid "Gizmos" msgstr "Gizmo" -#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 -msgid "GNU Affero General Public License, version 3" -msgstr "GNU Affero General Public License, versione 3" - #: src/slic3r/GUI/ConfigWizard.cpp:1486 msgid "" "Good precision is required, so use a caliper and do multiple measurements " @@ -5387,14 +5213,36 @@ msgstr "Gruppo" msgid "Group manipulation" msgstr "Manipolazione gruppo" -#: src/slic3r/GUI/Preferences.cpp:343 -msgid "GUI" -msgstr "GUI" - #: src/libslic3r/PrintConfig.cpp:1154 msgid "Gyroid" msgstr "Giroide" +#: src/libslic3r/PrintConfig.cpp:352 +msgid "HTTP digest" +msgstr "HTTP digest" + +#: src/slic3r/Utils/Repetier.cpp:246 +#, boost-format +msgid "" +"HTTP status: %1%\n" +"Message body: \"%2%\"" +msgstr "" +"Stato HTTP: %1%\n" +"Corpo messaggio: \"%2%\"" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 +#: src/libslic3r/PrintConfig.cpp:307 +msgid "HTTPS CA File" +msgstr "File HTTPS CA" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" +"File HTTPS CA opzionale. È necessario solo se si intende usare un HTTPS con " +"certificato autofirmato." + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:39 msgid "Head diameter" msgstr "Diametro testa" @@ -5567,14 +5415,14 @@ msgstr "Cambio parametro svuotamento" msgid "Honeycomb" msgstr "Nido d'ape" -#: src/slic3r/GUI/Tab.cpp:1469 -msgid "Horizontal shells" -msgstr "Gusci orizzontali" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:254 msgid "Horizontal Slider" msgstr "Cursore di scorrimento orizzontale " +#: src/slic3r/GUI/Tab.cpp:1469 +msgid "Horizontal shells" +msgstr "Gusci orizzontali" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:219 #: src/slic3r/GUI/KBShortcutsDialog.cpp:223 msgid "Horizontal slider - Move active thumb Left" @@ -5638,40 +5486,14 @@ msgstr "Come applicare i limiti" msgid "How to apply the Machine Limits" msgstr "Come applicare i Limiti Macchina" -#: src/libslic3r/PrintConfig.cpp:352 -msgid "HTTP digest" -msgstr "HTTP digest" - -#: src/slic3r/Utils/Repetier.cpp:246 -#, boost-format -msgid "" -"HTTP status: %1%\n" -"Message body: \"%2%\"" -msgstr "" -"Stato HTTP: %1%\n" -"Corpo messaggio: \"%2%\"" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 -#: src/libslic3r/PrintConfig.cpp:307 -msgid "HTTPS CA File" -msgstr "File HTTPS CA" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." -msgstr "" -"File HTTPS CA opzionale. È necessario solo se si intende usare un HTTPS con " -"certificato autofirmato." +#: src/slic3r/GUI/PrintHostDialogs.cpp:247 +msgid "ID" +msgstr "ID" #: src/slic3r/GUI/Preferences.cpp:694 msgid "Icon size in a respect to the default size" msgstr "Dimensioni icona rispetto alla dimensione predefinita" -#: src/slic3r/GUI/PrintHostDialogs.cpp:247 -msgid "ID" -msgstr "ID" - #: src/libslic3r/PrintConfig.cpp:2511 msgid "" "If checked, supports will be generated automatically based on the overhang " @@ -5708,6 +5530,44 @@ msgstr "" "temporanea separata. Quando è disponibile una nuova versione del preset, " "questa viene proposta all'avvio." +#: src/slic3r/GUI/Preferences.cpp:289 +msgid "If enabled, PrusaSlicer will be open at the position it was closed" +msgstr "" +"Se abilitato, PrusaSlicer sarà aperto nella posizione in cui è stato chiuso" + +#: src/slic3r/GUI/Preferences.cpp:384 +msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." +msgstr "" +"Se abilitato, PrusaSlicer non aprirà i collegamenti ipertestuali nel tuo " +"browser." + +#: src/slic3r/GUI/Preferences.cpp:410 +msgid "" +"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " +"will be used." +msgstr "" +"Se abilitato, le schede delle impostazioni saranno posizionate come voci di " +"menu. Se disabilitato, verrà usata la vecchia UI." + +#: src/slic3r/GUI/Preferences.cpp:177 +msgid "" +"If enabled, Slic3r 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 "" +"Se abilitato, Slic3r scarica gli aggiornamenti dei preset inclusi in " +"background. Questi aggiornamenti sono scaricati in una posizione temporanea. " +"Quando una nuova versione dei preset diventa disponibile, viene offerta " +"all'avvio." + +#: src/slic3r/GUI/Preferences.cpp:498 +msgid "" +"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." +msgstr "" +"Se abilitato, l'UI userà i colori della modalità Dark. Se disabilitato, " +"verrà usata la vecchia UI." + #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:174 msgid "If enabled, a repetition of the next random color will be allowed." msgstr "" @@ -5721,6 +5581,14 @@ msgstr "" "Se attivata, tutti gli estrusori di stampa verranno preparati nel bordo " "frontale del piano di stampa all'inizio della stampa." +#: src/slic3r/GUI/Preferences.cpp:150 +msgid "" +"If enabled, allows the Reload from disk command to automatically find and " +"load the files when invoked." +msgstr "" +"Se attivo, permette il comando Ricarica da disco per trovare e caricare " +"automaticamente i file quando richiesto." + #: src/slic3r/GUI/ConfigWizard.cpp:1250 msgid "" "If enabled, allows the Reload from disk command to automatically find and " @@ -5733,14 +5601,6 @@ msgstr "" "Se non attivo, il comando Ricarica da disco chiederà di selezionare ciascun " "file tramite finestra di apertura file." -#: src/slic3r/GUI/Preferences.cpp:150 -msgid "" -"If enabled, allows the Reload from disk command to automatically find and " -"load the files when invoked." -msgstr "" -"Se attivo, permette il comando Ricarica da disco per trovare e caricare " -"automaticamente i file quando richiesto." - #: src/slic3r/GUI/Preferences.cpp:509 msgid "" "If enabled, application will use the standard Windows system menu,\n" @@ -5772,17 +5632,6 @@ msgstr "" "modifiche fatte usando il cursore sequenziale, nell'anteprima, si applicano " "a tutto il gcode." -#: src/slic3r/GUI/Preferences.cpp:289 -msgid "If enabled, PrusaSlicer will be open at the position it was closed" -msgstr "" -"Se abilitato, PrusaSlicer sarà aperto nella posizione in cui è stato chiuso" - -#: src/slic3r/GUI/Preferences.cpp:384 -msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." -msgstr "" -"Se abilitato, PrusaSlicer non aprirà i collegamenti ipertestuali nel tuo " -"browser." - #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:166 msgid "If enabled, random sequence of the selected extruders will be used." msgstr "" @@ -5797,6 +5646,14 @@ msgstr "Se abilitato, renderizza l'oggetto utilizzando la mappa ambientale." msgid "If enabled, reverses the direction of zoom with mouse wheel" msgstr "Se abilitato, inverte la direzione dello zoom con la rotella del mouse" +#: src/slic3r/GUI/Preferences.cpp:260 +msgid "" +"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." +"gcode files." +msgstr "" +"Se abilitato, imposta il visualizzatore G-code di PrusaSlicer come " +"applicazione predefinita per aprire i file .gcode." + #: src/slic3r/GUI/Preferences.cpp:159 msgid "If enabled, sets PrusaSlicer as default application to open .3mf files." msgstr "" @@ -5809,34 +5666,6 @@ msgstr "" "Se abilitato, imposta PrusaSlicer come applicazione predefinita per aprire i " "file .stl." -#: src/slic3r/GUI/Preferences.cpp:260 -msgid "" -"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." -"gcode files." -msgstr "" -"Se abilitato, imposta il visualizzatore G-code di PrusaSlicer come " -"applicazione predefinita per aprire i file .gcode." - -#: src/slic3r/GUI/Preferences.cpp:410 -msgid "" -"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " -"will be used." -msgstr "" -"Se abilitato, le schede delle impostazioni saranno posizionate come voci di " -"menu. Se disabilitato, verrà usata la vecchia UI." - -#: src/slic3r/GUI/Preferences.cpp:177 -msgid "" -"If enabled, Slic3r 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 "" -"Se abilitato, Slic3r scarica gli aggiornamenti dei preset inclusi in " -"background. Questi aggiornamenti sono scaricati in una posizione temporanea. " -"Quando una nuova versione dei preset diventa disponibile, viene offerta " -"all'avvio." - #: src/slic3r/GUI/Preferences.cpp:270 msgid "" "If enabled, the 3D scene will be rendered in Retina resolution. If you are " @@ -5893,13 +5722,6 @@ msgstr "" "il basso per stampare la torre di pulitura. L'utente è responsabile " "nell'accertarsi che non avvengano collisioni durante la stampa." -#: src/slic3r/GUI/Preferences.cpp:498 -msgid "" -"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." -msgstr "" -"Se abilitato, l'UI userà i colori della modalità Dark. Se disabilitato, " -"verrà usata la vecchia UI." - #: src/slic3r/GUI/Preferences.cpp:328 msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" @@ -6008,14 +5830,6 @@ msgstr "" "secondi, la velocità dei movimenti di stampa sarà ridotta per estendere la " "durata di questo valore." -#: src/libslic3r/PrintConfig.cpp:852 -msgid "" -"If this is enabled, fan will never be disabled and will be kept running at " -"least at its minimum speed. Useful for PLA, harmful for ABS." -msgstr "" -"Se questo è attivo, la ventola non verrà mai disattiva e verrà mantenuta " -"attiva almeno alla velocità minima. Utile per il PLA, dannosa per l'ABS." - #: src/slic3r/GUI/Preferences.cpp:131 msgid "" "If this is enabled, Slic3r will auto-center objects around the print bed " @@ -6040,6 +5854,14 @@ msgstr "" "Se attivo, Slic3r suggerirà l'ultima cartella di destinazione invece della " "cartella contenente il file di ricezione." +#: src/libslic3r/PrintConfig.cpp:852 +msgid "" +"If this is enabled, fan will never be disabled and will be kept running at " +"least at its minimum speed. Useful for PLA, harmful for ABS." +msgstr "" +"Se questo è attivo, la ventola non verrà mai disattiva e verrà mantenuta " +"attiva almeno alla velocità minima. Utile per il PLA, dannosa per l'ABS." + #: src/slic3r/GUI/Preferences.cpp:214 msgid "" "If this is enabled, when starting PrusaSlicer and another instance of the " @@ -6177,26 +5999,6 @@ msgstr "Importa Configurazione da &progetto" msgid "Import Config from ini/amf/3mf/gcode" msgstr "Importa Config da ini/amf/3mf/gcode" -#: src/slic3r/GUI/Plater.cpp:5265 -msgid "Import config only" -msgstr "Importa solo configurazione" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 -msgid "Import file" -msgstr "Importa file" - -#: src/slic3r/GUI/Plater.cpp:5264 -msgid "Import geometry only" -msgstr "Importa solo la geometria" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 -msgid "Import model and profile" -msgstr "Importa modello e profilo" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 -msgid "Import model only" -msgstr "Importa solo il modello" - #: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 msgid "Import Object" msgstr "Importa Oggetto" @@ -6205,14 +6007,6 @@ msgstr "Importa Oggetto" msgid "Import Objects" msgstr "Importa Oggetti" -#: src/slic3r/Utils/FixModelByWin10.cpp:395 -msgid "Import of the repaired 3mf file failed" -msgstr "Importazione del file 3mf riparato non riuscita" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 -msgid "Import profile only" -msgstr "Solo profilo di importazione" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Import SL1 / SL1S Archive" msgstr "Importa archivio SL1 / SL1S" @@ -6233,6 +6027,38 @@ msgstr "Importa STL/OBJ/AM&F/3MF" msgid "Import STL/OBJ/AMF/3MF without config, keep plater" msgstr "Importa STL/OBJ/AMF/3MF senza configurazione, mantieni piano" +#: src/slic3r/GUI/Plater.cpp:5265 +msgid "Import config only" +msgstr "Importa solo configurazione" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 +msgid "Import file" +msgstr "Importa file" + +#: src/slic3r/GUI/Plater.cpp:5264 +msgid "Import geometry only" +msgstr "Importa solo la geometria" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 +msgid "Import model and profile" +msgstr "Importa modello e profilo" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 +msgid "Import model only" +msgstr "Importa solo il modello" + +#: src/slic3r/Utils/FixModelByWin10.cpp:395 +msgid "Import of the repaired 3mf file failed" +msgstr "Importazione del file 3mf riparato non riuscita" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 +msgid "Import profile only" +msgstr "Solo profilo di importazione" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 +msgid "Importing SLA archive" +msgstr "Importazione archivio SLA" + #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:164 msgid "Importing canceled." msgstr "Importazione annullata." @@ -6241,18 +6067,6 @@ msgstr "Importazione annullata." msgid "Importing done." msgstr "Importazione completata." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 -msgid "Importing SLA archive" -msgstr "Importazione archivio SLA" - -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -msgid "in" -msgstr "in" - #: src/libslic3r/GCode.cpp:764 msgid "In the custom G-code were found reserved keywords:" msgstr "Nel G-code personalizzato sono state trovate parole chiave riservate:" @@ -6287,41 +6101,6 @@ msgstr "Aumenta Istanze" msgid "Increase/decrease edit area" msgstr "Aumenta/diminuisci l'area di modifica" -#. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4259 -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 che è stata modificata qualche impostazione e non è uguale ai valori " -"di sistema (o predefiniti) del corrente gruppo di opzioni.\n" -"Clicca l'icona LUCCHETTO APERTO per reimpostare tutte le impostazioni del " -"corrente gruppo di opzioni ai valori di sistema (o predefiniti)." - -#. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4255 -msgid "" -"indicates that the settings are the same as the system (or default) values " -"for the current option group" -msgstr "" -"indica che le impostazioni sono uguali ai valori di sistema (o predefiniti) " -"per l'attuale gruppo di opzioni" - -#. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4271 -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 che le impostazioni sono state modificate e non corrispondono " -"all'ultimo preset salvato per l'attuale gruppo opzioni.\n" -"Clicca l'icona FRECCIA INDIETRO per reimpostare all'ultimo preset salvato " -"tutte le impostazioni per il seguente gruppo di opzioni." - #: src/slic3r/GUI/ConfigManipulation.cpp:199 #: src/slic3r/GUI/GUI_Factories.cpp:55 src/slic3r/GUI/GUI_Factories.cpp:128 #: src/slic3r/GUI/Plater.cpp:460 src/slic3r/GUI/Tab.cpp:1506 @@ -6335,10 +6114,6 @@ msgstr "" msgid "Infill" msgstr "Riempimento" -#: src/slic3r/GUI/PresetHints.cpp:174 -msgid "infill" -msgstr "riempimento" - #: src/libslic3r/PrintConfig.cpp:1467 msgid "Infill before perimeters" msgstr "Riempimento prima dei perimetri" @@ -6385,6 +6160,11 @@ msgstr "Altezza layer iniziale" msgid "Inner brim only" msgstr "Solo Brim interno" +#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 +#: src/slic3r/GUI/Field.cpp:1575 +msgid "Input value is out of range" +msgstr "Valore input fuori portata" + #: src/slic3r/GUI/Field.cpp:266 #, c-format, boost-format msgid "" @@ -6394,11 +6174,6 @@ msgstr "" "Il valore di input è fuori portata\n" "Sei sicuro che %s sia un valore corretto e di voler continuare?" -#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 -#: src/slic3r/GUI/Field.cpp:1575 -msgid "Input value is out of range" -msgstr "Valore input fuori portata" - #: resources/data/hints.ini: [hint:Insert Custom G-code] msgid "" "Insert Custom G-code\n" @@ -6472,10 +6247,6 @@ msgstr "Spaziatura trama interfaccia" msgid "Interface shells" msgstr "Gusci interfaccia" -#: src/libslic3r/miniz_extension.cpp:143 -msgid "internal error" -msgstr "errore interno" - #: src/slic3r/GUI/GUI_App.cpp:713 #, boost-format msgid "Internal error: %1%" @@ -6486,6 +6257,10 @@ msgstr "Errore interno: %1%" msgid "Internal infill" msgstr "Riempimento interno" +#: src/slic3r/GUI/ConfigManipulation.cpp:329 +msgid "Invalid Head penetration" +msgstr "Penetrazione della testa non valida" + #: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 msgid "Invalid data" msgstr "Dati non validi" @@ -6495,18 +6270,6 @@ msgstr "Dati non validi" msgid "Invalid file format." msgstr "Formato file non valido." -#: src/libslic3r/miniz_extension.cpp:139 -msgid "invalid filename" -msgstr "nome file non valido" - -#: src/slic3r/GUI/ConfigManipulation.cpp:329 -msgid "Invalid Head penetration" -msgstr "Penetrazione della testa non valida" - -#: src/libslic3r/miniz_extension.cpp:107 -msgid "invalid header or archive is corrupted" -msgstr "titolo non valido o archivio corrotto" - #: src/slic3r/GUI/Field.cpp:397 #, boost-format msgid "" @@ -6522,14 +6285,19 @@ msgstr "" msgid "Invalid numeric input." msgstr "Input numerico non valido." -#: src/libslic3r/miniz_extension.cpp:137 -msgid "invalid parameter" -msgstr "parametro non valido" - #: src/slic3r/GUI/ConfigManipulation.cpp:342 msgid "Invalid pinhead diameter" msgstr "Diametro apice non valido" +#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 +#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 +#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 +#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 +#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 +#: src/libslic3r/PrintConfig.cpp:1577 +msgid "Ironing" +msgstr "Stiratura" + #: resources/data/hints.ini: [hint:Ironing] msgid "" "Ironing\n" @@ -6545,32 +6313,14 @@ msgstr "" "sollevata. Leggi di più nella documentazione. (Richiede la modalità Avanzata " "o Esperto)." -#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 -#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 -#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 -#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 -#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 -#: src/libslic3r/PrintConfig.cpp:1577 -msgid "Ironing" -msgstr "Stiratura" - #: src/libslic3r/PrintConfig.cpp:1542 src/libslic3r/PrintConfig.cpp:1544 msgid "Ironing Type" msgstr "Tipo di stiratura" -#: src/slic3r/GUI/GUI_App.cpp:266 -msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." -msgstr "è basato su Slic3r di Alessandro Ranellucci e la comunità RepRap." - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:588 msgid "Is it safe?" msgstr "È sicuro?" -#. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 -msgid "is licensed under the" -msgstr "è concesso in licenza ai sensi" - #: src/slic3r/GUI/MainFrame.cpp:1114 msgid "Iso" msgstr "Iso" @@ -6627,15 +6377,6 @@ msgstr "Jitter" msgid "Jump to height" msgstr "Salta all'altezza" -#: src/slic3r/GUI/DoubleSlider.cpp:1391 -#, c-format, boost-format -msgid "" -"Jump to height %s\n" -"or Set ruler mode" -msgstr "" -"Vai all'altezza %s \n" -"o Imposta la modalità righello" - #: src/slic3r/GUI/DoubleSlider.cpp:1388 #, c-format, boost-format msgid "" @@ -6647,6 +6388,15 @@ msgstr "" "Imposta la modalità del righello\n" "o Imposta la sequenza dell'estrusore per l'intera stampa" +#: src/slic3r/GUI/DoubleSlider.cpp:1391 +#, c-format, boost-format +msgid "" +"Jump to height %s\n" +"or Set ruler mode" +msgstr "" +"Vai all'altezza %s \n" +"o Imposta la modalità righello" + #: src/slic3r/GUI/DoubleSlider.cpp:1385 src/slic3r/GUI/DoubleSlider.cpp:2254 msgid "Jump to move" msgstr "Salta per spostare" @@ -6689,9 +6439,25 @@ msgstr "Scorciatoie Tastiera" msgid "Keyboard shortcuts" msgstr "Scorciatoie tastiera" -#: src/libslic3r/PrintConfig.cpp:3281 -msgid "kg" -msgstr "kg" +#: src/slic3r/GUI/Tab.cpp:4253 +msgid "LOCKED LOCK" +msgstr "LUCCHETTO CHIUSO" + +#: src/slic3r/GUI/Tab.cpp:4281 +msgid "" +"LOCKED LOCK icon indicates that the settings are the same as the system (or " +"default) values for the current option group" +msgstr "" +"L'icona LUCCHETTO CHIUSO indica che le impostazioni corrispondono ai valori " +"di sistema (o predefiniti) per il seguente gruppo di opzioni" + +#: src/slic3r/GUI/Tab.cpp:4297 +msgid "" +"LOCKED LOCK icon indicates that the value is the same as the system (or " +"default) value." +msgstr "" +"L'icona LUCCHETTO CHIUSO indica che il valore è uguale a quello di sistema " +"(o predefinito)." #: src/libslic3r/PrintConfig.cpp:1353 msgid "Label objects" @@ -6745,23 +6511,11 @@ msgstr "Limiti altezza layer" msgid "Layer range Settings to modify" msgstr "Impostazioni da modificare in Intervallo Layer" -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 -#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 -#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 -#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 -#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 -msgid "layers" -msgstr "layer" - #: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4500 #: src/slic3r/GUI/Tab.cpp:4591 msgid "Layers" msgstr "Layer" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 -msgid "Layers and perimeters" -msgstr "Layer e perimetri" - #: src/slic3r/GUI/GUI_Factories.cpp:54 src/slic3r/GUI/GUI_Factories.cpp:127 #: src/libslic3r/PrintConfig.cpp:264 src/libslic3r/PrintConfig.cpp:381 #: src/libslic3r/PrintConfig.cpp:424 src/libslic3r/PrintConfig.cpp:433 @@ -6775,15 +6529,9 @@ msgstr "Layer e perimetri" msgid "Layers and Perimeters" msgstr "Layer e Perimetri" -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Bottom" -msgstr "Inferiore" - -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Top" -msgstr "Superiore" +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 +msgid "Layers and perimeters" +msgstr "Layer e perimetri" #: src/slic3r/GUI/Preferences.cpp:763 msgid "Layout Options" @@ -6798,6 +6546,14 @@ msgstr "Lascia \"%1%\" abilitato" msgid "Left" msgstr "Sinistra" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +msgid "Left Preset Value" +msgstr "Valore di preset sinistro" + +#: src/slic3r/GUI/MainFrame.cpp:1127 +msgid "Left View" +msgstr "Vista sinistra" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 @@ -6814,14 +6570,6 @@ msgstr "Tasto sinistro mouse" msgid "Left mouse button:" msgstr "Tasto sinistro mouse:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 -msgid "Left Preset Value" -msgstr "Valore di preset sinistro" - -#: src/slic3r/GUI/MainFrame.cpp:1127 -msgid "Left View" -msgstr "Vista sinistra" - #: src/slic3r/GUI/GUI_Preview.cpp:1060 msgid "Legend/Estimated printing time" msgstr "Legenda/Stima del tempo di stampa" @@ -6849,6 +6597,10 @@ msgstr "" "Gli accordi di licenza di tutti i programmi seguenti (librerie) fanno parte " "del contratto di licenza dell'applicazione" +#: src/libslic3r/PrintConfig.cpp:2153 +msgid "Lift Z" +msgstr "Solleva Z" + #: src/libslic3r/PrintConfig.cpp:4358 msgid "" "Lift the object above the bed when it is partially below. Enabled by " @@ -6857,10 +6609,6 @@ msgstr "" "Solleva l'oggetto sopra il piano quando è parzialmente sotto. Abilitato di " "default, usa --no-ensure-on-bed per disabilitare." -#: src/libslic3r/PrintConfig.cpp:2153 -msgid "Lift Z" -msgstr "Solleva Z" - #: src/libslic3r/PrintConfig.cpp:1161 msgid "Lightning" msgstr "Lightning" @@ -6877,18 +6625,42 @@ msgstr "Linea" msgid "Load" msgstr "Carica" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 +msgid "Load Config from ini/amf/3mf/gcode and merge" +msgstr "Carica Config da ini/amf/3mf/gcode e unisci" + +#: src/slic3r/GUI/Plater.cpp:5408 +msgid "Load File" +msgstr "Carica file" + +#: src/slic3r/GUI/Plater.cpp:5413 +msgid "Load Files" +msgstr "Carica file" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Modifier" +msgstr "Caricare modificatore" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Part" +msgstr "Carica Parte" + +#: src/slic3r/GUI/Plater.cpp:5100 +msgid "Load Project" +msgstr "Carica Progetto" + #: src/slic3r/GUI/MainFrame.cpp:1201 msgid "Load a model" msgstr "Carica modello" -#: src/slic3r/GUI/MainFrame.cpp:1205 -msgid "Load an model saved with imperial units" -msgstr "Carica un modello salvato con unità imperiali" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Load an SL1 / Sl1S archive" msgstr "Carica un archivio SL1 / SL1S" +#: src/slic3r/GUI/MainFrame.cpp:1205 +msgid "Load an model saved with imperial units" +msgstr "Carica un modello salvato con unità imperiali" + #: src/libslic3r/PrintConfig.cpp:4454 msgid "" "Load and store settings at the given directory. This is useful for " @@ -6916,10 +6688,6 @@ msgstr "" "stesso modo, puoi usare File-Importa-Importa archivio SL1 / SL1S, che ti " "permette anche di ricostruire modelli 3D dai dati voxel." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 -msgid "Load Config from ini/amf/3mf/gcode and merge" -msgstr "Carica Config da ini/amf/3mf/gcode e unisci" - #: src/slic3r/GUI/MainFrame.cpp:1217 msgid "Load configuration from project file" msgstr "Carica configurazione dal file di progetto" @@ -6936,30 +6704,10 @@ msgstr "" msgid "Load exported configuration file" msgstr "Carica un file di configurazione esportato" -#: src/slic3r/GUI/Plater.cpp:5408 -msgid "Load File" -msgstr "Carica file" - -#: src/slic3r/GUI/Plater.cpp:5413 -msgid "Load Files" -msgstr "Carica file" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Modifier" -msgstr "Caricare modificatore" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Part" -msgstr "Carica Parte" - #: src/slic3r/GUI/MainFrame.cpp:1221 msgid "Load presets from a bundle" msgstr "Carica i preset da un gruppo" -#: src/slic3r/GUI/Plater.cpp:5100 -msgid "Load Project" -msgstr "Carica Progetto" - #: src/slic3r/GUI/BedShapeDialog.cpp:203 msgid "Load shape from STL..." msgstr "Carica forma da STL..." @@ -6968,10 +6716,6 @@ msgstr "Carica forma da STL..." msgid "Load..." msgstr "Caricamento..." -#: src/slic3r/GUI/WipeTowerDialog.cpp:309 -msgid "loaded" -msgstr "caricato" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1509 src/slic3r/GUI/Plater.cpp:2379 msgid "Loading" msgstr "Caricamento" @@ -7037,26 +6781,6 @@ msgstr "Coordinate locali" msgid "Lock supports under new islands" msgstr "Fissa i supporti sotto le nuove isole" -#: src/slic3r/GUI/Tab.cpp:4253 -msgid "LOCKED LOCK" -msgstr "LUCCHETTO CHIUSO" - -#: src/slic3r/GUI/Tab.cpp:4281 -msgid "" -"LOCKED LOCK icon indicates that the settings are the same as the system (or " -"default) values for the current option group" -msgstr "" -"L'icona LUCCHETTO CHIUSO indica che le impostazioni corrispondono ai valori " -"di sistema (o predefiniti) per il seguente gruppo di opzioni" - -#: src/slic3r/GUI/Tab.cpp:4297 -msgid "" -"LOCKED LOCK icon indicates that the value is the same as the system (or " -"default) value." -msgstr "" -"L'icona LUCCHETTO CHIUSO indica che il valore è uguale a quello di sistema " -"(o predefinito)." - #: src/libslic3r/PrintConfig.cpp:4457 msgid "Logging level" msgstr "Livello di logging" @@ -7090,13 +6814,6 @@ msgstr "" "I limiti della macchina non sono impostati, quindi la stima del tempo di " "stampa potrebbe non essere accurata." -#: src/slic3r/GUI/Tab.cpp:4224 -msgid "" -"Machine limits will be emitted to G-code and used to estimate print time." -msgstr "" -"I limiti della macchina verranno emessi in G-code e utilizzati per stimare " -"il tempo di stampa." - #: src/slic3r/GUI/Tab.cpp:4227 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " @@ -7108,6 +6825,13 @@ msgstr "" "accurato in quanto la stampante potrebbe applicare un diverso set di limiti " "della macchina." +#: src/slic3r/GUI/Tab.cpp:4224 +msgid "" +"Machine limits will be emitted to G-code and used to estimate print time." +msgstr "" +"I limiti della macchina verranno emessi in G-code e utilizzati per stimare " +"il tempo di stampa." + #: src/libslic3r/GCode.cpp:576 msgid "" "Make sure the object is printable. This is usually caused by negligibly " @@ -7139,10 +6863,6 @@ msgstr "Scheda Impostazioni Mate&riale" msgid "Material" msgstr "Materiale" -#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 -msgid "Material printing profile" -msgstr "Profilo del materiale di stampa" - #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 #: src/slic3r/GUI/Tab.hpp:522 @@ -7153,6 +6873,10 @@ msgstr "Impostazioni Materiali" msgid "Material Settings Tab" msgstr "Scheda Impostazioni Materiali" +#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 +msgid "Material printing profile" +msgstr "Profilo del materiale di stampa" + #: src/libslic3r/PrintConfig.cpp:1749 src/libslic3r/PrintConfig.cpp:1758 msgid "Max" msgstr "Massimo" @@ -7181,10 +6905,6 @@ msgstr "Altezza massima di stampa" msgid "Max print speed" msgstr "Massima velocità di stampa" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 -msgid "max PrusaSlicer version" -msgstr "versione PrusaSlicer massima" - #: src/libslic3r/PrintConfig.cpp:1800 msgid "Max volumetric slope negative" msgstr "Massima pendenza volumetrica negativa" @@ -7209,6 +6929,18 @@ msgstr "Distanza massima tra supporti in sezioni a riempimento sparso." msgid "Maximum acceleration E" msgstr "Accelerazione massima E" +#: src/libslic3r/PrintConfig.cpp:1661 +msgid "Maximum acceleration X" +msgstr "Accelerazione massima X" + +#: src/libslic3r/PrintConfig.cpp:1662 +msgid "Maximum acceleration Y" +msgstr "Accelerazione massima Y" + +#: src/libslic3r/PrintConfig.cpp:1663 +msgid "Maximum acceleration Z" +msgstr "Accelerazione massima Z" + #: src/libslic3r/PrintConfig.cpp:1740 msgid "Maximum acceleration for travel moves" msgstr "Accelerazione massima per gli spostamenti" @@ -7257,18 +6989,6 @@ msgstr "Accelerazione massima durante la retrazione" msgid "Maximum acceleration when retracting (M204 R)" msgstr "Accelerazione massima durante la retrazione (M204 R)" -#: src/libslic3r/PrintConfig.cpp:1661 -msgid "Maximum acceleration X" -msgstr "Accelerazione massima X" - -#: src/libslic3r/PrintConfig.cpp:1662 -msgid "Maximum acceleration Y" -msgstr "Accelerazione massima Y" - -#: src/libslic3r/PrintConfig.cpp:1663 -msgid "Maximum acceleration Z" -msgstr "Accelerazione massima Z" - #: src/slic3r/GUI/Tab.cpp:2655 msgid "Maximum accelerations" msgstr "Accelerazioni massime" @@ -7300,6 +7020,18 @@ msgstr "Tempo massimo di esposizione" msgid "Maximum feedrate E" msgstr "Avanzamento massimo E" +#: src/libslic3r/PrintConfig.cpp:1644 +msgid "Maximum feedrate X" +msgstr "Avanzamento massimo X" + +#: src/libslic3r/PrintConfig.cpp:1645 +msgid "Maximum feedrate Y" +msgstr "Avanzamento massimo Y" + +#: src/libslic3r/PrintConfig.cpp:1646 +msgid "Maximum feedrate Z" +msgstr "Avanzamento massimo Z" + #: src/libslic3r/PrintConfig.cpp:1653 msgid "Maximum feedrate of the E axis" msgstr "Avanzamento massimo dell'asse E" @@ -7316,18 +7048,6 @@ msgstr "Avanzamento massimo dell'asse Y" msgid "Maximum feedrate of the Z axis" msgstr "Avanzamento massimo dell'asse Z" -#: src/libslic3r/PrintConfig.cpp:1644 -msgid "Maximum feedrate X" -msgstr "Avanzamento massimo X" - -#: src/libslic3r/PrintConfig.cpp:1645 -msgid "Maximum feedrate Y" -msgstr "Avanzamento massimo Y" - -#: src/libslic3r/PrintConfig.cpp:1646 -msgid "Maximum feedrate Z" -msgstr "Avanzamento massimo Z" - #: src/slic3r/GUI/Tab.cpp:2650 msgid "Maximum feedrates" msgstr "Avanzamenti massimi" @@ -7340,6 +7060,18 @@ msgstr "Tempo massimo di esposizione iniziale" msgid "Maximum jerk E" msgstr "Jerk massimo E" +#: src/libslic3r/PrintConfig.cpp:1678 +msgid "Maximum jerk X" +msgstr "Jerk massimo X" + +#: src/libslic3r/PrintConfig.cpp:1679 +msgid "Maximum jerk Y" +msgstr "Jerk massimo Y" + +#: src/libslic3r/PrintConfig.cpp:1680 +msgid "Maximum jerk Z" +msgstr "Jerk massimo Z" + #: src/libslic3r/PrintConfig.cpp:1687 msgid "Maximum jerk of the E axis" msgstr "Jerk massimo dell'asse E" @@ -7356,18 +7088,6 @@ msgstr "Jerk massimo dell'asse Y" msgid "Maximum jerk of the Z axis" msgstr "Jerk massimo dell'asse Z" -#: src/libslic3r/PrintConfig.cpp:1678 -msgid "Maximum jerk X" -msgstr "Jerk massimo X" - -#: src/libslic3r/PrintConfig.cpp:1679 -msgid "Maximum jerk Y" -msgstr "Jerk massimo Y" - -#: src/libslic3r/PrintConfig.cpp:1680 -msgid "Maximum jerk Z" -msgstr "Jerk massimo Z" - #: src/libslic3r/PrintConfig.cpp:1423 msgid "Maximum length of the infill anchor" msgstr "Lunghezza massima dell'ancoraggio del riempimento" @@ -7461,10 +7181,6 @@ msgstr "Minimo" msgid "Min print speed" msgstr "Velocità minima di stampa" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 -msgid "min PrusaSlicer version" -msgstr "versione PrusaSlicer minima" - #: src/libslic3r/PrintConfig.cpp:3597 msgid "Minimal distance of the support points" msgstr "Distanza minima dei punti di supporto" @@ -7527,6 +7243,10 @@ msgstr "Avanzamento minimo" msgid "Minimum initial exposure time" msgstr "Tempo minimo di esposizione iniziale" +#: src/slic3r/GUI/Tab.cpp:1475 +msgid "Minimum shell thickness" +msgstr "Spessore minimo guscio" + #: resources/data/hints.ini: [hint:Minimum shell thickness] msgid "" "Minimum shell thickness\n" @@ -7540,10 +7260,6 @@ msgstr "" "particolarmente utile quando si usa la funzione di altezza variabile dei " "layer." -#: src/slic3r/GUI/Tab.cpp:1475 -msgid "Minimum shell thickness" -msgstr "Spessore minimo guscio" - #: src/libslic3r/PrintConfig.cpp:2374 src/libslic3r/PrintConfig.cpp:2375 msgid "Minimum thickness of a top / bottom shell" msgstr "Spessore minimo guscio superiore / inferiore" @@ -7580,6 +7296,10 @@ msgstr "" "Larghezza minima della funzione da mantenere durante la compensazione della " "zampa d'elefante." +#: src/slic3r/GUI/GUI_Factories.cpp:885 +msgid "Mirror" +msgstr "Specchia" + #: resources/data/hints.ini: [hint:Mirror] msgid "" "Mirror\n" @@ -7591,18 +7311,14 @@ msgstr "" "invertita? Fai clic con il tasto destro del mouse sul modello, seleziona " "Specchio e scegli l'asse dello specchio." -#: src/slic3r/GUI/GUI_Factories.cpp:885 -msgid "Mirror" -msgstr "Specchia" +#: src/slic3r/GUI/GLCanvas3D.cpp:1684 +msgid "Mirror Object" +msgstr "Specchia Oggetto" #: src/libslic3r/PrintConfig.cpp:3131 msgid "Mirror horizontally" msgstr "Specchia orizzontalmente" -#: src/slic3r/GUI/GLCanvas3D.cpp:1684 -msgid "Mirror Object" -msgstr "Specchia Oggetto" - #: src/slic3r/GUI/GUI_Factories.cpp:885 msgid "Mirror the selected object" msgstr "Specchia l'oggetto selezionato" @@ -7633,133 +7349,10 @@ msgstr "Tipo di Host di stampa non corrispondente: %s" msgid "Mixed" msgstr "Mischiate" -#: src/libslic3r/PrintConfig.cpp:3274 -msgid "ml" -msgstr "ml" - -#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 -#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 -#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 -#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 -#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 -#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 -#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 -#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 -#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 -#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 -#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 -#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 -#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 -#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 -#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 -#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 -#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 -#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 -#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 -#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 -#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 -#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 -#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 -#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 -#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 -#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 -#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 -#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 -#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 -#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 -#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 -#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 -#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 -#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 -#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 -#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 -#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 -#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 -#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 -#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 -#: src/libslic3r/PrintConfig.cpp:3767 -msgid "mm" -msgstr "mm" - -#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 -#: src/libslic3r/PrintConfig.cpp:2148 -msgid "mm (zero to disable)" -msgstr "mm (imposta a zero per disabilitare)" - -#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 -#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 -#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 -#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 -#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 -#: src/libslic3r/PrintConfig.cpp:2845 -msgid "mm or %" -msgstr "mm o %" - -#: src/libslic3r/PrintConfig.cpp:385 -msgid "mm or % (zero to disable)" -msgstr "mm o % (zero per disattivare)" - -#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 -#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 -#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 -#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 -#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 -#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 -#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 -#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 -#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 -#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 -#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 -msgid "mm/s" -msgstr "mm/s" - -#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 -#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 -#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 -#: src/libslic3r/PrintConfig.cpp:2859 -msgid "mm/s or %" -msgstr "mm/s o %" - -#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 -#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 -#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 -#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 -#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 -msgid "mm/s²" -msgstr "mm/s²" - -#: src/libslic3r/PrintConfig.cpp:2316 -msgid "mm²" -msgstr "mm²" - -#: src/libslic3r/PrintConfig.cpp:957 -msgid "mm³" -msgstr "mm³" - -#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 -#: src/libslic3r/PrintConfig.cpp:1782 -msgid "mm³/s" -msgstr "mm³/s" - -#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 -msgid "mm³/s²" -msgstr "mm³/s²" - #: src/slic3r/GUI/GUI_App.cpp:2245 msgid "Mode" msgstr "&Modalità" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "model" -msgstr "modello" - #: src/slic3r/GUI/BedShapeDialog.cpp:344 msgid "Model" msgstr "Modello" @@ -7772,19 +7365,10 @@ msgstr "Riparazione modello annullata" msgid "Model repair finished" msgstr "Riparazione modello terminata" -#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 -msgctxt "Mode" -msgid "Advanced" -msgstr "Avanzata" - #: src/slic3r/GUI/Tab.cpp:1319 msgid "Modifications to the current profile will be saved." msgstr "Verranno salvate le modifiche al profilo attuale." -#: src/slic3r/GUI/GUI_App.cpp:2159 -msgid "modified" -msgstr "modificato" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Modifier" msgstr "Modificatore" @@ -7793,14 +7377,6 @@ msgstr "Modificatore" msgid "Modifiers" msgstr "Modificatori" -#: src/libslic3r/PrintConfig.cpp:3295 -msgid "money/bottle" -msgstr "soldi/bottiglia" - -#: src/libslic3r/PrintConfig.cpp:1047 -msgid "money/kg" -msgstr "soldi/kg" - #: src/libslic3r/PrintConfig.cpp:705 msgid "Monotonic" msgstr "Monotonico" @@ -7832,6 +7408,10 @@ msgstr "Rotella del mouse:" msgid "Move" msgstr "Sposta" +#: src/slic3r/GUI/GLCanvas3D.cpp:3245 +msgid "Move Object" +msgstr "Sposta oggetto" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:234 msgid "Move active thumb Down" msgstr "Abbassa cursore attivo" @@ -7856,10 +7436,6 @@ msgstr "Sposta piano sezione" msgid "Move drainage hole" msgstr "Sposta foro di drenaggio" -#: src/slic3r/GUI/GLCanvas3D.cpp:3245 -msgid "Move Object" -msgstr "Sposta oggetto" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 msgid "Move point" msgstr "Sposta punto" @@ -7950,6 +7526,14 @@ msgstr "Moltiplica le copie per questo valore." msgid "N/A" msgstr "N/A" +#: src/slic3r/GUI/RammingChart.cpp:29 +msgid "NO RAMMING AT ALL" +msgstr "NESSUN RAMMING" + +#: src/slic3r/GUI/GUI_Preview.cpp:728 +msgid "NOTE:" +msgstr "NOTA:" + #: src/slic3r/GUI/GUI_ObjectList.cpp:297 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:139 msgid "Name" @@ -7983,6 +7567,10 @@ msgstr "Nomi di preset relativi alla stampante fisica" msgid "Nearest" msgstr "Più vicino" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 +msgid "Negative Volume" +msgstr "Volume negativo" + #: resources/data/hints.ini: [hint:Negative volume] msgid "" "Negative volume\n" @@ -7997,14 +7585,18 @@ msgstr "" "facilmente ridimensionabili direttamente in PrusaSlicer. Leggi di più nella " "documentazione. (Richiede la modalità Avanzata o Esperto)." -#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 -msgid "Negative Volume" -msgstr "Volume negativo" - #: src/slic3r/GUI/BonjourDialog.cpp:55 msgid "Network lookup" msgstr "Ricerca network" +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +msgid "New Project" +msgstr "Nuovo progetto" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +msgid "New Value" +msgstr "Nuovo valore" + #: src/slic3r/GUI/Preferences.cpp:744 msgid "New layout, access via settings button in the top menu" msgstr "Nuovo layout, accesso tramite pulsante impostazioni dal menù superiore" @@ -8018,10 +7610,6 @@ msgstr "È disponibile la nuova versione prerelease %1%." msgid "New printer preset selected" msgstr "Nuovo preset stampante selezionato" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 -msgid "New Project" -msgstr "Nuovo progetto" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:77 msgid "New project, clear plater" msgstr "Nuovo progetto, pulisci piano" @@ -8031,10 +7619,6 @@ msgstr "Nuovo progetto, pulisci piano" msgid "New release version %1% is available." msgstr "La nuova versione %1% è disponibile." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 -msgid "New Value" -msgstr "Nuovo valore" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 #, c-format, boost-format msgid "New version of %s is available" @@ -8088,10 +7672,6 @@ msgstr "" msgid "No previously sliced file." msgstr "File non processato precedentemente." -#: src/slic3r/GUI/RammingChart.cpp:29 -msgid "NO RAMMING AT ALL" -msgstr "NESSUN RAMMING" - #: src/libslic3r/PrintConfig.cpp:2471 msgid "No sparse layers (EXPERIMENTAL)" msgstr "Nessun layer sparso (SPERIMENTALE)" @@ -8117,18 +7697,10 @@ msgstr "Nessuno" msgid "Normal" msgstr "Normale" -#: src/slic3r/GUI/Plater.cpp:1428 -msgid "normal mode" -msgstr "modalità normale" - #: src/slic3r/GUI/GCodeViewer.cpp:3754 msgid "Normal mode" msgstr "Modalità normale" -#: src/libslic3r/miniz_extension.cpp:105 -msgid "not a ZIP archive" -msgstr "non un archivio ZIP" - #: src/slic3r/GUI/BedShapeDialog.cpp:317 src/slic3r/GUI/BedShapeDialog.cpp:388 msgid "Not found:" msgstr "Non trovato:" @@ -8158,10 +7730,6 @@ msgstr[1] "" "Nota, queste stampanti saranno cancellate dopo aver cancellato il preset " "selezionato." -#: src/slic3r/GUI/GUI_Preview.cpp:728 -msgid "NOTE:" -msgstr "NOTA:" - #: src/slic3r/GUI/Tab.cpp:2249 msgid "" "Note: All parameters from this group are moved to the Physical Printer " @@ -8205,14 +7773,14 @@ msgstr "Nota: è richiesta una versione di OctoPrint 1.1.0 o successiva." msgid "Note: Repetier version at least 0.90.0 is required." msgstr "Nota: è richiesta la versione di Repetier almeno 0.90.0." -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1197 -msgid "Note: some shortcuts work in (non)editing mode only." -msgstr "Nota: alcune scorciatoie funzionano solo in modalità (non)modifica." - #: src/slic3r/GUI/SavePresetDialog.cpp:137 msgid "Note: This preset will be replaced after saving" msgstr "Nota: Questo preset sarà sostituito dopo il salvataggio" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1197 +msgid "Note: some shortcuts work in (non)editing mode only." +msgstr "Nota: alcune scorciatoie funzionano solo in modalità (non)modifica." + #: src/slic3r/GUI/Tab.cpp:1716 src/slic3r/GUI/Tab.cpp:1717 #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 @@ -8231,14 +7799,14 @@ msgstr "Avvertenza" msgid "Notify about new releases" msgstr "Notificare le nuove uscite" -#: src/slic3r/GUI/ConfigWizard.cpp:262 -msgid "nozzle" -msgstr "ugello" - #: src/slic3r/GUI/Tab.cpp:1984 msgid "Nozzle" msgstr "Ugello" +#: src/slic3r/GUI/ConfigWizard.cpp:1475 +msgid "Nozzle Diameter:" +msgstr "Diametro ugello:" + #: src/slic3r/GUI/ConfigWizard.cpp:1547 msgid "Nozzle and Bed Temperatures" msgstr "Temperatura ugello e piano" @@ -8248,10 +7816,6 @@ msgstr "Temperatura ugello e piano" msgid "Nozzle diameter" msgstr "Diametro ugello" -#: src/slic3r/GUI/ConfigWizard.cpp:1475 -msgid "Nozzle Diameter:" -msgstr "Diametro ugello:" - #: src/libslic3r/PrintConfig.cpp:2793 msgid "Nozzle temperature" msgstr "Temperatura ugello" @@ -8347,11 +7911,9 @@ msgstr "" msgid "Number of tool changes" msgstr "Numero di cambi strumento" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "object" -msgid_plural "objects" -msgstr[0] "oggetto" -msgstr[1] "oggetti" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 +msgid "Object Settings to modify" +msgstr "Impostazioni Oggetto da modificare" #: src/slic3r/GUI/Tab.cpp:4709 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" @@ -8378,10 +7940,6 @@ msgstr "Oggetto o Istanza" msgid "Object reordered" msgstr "Oggetto riordinato" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 -msgid "Object Settings to modify" -msgstr "Impostazioni Oggetto da modificare" - #: src/slic3r/GUI/Plater.cpp:2536 #, c-format, boost-format msgid "" @@ -8412,10 +7970,6 @@ msgstr "" "altrimenti nella torre di pulitura. Come risultato, i colori dell'oggetto " "saranno mischiati." -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "objects" -msgstr "oggetti" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:201 msgid "Objects List" msgstr "Elenco oggetti" @@ -8428,15 +7982,6 @@ msgstr "Spirale a Ottagramma" msgid "OctoPrint version" msgstr "Versione OctoPrint" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 -msgid "of a current Object" -msgstr "di un Oggetto corrente" - -#: src/slic3r/GUI/PrintHostDialogs.cpp:251 -msgctxt "OfFile" -msgid "Size" -msgstr "OfFile||Size" - #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:32 msgid "Offset" msgstr "Offset" @@ -8449,14 +7994,14 @@ msgstr "" "Offset del brim dell'oggetto stampato. L'offset viene applicato dopo la " "compensazione della zampa d'elefante." -#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 -msgid "Old regular layout with the tab bar" -msgstr "Precedente layout normale con la barra delle schede" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 msgid "Old Value" msgstr "Valore precedente" +#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 +msgid "Old regular layout with the tab bar" +msgstr "Precedente layout normale con la barra delle schede" + #: src/slic3r/GUI/Preferences.cpp:210 msgid "" "On OSX there is always only one instance of app running by default. However " @@ -8542,14 +8087,6 @@ msgstr "Solleva Z solo al di sotto" msgid "Only retract when crossing perimeters" msgstr "Retrai solo se si attraversa un perimetro" -#: src/slic3r/GUI/ConfigWizard.cpp:778 -msgid "" -"Only the following installed printers are compatible with the selected " -"filaments" -msgstr "" -"Solo le seguenti stampanti installate sono compatibili con i filamenti " -"selezionati" - #: src/slic3r/GUI/ConfigWizard.cpp:779 msgid "" "Only the following installed printers are compatible with the selected SLA " @@ -8558,6 +8095,14 @@ msgstr "" "Solo le seguenti stampanti installate sono compatibili con i materiali SLA " "selezionati" +#: src/slic3r/GUI/ConfigWizard.cpp:778 +msgid "" +"Only the following installed printers are compatible with the selected " +"filaments" +msgstr "" +"Solo le seguenti stampanti installate sono compatibili con i filamenti " +"selezionati" + #: src/slic3r/GUI/Tab.cpp:1630 msgid "Ooze prevention" msgstr "Prevenzione delle fuoriuscite" @@ -8572,6 +8117,38 @@ msgstr "" msgid "Open &PrusaSlicer" msgstr "Apri &PrusaSlicer" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 +msgid "Open CA certificate file" +msgstr "Apri file di certificato CA" + +#: src/slic3r/GUI/HintNotification.cpp:1000 +msgid "Open Documentation in web browser." +msgstr "Aprire la documentazione nel browser web." + +#: src/slic3r/GUI/NotificationManager.cpp:664 +msgid "Open Folder." +msgstr "Apri Cartella." + +#: src/slic3r/Utils/Process.cpp:157 +msgid "Open G-code file:" +msgstr "Apri un file G-code:" + +#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 +msgid "Open G-code viewer" +msgstr "Apri visualizzatore G-code" + +#: src/slic3r/GUI/MainFrame.cpp:1413 +msgid "Open New Instance" +msgstr "Apri una nuova istanza" + +#: src/slic3r/GUI/HintNotification.cpp:908 +msgid "Open Preferences." +msgstr "Apri le preferenze." + +#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 +msgid "Open PrusaSlicer" +msgstr "Apri PrusaSlicer" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:205 src/slic3r/GUI/MainFrame.cpp:1518 msgid "Open a G-code file" msgstr "Apri un file G-code" @@ -8589,35 +8166,15 @@ msgstr "Apri un file progetto" msgid "Open as project" msgstr "Apri come progetto" -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 -msgid "Open CA certificate file" -msgstr "Apri file di certificato CA" - #: src/slic3r/GUI/UpdateDialogs.cpp:59 src/slic3r/GUI/UpdateDialogs.cpp:133 #: src/slic3r/GUI/UpdateDialogs.cpp:191 msgid "Open changelog page" msgstr "Apri la pagina del registro delle modifiche" -#: src/slic3r/GUI/HintNotification.cpp:1000 -msgid "Open Documentation in web browser." -msgstr "Aprire la documentazione nel browser web." - #: src/slic3r/GUI/UpdateDialogs.cpp:65 msgid "Open download page" msgstr "Apri la pagina di Download" -#: src/slic3r/GUI/NotificationManager.cpp:664 -msgid "Open Folder." -msgstr "Apri Cartella." - -#: src/slic3r/Utils/Process.cpp:157 -msgid "Open G-code file:" -msgstr "Apri un file G-code:" - -#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 -msgid "Open G-code viewer" -msgstr "Apri visualizzatore G-code" - #: src/slic3r/GUI/GUI_App.cpp:3067 src/slic3r/GUI/GUI_App.cpp:3090 msgid "Open hyperlink in default browser?" msgstr "Aprire il collegamento ipertestuale nel browser predefinito?" @@ -8630,35 +8187,23 @@ msgstr "Apri nuovo visualizzatore G-code" msgid "Open new instance" msgstr "Apri una nuova istanza" -#: src/slic3r/GUI/MainFrame.cpp:1413 -msgid "Open New Instance" -msgstr "Apri una nuova istanza" - -#: src/slic3r/GUI/HintNotification.cpp:908 -msgid "Open Preferences." -msgstr "Apri le preferenze." - #: src/slic3r/GUI/KBShortcutsDialog.cpp:78 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater" msgstr "Apri progetto STL/OBJ/AMF/3MF con configurazione, pulisci piano" -#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 -msgid "Open PrusaSlicer" -msgstr "Apri PrusaSlicer" - #: src/slic3r/GUI/MainFrame.cpp:1079 #, c-format, boost-format msgid "Open the %s website in your browser" msgstr "Apri il sito web di %s nel browser" -#: src/slic3r/GUI/MainFrame.cpp:1397 -msgid "Open the dialog to modify shape gallery" -msgstr "Aprire la finestra di dialogo per modificare la galleria delle forme" - #: src/slic3r/GUI/MainFrame.cpp:1070 msgid "Open the Prusa3D drivers download page in your browser" msgstr "Apri la pagina di download dei driver Prusa3D sul browser" +#: src/slic3r/GUI/MainFrame.cpp:1397 +msgid "Open the dialog to modify shape gallery" +msgstr "Aprire la finestra di dialogo per modificare la galleria delle forme" + #: src/slic3r/GUI/MainFrame.cpp:1072 msgid "Open the software releases page in your browser" msgstr "Apri la pagina delle versioni software sul browser" @@ -8683,6 +8228,10 @@ msgstr "" msgid "Operation already cancelling. Please wait few seconds." msgstr "Operazione già annullata. Si prega di attendere qualche secondo." +#: src/slic3r/GUI/Plater.cpp:1678 +msgid "Optimize Rotation" +msgstr "Ottimizza Rotazione" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:23 msgid "Optimize object rotation for best surface quality." msgstr "Ottimizza rotazione oggetto per la migliore qualità superficiale" @@ -8704,10 +8253,6 @@ msgstr "" msgid "Optimize orientation" msgstr "Ottimizza orientamento" -#: src/slic3r/GUI/Plater.cpp:1678 -msgid "Optimize Rotation" -msgstr "Ottimizza Rotazione" - #: src/libslic3r/PrintConfig.cpp:373 msgid "" "Optimize travel moves in order to minimize the crossing of perimeters. This " @@ -8732,10 +8277,6 @@ msgstr "Opzioni per materiale di supporto e raft" msgid "Options:" msgstr "Opzioni:" -#: src/slic3r/GUI/DoubleSlider.cpp:1431 -msgid "or press \"+\" key" -msgstr "o premi il tasto \"+\"" - #: src/slic3r/GUI/Preferences.cpp:399 msgid "Order object volumes by types" msgstr "Ordinare i volumi degli oggetti per tipo" @@ -8756,14 +8297,14 @@ msgstr "Origine" msgid "Other" msgstr "Altro" -#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 -msgid "Other layers" -msgstr "Altri layer" - #: src/slic3r/GUI/ConfigWizard.cpp:1322 msgid "Other Vendors" msgstr "Altri Fornitori" +#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 +msgid "Other layers" +msgstr "Altri layer" + #: src/libslic3r/PrintConfig.cpp:515 msgid "Outer and inner brim" msgstr "Brim esterno e interno" @@ -8772,22 +8313,22 @@ msgstr "Brim esterno e interno" msgid "Outer brim only" msgstr "Solo brim esterno" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 -msgid "Output file" -msgstr "File di output" - #: src/libslic3r/PrintConfig.cpp:4436 msgid "Output File" msgstr "File di output" +#: src/libslic3r/PrintConfig.cpp:4305 +msgid "Output Model Info" +msgstr "Info Modello di output" + +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 +msgid "Output file" +msgstr "File di output" + #: src/libslic3r/PrintConfig.cpp:1902 msgid "Output filename format" msgstr "Formato del file di output" -#: src/libslic3r/PrintConfig.cpp:4305 -msgid "Output Model Info" -msgstr "Info Modello di output" - #: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4666 msgid "Output options" msgstr "Opzioni output" @@ -8900,6 +8441,10 @@ msgstr "" "intorno all'asse Z in senso orario o antiorario premendo rispettivamente " "Pagina su o Pagina giù?" +#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 +msgid "Paint-on seam" +msgstr "Pittura giunzione" + #: resources/data/hints.ini: [hint:Paint-on seam] msgid "" "Paint-on seam\n" @@ -8912,9 +8457,10 @@ msgstr "" "posizionare il punto di inizio/fine di ogni ciclo perimetrale? Prova la " "funzionePittura giunzione. (Richiede la modalità Avanzata o Esperto)." -#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 -msgid "Paint-on seam" -msgstr "Pittura giunzione" +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 +msgid "Paint-on supports" +msgstr "Supporti Paint-on" #: resources/data/hints.ini: [hint:Paint-on supports] msgid "" @@ -8928,11 +8474,6 @@ msgstr "" "dove devono essere applicati o bloccati i supporti? Prova la funzione " "Supporti Paint-on. (Richiede la modalità Avanzata o Esperto)." -#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 -msgid "Paint-on supports" -msgstr "Supporti Paint-on" - #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:674 #, boost-format msgid "Painted using: Extruder %1%" @@ -8967,10 +8508,6 @@ msgstr "" msgid "Paints only one facet." msgstr "Dipinge solo una facet." -#: src/slic3r/GUI/Field.cpp:193 -msgid "parameter name" -msgstr "nome parametro" - #: src/slic3r/GUI/Field.cpp:269 src/slic3r/GUI/Field.cpp:343 msgid "Parameter validation" msgstr "Validazione parametri" @@ -8991,14 +8528,14 @@ msgstr "" msgid "Part" msgstr "Parte" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 -msgid "Part manipulation" -msgstr "Manipolazione parti" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2481 msgid "Part Settings to modify" msgstr "Impostazioni parte da modificare" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 +msgid "Part manipulation" +msgstr "Manipolazione parti" + #: src/libslic3r/PrintConfig.cpp:324 msgid "Password" msgstr "Password" @@ -9007,6 +8544,10 @@ msgstr "Password" msgid "Paste" msgstr "Incolla" +#: src/slic3r/GUI/Plater.cpp:6640 +msgid "Paste From Clipboard" +msgstr "Incolla dagli appunti" + #: src/slic3r/GUI/MainFrame.cpp:1346 msgid "Paste clipboard" msgstr "Incolla appunti" @@ -9015,10 +8556,6 @@ msgstr "Incolla appunti" msgid "Paste from clipboard" msgstr "Incolla dagli appunti" -#: src/slic3r/GUI/Plater.cpp:6640 -msgid "Paste From Clipboard" -msgstr "Incolla dagli appunti" - #: src/libslic3r/PrintConfig.cpp:2697 msgid "Pattern" msgstr "Trama" @@ -9049,16 +8586,16 @@ msgstr "Trama usata per generare il materiale di supporto." msgid "Pause" msgstr "Pausa" -#: src/slic3r/GUI/DoubleSlider.cpp:1469 -#, boost-format -msgid "Pause print (\"%1%\")" -msgstr "Metti in pausa (\"%1%\")" - #: src/slic3r/GUI/Tab.cpp:2471 src/libslic3r/GCode.cpp:714 #: src/libslic3r/PrintConfig.cpp:2441 msgid "Pause Print G-code" msgstr "G-code Pausa Stampa" +#: src/slic3r/GUI/DoubleSlider.cpp:1469 +#, boost-format +msgid "Pause print (\"%1%\")" +msgstr "Metti in pausa (\"%1%\")" + #: src/libslic3r/PrintConfig.cpp:1558 msgid "Percent of a flow rate relative to object's normal layer height." msgstr "" @@ -9094,6 +8631,12 @@ msgstr "" "Prestazioni vs Precisione di calcolo. Valori più bassi possono produrre " "artefatti non voluti." +#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 +msgid "Performing desktop integration failed - Could not find executable." +msgstr "" +"Esecuzione dell'integrazione del desktop non riuscita - Impossibile trovare " +"l'eseguibile." + #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:232 msgid "" "Performing desktop integration failed - boost::filesystem::canonical did not " @@ -9111,12 +8654,6 @@ msgstr "" "il file desktop Gcodeviewer. Probabilmente il file desktop PrusaSlicer è " "stato creato correttamente." -#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 -msgid "Performing desktop integration failed - Could not find executable." -msgstr "" -"Esecuzione dell'integrazione del desktop non riuscita - Impossibile trovare " -"l'eseguibile." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:378 msgid "" "Performing desktop integration failed because the application directory was " @@ -9134,10 +8671,6 @@ msgstr "Perimetro" msgid "Perimeter extruder" msgstr "Estrusore perimetro" -#: src/slic3r/GUI/PresetHints.cpp:171 -msgid "perimeters" -msgstr "perimetri" - #: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1955 #: src/libslic3r/PrintConfig.cpp:1969 src/libslic3r/PrintConfig.cpp:1979 msgid "Perimeters" @@ -9215,6 +8748,10 @@ msgstr "Larghezza apice" msgid "Place bearings in slots and resume printing" msgstr "Posiziona i cuscinetti negli alloggi e riprendi a stampare" +#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 +msgid "Place on face" +msgstr "Posiziona su faccia" + #: resources/data/hints.ini: [hint:Place on face] msgid "" "Place on face\n" @@ -9227,10 +8764,6 @@ msgstr "" "delle sue facce poggi sul piano di stampa? Seleziona la funzione " "Posiziona su faccia o premi il tasto F." -#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 -msgid "Place on face" -msgstr "Posiziona su faccia" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:181 src/slic3r/GUI/MainFrame.cpp:284 #: src/slic3r/GUI/MainFrame.cpp:333 src/slic3r/GUI/MainFrame.cpp:445 #: src/slic3r/GUI/MainFrame.cpp:448 src/slic3r/GUI/MainFrame.cpp:470 @@ -9273,10 +8806,6 @@ msgstr "Posizione" msgid "Position (for multi-extruder printers)" msgstr "Posizione (per stampanti multi-estrusore)" -#: src/libslic3r/PrintConfig.cpp:2215 -msgid "Position of perimeters starting points." -msgstr "Posizione dei punti iniziali dei perimetri." - #: src/libslic3r/PrintConfig.cpp:2968 msgid "Position X" msgstr "Posizione X" @@ -9285,6 +8814,10 @@ msgstr "Posizione X" msgid "Position Y" msgstr "Posizione Y" +#: src/libslic3r/PrintConfig.cpp:2215 +msgid "Position of perimeters starting points." +msgstr "Posizione dei punti iniziali dei perimetri." + #: src/slic3r/GUI/Tab.cpp:1763 msgid "Post processing scripts shall modify G-code file in place." msgstr "" @@ -9386,11 +8919,6 @@ msgstr "" msgid "Preset with name \"%1%\" already exists." msgstr "Preset con il nome \"%1%\" già esistente." -#: src/slic3r/GUI/SavePresetDialog.cpp:221 -msgctxt "PresetName" -msgid "Copy" -msgstr "Copia" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 msgid "" "Presets are different.\n" @@ -9453,10 +8981,6 @@ msgstr "File precedentemente processato (" msgid "Prime all printing extruders" msgstr "Prepara tutti gli estrusori di stampa" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 -msgid "print" -msgstr "stampa" - #: src/slic3r/GUI/GCodeViewer.cpp:3506 src/slic3r/GUI/GCodeViewer.cpp:3541 msgid "Print" msgstr "Stampa" @@ -9465,14 +8989,6 @@ msgstr "Stampa" msgid "Print &Host Upload Queue" msgstr "Coda di caricamento &Host di stampa" -#: src/libslic3r/PrintConfig.cpp:753 -msgid "" -"Print contour perimeters from the outermost one to the innermost one instead " -"of the default inverse order." -msgstr "" -"Stampa i perimetri di contorno dal più esterno al più interno invece " -"dell'ordine predefinito inverso." - #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Print Diameters" msgstr "Diametro di stampa" @@ -9481,6 +8997,23 @@ msgstr "Diametro di stampa" msgid "Print Host upload" msgstr "Caricamento Host di stampa" +#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 +#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +msgid "Print Settings" +msgstr "Impostazioni Stampa" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 +msgid "Print Settings Tab" +msgstr "Scheda Impostazioni Stampa" + +#: src/libslic3r/PrintConfig.cpp:753 +msgid "" +"Print contour perimeters from the outermost one to the innermost one instead " +"of the default inverse order." +msgstr "" +"Stampa i perimetri di contorno dal più esterno al più interno invece " +"dell'ordine predefinito inverso." + #: src/slic3r/GUI/KBShortcutsDialog.cpp:114 #: src/slic3r/GUI/PrintHostDialogs.cpp:217 msgid "Print host upload queue" @@ -9494,20 +9027,11 @@ msgstr "Modalità di stampa" msgid "Print pauses" msgstr "Pause di stampa" -#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 -msgid "Print Settings" -msgstr "Impostazioni Stampa" - #: src/slic3r/GUI/GCodeViewer.cpp:3693 src/slic3r/GUI/GCodeViewer.cpp:3715 #: src/slic3r/GUI/GUI.cpp:337 src/slic3r/GUI/Plater.cpp:817 msgid "Print settings" msgstr "Impostazioni di stampa" -#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 -msgid "Print Settings Tab" -msgstr "Scheda Impostazioni Stampa" - #: src/libslic3r/PrintConfig.cpp:3774 msgid "Print speed" msgstr "Velocità di stampa" @@ -9542,9 +9066,14 @@ msgstr "" msgid "Printer" msgstr "Stampante" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 -msgid "printer" -msgstr "stampante" +#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 +#: src/slic3r/GUI/Tab.hpp:490 +msgid "Printer Settings" +msgstr "Impostazioni stampante" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 +msgid "Printer Settings Tab" +msgstr "Scheda Impostazioni Stampante" #: src/libslic3r/PrintConfig.cpp:3215 src/libslic3r/PrintConfig.cpp:3216 msgid "Printer absolute correction" @@ -9554,10 +9083,6 @@ msgstr "Correzione assoluta stampante" msgid "Printer gamma correction" msgstr "Correzione gamma della stampante" -#: src/slic3r/GUI/Tab.cpp:1375 -msgid "printer model" -msgstr "modello stampante" - #: src/libslic3r/PrintConfig.cpp:2011 msgid "Printer notes" msgstr "Note stampante" @@ -9566,6 +9091,18 @@ msgstr "Note stampante" msgid "Printer preset names" msgstr "Nomi dei preset della stampante" +#: src/libslic3r/PrintConfig.cpp:3192 +msgid "Printer scaling X axis correction" +msgstr "Correzione del ridimensionamento della stampante nell'asse X" + +#: src/libslic3r/PrintConfig.cpp:3200 +msgid "Printer scaling Y axis correction" +msgstr "Correzione del fattore di scala della stampante sull'asse Y" + +#: src/libslic3r/PrintConfig.cpp:3208 +msgid "Printer scaling Z axis correction" +msgstr "Correzione del ridimensionamento della stampante nell'asse Z" + #: src/libslic3r/PrintConfig.cpp:3183 src/libslic3r/PrintConfig.cpp:3184 #: src/libslic3r/PrintConfig.cpp:3185 msgid "Printer scaling correction" @@ -9583,27 +9120,6 @@ msgstr "Correzione del ridimensionamento della stampante sull'asse Y" msgid "Printer scaling correction in Z axis" msgstr "Correzione del ridimensionamento della stampante sull'asse Z" -#: src/libslic3r/PrintConfig.cpp:3192 -msgid "Printer scaling X axis correction" -msgstr "Correzione del ridimensionamento della stampante nell'asse X" - -#: src/libslic3r/PrintConfig.cpp:3200 -msgid "Printer scaling Y axis correction" -msgstr "Correzione del fattore di scala della stampante sull'asse Y" - -#: src/libslic3r/PrintConfig.cpp:3208 -msgid "Printer scaling Z axis correction" -msgstr "Correzione del ridimensionamento della stampante nell'asse Z" - -#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 -msgid "Printer Settings" -msgstr "Impostazioni stampante" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 -msgid "Printer Settings Tab" -msgstr "Scheda Impostazioni Stampante" - #: src/libslic3r/PrintConfig.cpp:223 src/libslic3r/PrintConfig.cpp:224 msgid "Printer technology" msgstr "Tecnologia stampante" @@ -9695,6 +9211,10 @@ msgstr "Stampanti Prusa con tecnologia FFF" msgid "Prusa MSLA Technology Printers" msgstr "Stampanti Prusa con tecnologia MSLA" +#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 +msgid "PrusaSlicer GUI initialization failed" +msgstr "Inizializzazione GUI PrusaSlicer non riuscita" + #: src/slic3r/GUI/GUI_App.cpp:1330 #, boost-format msgid "" @@ -9728,10 +9248,6 @@ msgstr "PrusaSlicer ha rilevato l'archivio dei certificati SSL di sistema: %1%" msgid "PrusaSlicer error" msgstr "Errore PrusaSlicer" -#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 -msgid "PrusaSlicer GUI initialization failed" -msgstr "Inizializzazione GUI PrusaSlicer non riuscita" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:84 #, boost-format msgid "PrusaSlicer has encountered a fatal error: \"%1%\"" @@ -10075,6 +9591,16 @@ msgstr "Regolare" msgid "Regular expression" msgstr "Espressione regolare" +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" +"L'indirizzamento relativo dell'estrusore richiede la reimpostazione della " +"posizione dell'estrusore ad ogni strato per evitare la perdita di precisione " +"in virgola mobile. Aggiungi \"G92 E0\" a layer_gcode." + #: src/slic3r/GUI/Preferences.cpp:435 msgid "Release only" msgstr "Solo Release" @@ -10083,6 +9609,11 @@ msgstr "Solo Release" msgid "Reload all from disk" msgstr "Ricarica tutto da disco" +#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 +#: src/slic3r/GUI/Plater.cpp:3548 +msgid "Reload from disk" +msgstr "Ricarica da Disco" + #: resources/data/hints.ini: [hint:Reload from disk] msgid "" "Reload from disk\n" @@ -10095,11 +9626,6 @@ msgstr "" "semplicemente ricaricarlo in PrusaSlicer? Fai clic destro sul modello nella " "vista 3D e scegli Ricarica da disco. Leggi di più nella documentazione." -#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 -msgid "Reload from disk" -msgstr "Ricarica da Disco" - #: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 msgid "Reload from:" msgstr "Ricarica da:" @@ -10137,15 +9663,19 @@ msgstr "Ricorda la mia scelta" msgid "Remember output directory" msgstr "Ricorda la directory di output" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "remove" -msgstr "rimuovi" - #: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/BedShapeDialog.cpp:362 #: src/slic3r/GUI/Tab.cpp:3734 msgid "Remove" msgstr "Rimuovi" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 +msgid "Remove Instance of the selected object" +msgstr "Rimuovi Istanza dell'oggetto selezionato" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 +msgid "Remove Multi Material painting" +msgstr "Rimuovi pittura Multi Material" + #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:38 msgid "Remove all holes" msgstr "Rimuovi tutti i fori" @@ -10171,18 +9701,10 @@ msgstr "Rimuovi estrusore dalla sequenza" msgid "Remove instance" msgstr "Rimuovi istanza" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 -msgid "Remove Instance of the selected object" -msgstr "Rimuovi Istanza dell'oggetto selezionato" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:160 msgid "Remove layer range" msgstr "Rimuovi intervallo layer" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 -msgid "Remove Multi Material painting" -msgstr "Rimuovi pittura Multi Material" - #: src/slic3r/GUI/GUI_Factories.cpp:1087 msgid "Remove one instance of the selected object" msgstr "Rimuovi una istanza dell'oggetto selezionato" @@ -10317,11 +9839,11 @@ msgid "Repairing was canceled" msgstr "La riparazione è stata annullata" #: src/slic3r/GUI/MainFrame.cpp:1285 -msgid "Repeat last quick slice" +msgid "Repeat Last Quick Slice" msgstr "Ripeti l'ultimo slice veloce" #: src/slic3r/GUI/MainFrame.cpp:1285 -msgid "Repeat Last Quick Slice" +msgid "Repeat last quick slice" msgstr "Ripeti l'ultimo slice veloce" #: src/slic3r/GUI/Plater.cpp:3432 @@ -10357,21 +9879,6 @@ msgstr "&Segnala un problema" msgid "Report an issue on %s" msgstr "Segnala un problema su %s" -#: src/slic3r/Utils/PresetUpdater.cpp:815 -#, c-format, boost-format -msgid "requires max. %s" -msgstr "richiede max. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:812 -#, c-format, boost-format -msgid "requires min. %s" -msgstr "richiede min. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:808 -#, c-format, boost-format -msgid "requires min. %s and max. %s" -msgstr "richiede min. %s e max. %s" - #: src/slic3r/GUI/FirmwareDialog.cpp:820 msgid "Rescan" msgstr "Ri-scansiona" @@ -10380,6 +9887,14 @@ msgstr "Ri-scansiona" msgid "Reset" msgstr "Reimposta" +#: src/slic3r/GUI/Plater.cpp:3003 +msgid "Reset Project" +msgstr "Reimposta Progetto" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 +msgid "Reset Rotation" +msgstr "Reimposta rotazione" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1225 msgid "Reset clipping plane" msgstr "Ripristina piano sezione" @@ -10392,18 +9907,10 @@ msgstr "Ripristina piano sezione" msgid "Reset direction" msgstr "Reset direzione" -#: src/slic3r/GUI/Plater.cpp:3003 -msgid "Reset Project" -msgstr "Reimposta Progetto" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363 msgid "Reset rotation" msgstr "Reimposta rotazione" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 -msgid "Reset Rotation" -msgstr "Reimposta rotazione" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:398 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:400 msgid "Reset scale" @@ -10415,14 +9922,14 @@ msgstr "Reimposta scala" msgid "Reset selection" msgstr "Reset selezione" -#: src/slic3r/GUI/GLCanvas3D.cpp:237 -msgid "Reset to base" -msgstr "Ripristina alla base" - #: src/slic3r/GUI/Tab.cpp:2825 msgid "Reset to Filament Color" msgstr "Ripristina colore Filamento" +#: src/slic3r/GUI/GLCanvas3D.cpp:237 +msgid "Reset to base" +msgstr "Ripristina alla base" + #: src/slic3r/GUI/GUI_App.cpp:2331 msgid "Restart application" msgstr "Riavvia l'applicazione" @@ -10444,13 +9951,6 @@ msgstr "Retrai al cambio layer" msgid "Retraction" msgstr "Retrazione" -#: src/libslic3r/PrintConfig.cpp:2115 -msgid "" -"Retraction is not triggered when travel moves are shorter than this length." -msgstr "" -"La retrazione non è attivata quando i movimenti di spostamento sono più " -"brevi di questa lunghezza." - #: src/libslic3r/PrintConfig.cpp:2136 msgid "Retraction Length" msgstr "Lunghezza Retrazione" @@ -10463,6 +9963,13 @@ msgstr "Lunghezza Retrazione (cambio strumento)" msgid "Retraction Speed" msgstr "Velocità di retrazione" +#: src/libslic3r/PrintConfig.cpp:2115 +msgid "" +"Retraction is not triggered when travel moves are shorter than this length." +msgstr "" +"La retrazione non è attivata quando i movimenti di spostamento sono più " +"brevi di questa lunghezza." + #: src/slic3r/GUI/Tab.cpp:2818 msgid "" "Retraction when tool is disabled (advanced settings for multi-extruder " @@ -10499,6 +10006,14 @@ msgstr "Rivedere le sostituzioni e regolarle se necessario." msgid "Right" msgstr "Destra" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +msgid "Right Preset Value" +msgstr "Valore di preset destro" + +#: src/slic3r/GUI/MainFrame.cpp:1129 +msgid "Right View" +msgstr "Vista destra" + #: src/slic3r/GUI/GUI_ObjectList.cpp:488 msgid "Right button click the icon to change the object printable property" msgstr "" @@ -10527,14 +10042,6 @@ msgstr "Tasto destro mouse" msgid "Right mouse button:" msgstr "Tasto destro mouse:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 -msgid "Right Preset Value" -msgstr "Valore di preset destro" - -#: src/slic3r/GUI/MainFrame.cpp:1129 -msgid "Right View" -msgstr "Vista destra" - #: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:466 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:543 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562 @@ -10602,16 +10109,6 @@ msgstr "Run %s" msgid "Running post-processing scripts" msgstr "Esecuzione script di post produzione" -#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 -#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 -#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 -#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 -#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 -#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 -#: src/libslic3r/PrintConfig.cpp:3349 -msgid "s" -msgstr "s" - #: src/slic3r/GUI/MainFrame.cpp:1231 src/slic3r/GUI/MainFrame.cpp:1580 msgid "S&end G-code" msgstr "Invia G-cod&e" @@ -10620,6 +10117,60 @@ msgstr "Invia G-cod&e" msgid "S&end to print" msgstr "Manda in stampa" +#: src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Material Profiles Selection" +msgstr "Selezione Profili Materiale SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Materials" +msgstr "Materiali SLA" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 +msgid "SLA Support Points" +msgstr "Punti di Supporto SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:2102 +msgid "SLA Technology Printers" +msgstr "Stampanti con tecnologia SLA" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 +msgid "SLA gizmo keyboard shortcuts" +msgstr "Scorciatoie di tastiera gizmo SLA" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +msgid "SLA material" +msgstr "Materiale SLA" + +#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 +msgid "SLA material type" +msgstr "Tipo materiale SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:752 +msgid "SLA materials" +msgstr "Materiali SLA" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +msgid "SLA print" +msgstr "Stampa SLA" + +#: src/libslic3r/PrintConfig.cpp:3382 +msgid "SLA print material notes" +msgstr "Note sul materiale di stampa SLA" + +#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 +msgid "SLA print settings" +msgstr "Impostazioni di stampa SLA" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6369 +msgid "SLA supports outside the print area were detected." +msgstr "Sono stati rilevati supporti SLA al di fuori dell'area di stampa ." + +#: src/slic3r/GUI/MainFrame.cpp:1661 +msgid "SVG" +msgstr "SVG" + #. TRN To be shown in Print Settings "Bottom contact Z distance". Have to be as short as possible #. TRN To be shown in Print Settings "Bottom interface layers". Have to be as short as possible #: src/libslic3r/PrintConfig.cpp:2576 src/libslic3r/PrintConfig.cpp:2661 @@ -10640,6 +10191,23 @@ msgstr "Salva %s come:" msgid "Save %s file as:" msgstr "Salva file %s come:" +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save G-code file as:" +msgstr "Salva il file G-code come:" + +#: src/slic3r/GUI/MainFrame.cpp:1736 +msgid "Save OBJ file (less prone to coordinate errors than STL) as:" +msgstr "" +"Salva il file OBJ (meno soggetto a errori di coordinate dell'STL) come:" + +#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 +msgid "Save Project &as" +msgstr "S&alva progetto come" + +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save SL1 / SL1S file as:" +msgstr "Salva file SL1 / SL1S come:" + #: src/libslic3r/PrintConfig.cpp:4310 msgid "Save config file" msgstr "Salva file config" @@ -10670,15 +10238,6 @@ msgstr "Salvare il file del progetto corrente come" msgid "Save file as:" msgstr "Salva come:" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save G-code file as:" -msgstr "Salva il file G-code come:" - -#: src/slic3r/GUI/MainFrame.cpp:1736 -msgid "Save OBJ file (less prone to coordinate errors than STL) as:" -msgstr "" -"Salva il file OBJ (meno soggetto a errori di coordinate dell'STL) come:" - #: src/slic3r/GUI/SavePresetDialog.cpp:191 #: src/slic3r/GUI/SavePresetDialog.cpp:197 msgid "Save preset" @@ -10692,10 +10251,6 @@ msgstr "Salva il gruppo di preset come:" msgid "Save project" msgstr "Salva progetto" -#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 -msgid "Save Project &as" -msgstr "S&alva progetto come" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:79 msgid "Save project (3mf)" msgstr "Salva progetto (3mf)" @@ -10704,10 +10259,6 @@ msgstr "Salva progetto (3mf)" msgid "Save project as (3mf)" msgstr "Salva progetto come (3mf)" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save SL1 / SL1S file as:" -msgstr "Salva file SL1 / SL1S come:" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:898 msgid "Save support points?" msgstr "Salvare i punti di supporto?" @@ -10739,6 +10290,10 @@ msgstr "Il salvataggio della rete nel contenitore 3MF non è riuscito." msgid "Scale" msgstr "Ridimensiona" +#: src/slic3r/GUI/Selection.cpp:950 +msgid "Scale To Fit" +msgstr "Ridimensiona per adattare" + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:523 msgid "Scale factors" msgstr "Fattore di scala" @@ -10751,10 +10306,6 @@ msgstr "Ridimensiona l'oggetto selezionato per entrare nel volume di stampa" msgid "Scale to Fit" msgstr "Ridimensiona per riempire" -#: src/slic3r/GUI/Selection.cpp:950 -msgid "Scale To Fit" -msgstr "Ridimensiona per adattare" - #: src/libslic3r/PrintConfig.cpp:4405 msgid "Scale to fit the given volume." msgstr "Ridimensiona per adattare al volume dato." @@ -10843,13 +10394,39 @@ msgstr "Secondo colore" msgid "See Download page." msgstr "Vedi la pagina di download." +#: src/slic3r/GUI/GUI_App.cpp:1219 +msgid "See Releases page." +msgstr "Vedi la pagina dei rilasci." + #: src/slic3r/GUI/NotificationManager.hpp:753 msgid "See more." msgstr "Vedi altro." -#: src/slic3r/GUI/GUI_App.cpp:1219 -msgid "See Releases page." -msgstr "Vedi la pagina dei rilasci." +#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 +msgid "Select Filament Settings Tab" +msgstr "Attiva Scheda impostazioni di Filamento" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 +msgid "Select Plater Tab" +msgstr "Seleziona scheda piano" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 +msgid "Select Print Settings Tab" +msgstr "Attiva Scheda Impostazioni di Stampa" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 +msgid "Select Printer Settings Tab" +msgstr "Attiva Scheda Impostazioni Stampante" + +#: src/slic3r/GUI/DoubleSlider.cpp:2532 +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 strumento salvati,\n" +"NO se vuoi che tutti i cambi strumento passino a cambi colore,\n" +"o ANNULLA per lasciarlo invariato." #: src/slic3r/GUI/FirmwareDialog.cpp:813 msgid "Select a file" @@ -10888,26 +10465,10 @@ msgid "Select coordinate space, in which the transformation will be performed." msgstr "" "Seleziona le coordinate spaziali in cui verrà eseguita la trasformazione." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 -msgid "Select Filament Settings Tab" -msgstr "Attiva Scheda impostazioni di Filamento" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 -msgid "Select Plater Tab" -msgstr "Seleziona scheda piano" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 msgid "Select presets to compare" msgstr "Seleziona i preset da confrontare" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 -msgid "Select Print Settings Tab" -msgstr "Attiva Scheda Impostazioni di Stampa" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 -msgid "Select Printer Settings Tab" -msgstr "Attiva Scheda Impostazioni Stampante" - #: src/slic3r/GUI/GalleryDialog.cpp:76 msgid "Select shape from the gallery" msgstr "Seleziona la forma dalla galleria" @@ -10916,6 +10477,10 @@ msgstr "Seleziona la forma dalla galleria" msgid "Select showing settings" msgstr "Seleziona le impostazioni mostrate" +#: src/slic3r/GUI/MainFrame.cpp:1726 +msgid "Select the STL file to repair:" +msgstr "Seleziona il file STL da riparare:" + #: src/slic3r/GUI/GUI_App.cpp:2010 msgid "Select the language" msgstr "Seleziona la lingua" @@ -10932,10 +10497,6 @@ msgstr "Seleziona i profili di stampa compatibili con questo profilo." msgid "Select the printers this profile is compatible with." msgstr "Seleziona le stampanti compatibili con questo profilo." -#: src/slic3r/GUI/MainFrame.cpp:1726 -msgid "Select the STL file to repair:" -msgstr "Seleziona il file STL da riparare:" - #: src/slic3r/GUI/Preferences.cpp:709 msgid "Select toolbar icon size in respect to the default one." msgstr "" @@ -10954,16 +10515,6 @@ msgstr "Seleziona il tipo di Pad richiesto" msgid "Select what kind of support do you need" msgstr "Seleziona il tipo di supporto richiesto" -#: src/slic3r/GUI/DoubleSlider.cpp:2532 -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 strumento salvati,\n" -"NO se vuoi che tutti i cambi strumento passino a cambi colore,\n" -"o ANNULLA per lasciarlo invariato." - #: src/slic3r/GUI/Selection.cpp:168 msgid "Selection-Add" msgstr "Selezione-Aggiungi" @@ -10972,14 +10523,6 @@ msgstr "Selezione-Aggiungi" msgid "Selection-Add All" msgstr "Selezione-Aggiungi tutti" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 -msgid "Selection-Add from list" -msgstr "Aggiungi selezione da elenco" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6446 -msgid "Selection-Add from rectangle" -msgstr "Aggiungi Selezione da rettangolo" - #: src/slic3r/GUI/Selection.cpp:278 msgid "Selection-Add Instance" msgstr "Selezione-Aggiungi istanza" @@ -10988,6 +10531,14 @@ msgstr "Selezione-Aggiungi istanza" msgid "Selection-Add Object" msgstr "Selezione-Aggiungi Oggetto" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 +msgid "Selection-Add from list" +msgstr "Aggiungi selezione da elenco" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6446 +msgid "Selection-Add from rectangle" +msgstr "Aggiungi Selezione da rettangolo" + #: src/slic3r/GUI/Selection.cpp:209 msgid "Selection-Remove" msgstr "Selezione-Rimuovi" @@ -10996,14 +10547,6 @@ msgstr "Selezione-Rimuovi" msgid "Selection-Remove All" msgstr "Selezione-Rimuovi tutti" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 -msgid "Selection-Remove from list" -msgstr "Rimozione Selezione dall'elenco" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6461 -msgid "Selection-Remove from rectangle" -msgstr "Rimuovi selezione da rettangolo" - #: src/slic3r/GUI/Selection.cpp:297 msgid "Selection-Remove Instance" msgstr "Selezione-Rimuovi istanza" @@ -11012,18 +10555,26 @@ msgstr "Selezione-Rimuovi istanza" msgid "Selection-Remove Object" msgstr "Selezione-Rimuovi oggetto" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 +msgid "Selection-Remove from list" +msgstr "Rimozione Selezione dall'elenco" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6461 +msgid "Selection-Remove from rectangle" +msgstr "Rimuovi selezione da rettangolo" + #: src/slic3r/GUI/MainFrame.cpp:1320 msgid "Selects all objects" msgstr "Seleziona tutti gli oggetti" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 -msgid "Send G-code" -msgstr "Invia G-code" - #: src/slic3r/GUI/PrintHostDialogs.cpp:40 msgid "Send G-Code to printer host" msgstr "Invia G-code all’host stampante" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +msgid "Send G-code" +msgstr "Invia G-code" + #: src/slic3r/GUI/SendSystemInfoDialog.cpp:550 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:618 msgid "Send system info" @@ -11073,6 +10624,46 @@ msgstr "Nome servizio" msgid "Set" msgstr "Imposta" +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 +msgid "Set Mirror" +msgstr "Imposta specchio" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 +msgid "Set Orientation" +msgstr "Imposta orientamento" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 +msgid "Set Position" +msgstr "Imposta posizione" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Printable" +msgstr "Imposta stampabile" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Printable Instance" +msgstr "Imposta Istanza Stampabile" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Printable group" +msgstr "Imposta gruppo Stampabile" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 +msgid "Set Scale" +msgstr "Imposta scala" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Unprintable" +msgstr "Imposta non stampabile" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Unprintable Instance" +msgstr "Imposta Istanza non stampabile" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Unprintable group" +msgstr "Impostare Gruppo Non stampabile" + #: src/slic3r/GUI/GUI_Factories.cpp:636 src/slic3r/GUI/GUI_Factories.cpp:648 msgid "Set as a Separated Object" msgstr "Imposta come Oggetto Separato" @@ -11121,9 +10712,9 @@ msgstr "Imposta cursore sinistro come attivo" msgid "Set lower thumb as active" msgstr "Imposta cursore inferiore come attivo" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 -msgid "Set Mirror" -msgstr "Imposta specchio" +#: src/slic3r/GUI/GUI_Factories.cpp:1090 +msgid "Set number of instances" +msgstr "Imposta numero di istanze" #: resources/data/hints.ini: [hint:Set number of instances] msgid "" @@ -11136,35 +10727,11 @@ msgstr "" "impostare un numero esatto di istanze invece di fare un copia-incolla più " "volte?" -#: src/slic3r/GUI/GUI_Factories.cpp:1090 -msgid "Set number of instances" -msgstr "Imposta numero di istanze" - #: src/slic3r/GUI/Plater.cpp:5573 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Imposta il numero di copie a %d" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 -msgid "Set Orientation" -msgstr "Imposta orientamento" - -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 -msgid "Set Position" -msgstr "Imposta posizione" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Printable" -msgstr "Imposta stampabile" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Printable group" -msgstr "Imposta gruppo Stampabile" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Printable Instance" -msgstr "Imposta Istanza Stampabile" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:249 msgid "Set right thumb as active" msgstr "Imposta cursore destro come attivo" @@ -11173,10 +10740,6 @@ msgstr "Imposta cursore destro come attivo" msgid "Set ruler mode" msgstr "Imposta la modalità righello" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 -msgid "Set Scale" -msgstr "Imposta scala" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:196 msgid "Set selected items as Printable/Unprintable" msgstr "Imposta gli elementi selezionati come stampabili/non stampabili" @@ -11343,18 +10906,6 @@ msgstr "" "cilindrico attorno l'estrusore, e indica la profondità massima che " "l'estrusore può affacciarsi prima di sbattere con altri oggetti stampati." -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Unprintable" -msgstr "Imposta non stampabile" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Unprintable group" -msgstr "Impostare Gruppo Non stampabile" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Unprintable Instance" -msgstr "Imposta Istanza non stampabile" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:235 msgid "Set upper thumb as active" msgstr "Imposta cursore superiore come attivo" @@ -11378,6 +10929,10 @@ msgstr "Impostazioni" msgid "Settings for height range" msgstr "Impostazioni per intervallo altezza" +#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 +msgid "Settings in non-modal window" +msgstr "Impostazioni nella finestra non modale" + #: resources/data/hints.ini: [hint:Settings in non-modal window] msgid "" "Settings in non-modal window\n" @@ -11391,10 +10946,6 @@ msgstr "" "l'anteprima del G-code sull'altro. Vai nelle Preferenze e seleziona " "Impostazioni in una finestra non modale." -#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 -msgid "Settings in non-modal window" -msgstr "Impostazioni nella finestra non modale" - #: src/slic3r/GUI/ConfigManipulation.cpp:167 msgid "Shall I adjust those settings for supports?" msgstr "Vuoi che regoli queste impostazioni per i supporti?" @@ -11480,6 +11031,10 @@ msgstr "Mostra Cartella &Configurazione" msgid "Show &Labels" msgstr "Mostra etichette (&L)" +#: src/slic3r/GUI/MainFrame.cpp:1097 +msgid "Show Tip of the Day" +msgstr "Mostra consiglio del giorno" + #: src/slic3r/GUI/MainFrame.cpp:1092 src/slic3r/GUI/MainFrame.cpp:1095 msgid "Show about dialog" msgstr "Mostra la finestra di informazioni" @@ -11568,16 +11123,16 @@ msgstr "Mostra anteprima slice 3D" msgid "Show the filament settings" msgstr "Mostra impostazioni filamento" -#: src/libslic3r/PrintConfig.cpp:4296 -msgid "Show the full list of print/G-code configuration options." -msgstr "" -"Mostra l'elenco completo delle opzioni di configurazione stampa/G-code." - #: src/libslic3r/PrintConfig.cpp:4301 msgid "Show the full list of SLA print configuration options." msgstr "" "Mostra la lista completa delle opzioni di configurazione di stampa SLA." +#: src/libslic3r/PrintConfig.cpp:4296 +msgid "Show the full list of print/G-code configuration options." +msgstr "" +"Mostra l'elenco completo delle opzioni di configurazione stampa/G-code." + #: src/slic3r/GUI/MainFrame.cpp:1100 msgid "Show the list of the keyboard shortcuts" msgstr "Mostra l'elenco delle scorciatoie di tastiera" @@ -11598,10 +11153,6 @@ msgstr "Mostra impostazioni della stampante" msgid "Show this help." msgstr "Mostra questo aiuto." -#: src/slic3r/GUI/MainFrame.cpp:1097 -msgid "Show Tip of the Day" -msgstr "Mostra consiglio del giorno" - #: src/slic3r/GUI/MainFrame.cpp:1087 msgid "Show user configuration folder (datadir)" msgstr "Mostra cartella configurazione utente (datadir)" @@ -11642,14 +11193,14 @@ msgstr "Mostra/Nascondi etichette dell'oggetto/istanza" msgid "Simple" msgstr "Semplice" -#: src/slic3r/GUI/ConfigWizard.cpp:1279 -msgid "Simple mode" -msgstr "Modalità Semplice" - #: src/slic3r/GUI/GUI_App.cpp:2237 msgid "Simple View Mode" msgstr "Modalità di visualizzazione semplice" +#: src/slic3r/GUI/ConfigWizard.cpp:1279 +msgid "Simple mode" +msgstr "Modalità Semplice" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:156 msgid "Simplification is currently only allowed when a single part is selected" msgstr "" @@ -11682,10 +11233,6 @@ msgstr "" msgid "Simplify model" msgstr "Semplifica modello" -#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 -msgid "Single extruder MM setup" -msgstr "Setup Estrusore singolo MM" - #: src/libslic3r/PrintConfig.cpp:2459 msgid "Single Extruder Multi Material" msgstr "Estrusore singolo Multi Material" @@ -11702,6 +11249,10 @@ msgstr "" "Vuoi modificare il diametro di tutti gli estrusori al valore del diametro " "dell'ugello del primo estrusore?" +#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 +msgid "Single extruder MM setup" +msgstr "Setup Estrusore singolo MM" + #: src/slic3r/GUI/Tab.cpp:2734 msgid "Single extruder multimaterial parameters" msgstr "Parametri estrusore singolo materiale multiplo" @@ -11732,6 +11283,10 @@ msgstr "Dimensioni X e Y del piano rettangolare." msgid "Skirt" msgstr "Skirt" +#: src/libslic3r/PrintConfig.cpp:2282 +msgid "Skirt Loops" +msgstr "Giri skirt" + #: src/slic3r/GUI/GUI_Factories.cpp:136 src/slic3r/GUI/Tab.cpp:1536 #: src/libslic3r/PrintConfig.cpp:494 src/libslic3r/PrintConfig.cpp:505 #: src/libslic3r/PrintConfig.cpp:521 @@ -11742,65 +11297,11 @@ msgstr "Skirt e brim" msgid "Skirt height" msgstr "Altezza skirt" -#: src/libslic3r/PrintConfig.cpp:2282 -msgid "Skirt Loops" -msgstr "Giri skirt" - #: src/slic3r/GUI/GUI_Preview.cpp:248 src/libslic3r/ExtrusionEntity.cpp:327 #: src/libslic3r/ExtrusionEntity.cpp:358 msgid "Skirt/Brim" msgstr "Skirt/Brim" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 -msgid "SLA gizmo keyboard shortcuts" -msgstr "Scorciatoie di tastiera gizmo SLA" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 -msgid "SLA material" -msgstr "Materiale SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Material Profiles Selection" -msgstr "Selezione Profili Materiale SLA" - -#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 -msgid "SLA material type" -msgstr "Tipo materiale SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Materials" -msgstr "Materiali SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:752 -msgid "SLA materials" -msgstr "Materiali SLA" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 -msgid "SLA print" -msgstr "Stampa SLA" - -#: src/libslic3r/PrintConfig.cpp:3382 -msgid "SLA print material notes" -msgstr "Note sul materiale di stampa SLA" - -#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 -msgid "SLA print settings" -msgstr "Impostazioni di stampa SLA" - -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 -msgid "SLA Support Points" -msgstr "Punti di Supporto SLA" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6369 -msgid "SLA supports outside the print area were detected." -msgstr "Sono stati rilevati supporti SLA al di fuori dell'area di stampa ." - -#: src/slic3r/GUI/ConfigWizard.cpp:2102 -msgid "SLA Technology Printers" -msgstr "Stampanti con tecnologia SLA" - #: src/slic3r/GUI/GUI_Factories.cpp:461 msgid "Slab" msgstr "Lastra" @@ -11896,6 +11397,14 @@ msgstr "L'oggetto processato \"%1%\" sembra un logo o un segno" msgid "Slicing" msgstr "Slicing" +#: src/slic3r/GUI/MainFrame.cpp:1710 +msgid "Slicing Done!" +msgstr "Slicing Completato!" + +#: src/libslic3r/PrintConfig.cpp:2489 +msgid "Slicing Mode" +msgstr "Modalità di Slicing" + #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:162 #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:204 msgid "Slicing complete" @@ -11905,10 +11414,6 @@ msgstr "Slicing completato" msgid "Slicing done" msgstr "Slicing completato" -#: src/slic3r/GUI/MainFrame.cpp:1710 -msgid "Slicing Done!" -msgstr "Slicing Completato!" - #: src/slic3r/GUI/NotificationManager.cpp:1113 msgid "Slicing finished." msgstr "Slicing completato." @@ -11920,10 +11425,6 @@ msgstr "" "Lo slicing è stato interrotto a causa di un errore interno: Indice di slice " "inconsistente." -#: src/libslic3r/PrintConfig.cpp:2489 -msgid "Slicing Mode" -msgstr "Modalità di Slicing" - #: src/libslic3r/SLAPrintSteps.cpp:47 msgid "Slicing model" msgstr "Slicing del modello" @@ -11982,10 +11483,6 @@ msgstr "Aderenti" msgid "Software &Releases" msgstr "Ve&rsioni Software" -#: src/slic3r/GUI/PresetHints.cpp:176 -msgid "solid infill" -msgstr "riempimento solido" - #: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:322 #: src/libslic3r/ExtrusionEntity.cpp:348 src/libslic3r/PrintConfig.cpp:2342 #: src/libslic3r/PrintConfig.cpp:2354 @@ -12000,6 +11497,10 @@ msgstr "Riempimento solido ogni" msgid "Solid infill extruder" msgstr "Estrusore riempimento solido" +#: src/libslic3r/PrintConfig.cpp:2313 +msgid "Solid infill threshold area" +msgstr "Area soglia riempimento solido" + #: resources/data/hints.ini: [hint:Solid infill threshold area] msgid "" "Solid infill threshold area\n" @@ -12013,10 +11514,6 @@ msgstr "" "solido? Imposta laSoglia di riempimento solido (solo in modalità " "esperto)." -#: src/libslic3r/PrintConfig.cpp:2313 -msgid "Solid infill threshold area" -msgstr "Area soglia riempimento solido" - #: src/slic3r/GUI/Tab.cpp:1470 src/libslic3r/PrintConfig.cpp:2367 msgid "Solid layers" msgstr "Layer solidi" @@ -12029,17 +11526,6 @@ msgstr "Materiale solubile" msgid "Soluble material is most likely used for a soluble support." msgstr "Il materiale solubile è comunemente usato per un supporto solubile." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 -msgid "" -"Some fields are too long to fit. Right mouse click reveals the full text." -msgstr "" -"Alcuni campi sono troppo lunghi per adattarsi. Cliccando con il tasto destro " -"del mouse si visualizza il testo completo." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some filaments were uninstalled." -msgstr "Alcuni filamenti sono stati disinstallati." - #: src/libslic3r/PrintConfig.cpp:1321 msgid "" "Some G/M-code commands, including temperature control and others, are not " @@ -12052,6 +11538,25 @@ msgstr "" "ottenere un output compatibile. La versione \"No extrusion\" evita che " "PrusaSlicer non esporti alcun valore." +#: src/slic3r/GUI/ConfigWizard.cpp:2696 +msgid "Some Printers were uninstalled." +msgstr "Alcune stampanti sono state disinstallate." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some SLA materials were uninstalled." +msgstr "Alcuni materiali SLA sono stati disinstallati." + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +msgid "" +"Some fields are too long to fit. Right mouse click reveals the full text." +msgstr "" +"Alcuni campi sono troppo lunghi per adattarsi. Cliccando con il tasto destro " +"del mouse si visualizza il testo completo." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some filaments were uninstalled." +msgstr "Alcuni filamenti sono stati disinstallati." + #: src/slic3r/GUI/GLCanvas3D.cpp:6370 msgid "Some objects are not visible during editing." msgstr "Alcuni oggetti non sono visibili durante la modifica." @@ -12101,14 +11606,6 @@ msgstr "" "Alcune stampanti o setup di stampanti possono riscontrare difficoltà a " "stampare con l'altezza layer variabile. Attivato come predefinito." -#: src/slic3r/GUI/ConfigWizard.cpp:2696 -msgid "Some Printers were uninstalled." -msgstr "Alcune stampanti sono state disinstallate." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some SLA materials were uninstalled." -msgstr "Alcuni materiali SLA sono stati disinstallati." - #: src/slic3r/GUI/GLCanvas3D.cpp:4041 msgid "Spacing" msgstr "Spaziatura " @@ -12276,14 +11773,14 @@ msgstr "Velocità:" msgid "Sphere" msgstr "Sfera" -#: src/libslic3r/PrintConfig.cpp:2381 -msgid "Spiral vase" -msgstr "Vaso a spirale" - #: src/slic3r/GUI/ConfigManipulation.cpp:91 msgid "Spiral Vase" msgstr "Vaso a spirale" +#: src/libslic3r/PrintConfig.cpp:2381 +msgid "Spiral vase" +msgstr "Vaso a spirale" + #: src/slic3r/GUI/GUI_Factories.cpp:944 src/slic3r/GUI/GUI_Factories.cpp:954 #: src/slic3r/GUI/GUI_Factories.cpp:975 src/libslic3r/PrintConfig.cpp:4400 msgid "Split" @@ -12307,22 +11804,22 @@ msgstr "Dividi l'oggetto selezionato in singoli oggetti" msgid "Split the selected object into individual parts" msgstr "Dividi l'oggetto selezionato in parti individuali" -#: src/slic3r/GUI/GLCanvas3D.cpp:4565 -msgid "Split to objects" -msgstr "Dividi in oggetti" - #: src/slic3r/GUI/Plater.cpp:3095 msgid "Split to Objects" msgstr "Dividi in oggetti" -#: src/slic3r/GUI/GLCanvas3D.cpp:4575 -msgid "Split to parts" -msgstr "Dividi in parti" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2008 msgid "Split to Parts" msgstr "Dividi in parti" +#: src/slic3r/GUI/GLCanvas3D.cpp:4565 +msgid "Split to objects" +msgstr "Dividi in oggetti" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4575 +msgid "Split to parts" +msgstr "Dividi in parti" + #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:66 #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:132 msgid "Split triangles" @@ -12350,6 +11847,12 @@ msgstr "Standard" msgid "Stars" msgstr "Stelle" +#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 +#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 +#: src/libslic3r/PrintConfig.cpp:2415 +msgid "Start G-code" +msgstr "G-code iniziale" + #: src/slic3r/GUI/MainFrame.cpp:1142 msgid "Start a new project" msgstr "Inizia un nuovo progetto" @@ -12358,12 +11861,6 @@ msgstr "Inizia un nuovo progetto" msgid "Start at height" msgstr "Inizia all'altezza" -#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 -#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 -#: src/libslic3r/PrintConfig.cpp:2415 -msgid "Start G-code" -msgstr "G-code iniziale" - #: src/slic3r/GUI/MainFrame.cpp:1293 msgid "Start new slicing process" msgstr "Avvia un nuovo processo di slicing" @@ -12421,10 +11918,6 @@ msgstr "Stato:" msgid "Stealth" msgstr "Silenzioso" -#: src/slic3r/GUI/Plater.cpp:1435 -msgid "stealth mode" -msgstr "modalità silenziosa" - #: src/slic3r/GUI/GCodeViewer.cpp:3755 msgid "Stealth mode" msgstr "Modalità silenziosa" @@ -12464,22 +11957,6 @@ msgstr "" "Smontato correttamente. Il dispositivo %s(%s) può ora essere rimosso dal " "computer in sicurezza." -#: src/slic3r/GUI/PresetHints.cpp:181 -msgid "support" -msgstr "supporto" - -#: src/libslic3r/PrintConfig.cpp:3517 -msgid "Support base diameter" -msgstr "Diametro della base del supporto" - -#: src/libslic3r/PrintConfig.cpp:3527 -msgid "Support base height" -msgstr "Altezza della base del supporto" - -#: src/libslic3r/PrintConfig.cpp:3536 -msgid "Support base safety distance" -msgstr "Distanza di sicurezza base supporto" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Support Blocker" msgstr "Blocco Supporto" @@ -12496,14 +11973,22 @@ msgstr "Rinforzo Supporto" msgid "Support Generator" msgstr "Generatore Supporti" +#: src/libslic3r/PrintConfig.cpp:3517 +msgid "Support base diameter" +msgstr "Diametro della base del supporto" + +#: src/libslic3r/PrintConfig.cpp:3527 +msgid "Support base height" +msgstr "Altezza della base del supporto" + +#: src/libslic3r/PrintConfig.cpp:3536 +msgid "Support base safety distance" +msgstr "Distanza di sicurezza base supporto" + #: src/slic3r/GUI/Tab.cpp:4599 msgid "Support head" msgstr "Testa supporto" -#: src/slic3r/GUI/PresetHints.cpp:183 -msgid "support interface" -msgstr "interfaccia supporto" - #: src/slic3r/GUI/GUI_Factories.cpp:56 src/slic3r/GUI/GUI_Factories.cpp:131 #: src/slic3r/GUI/GUI_Preview.cpp:249 src/slic3r/GUI/Tab.cpp:1550 #: src/slic3r/GUI/Tab.cpp:1552 src/libslic3r/ExtrusionEntity.cpp:328 @@ -12589,10 +12074,6 @@ msgstr "Edita punti di supporto" msgid "Supports" msgstr "Supporti" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "supports and pad" -msgstr "supporti e pad" - #: src/libslic3r/PrintConfig.cpp:1596 msgid "Supports remaining times" msgstr "Supporto Tempo residuo" @@ -12625,10 +12106,6 @@ msgstr "" msgid "Suppress to open hyperlink in browser" msgstr "Elimina per aprire il collegamento nel browser" -#: src/slic3r/GUI/MainFrame.cpp:1661 -msgid "SVG" -msgstr "SVG" - #: src/slic3r/GUI/Mouse3DController.cpp:508 msgid "Swap Y/Z axes" msgstr "Inverti assi Y/Z" @@ -12650,10 +12127,6 @@ msgstr "Passa il codice a Cambio colore (%1%) per:" msgid "Switch to 3D" msgstr "Passa a 3D" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 -msgid "Switch to editing mode" -msgstr "Passa alla modalità modifica" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:113 msgid "Switch to Preview" msgstr "Passa ad Anteprima" @@ -12662,6 +12135,10 @@ msgstr "Passa ad Anteprima" msgid "Switch to Settings" msgstr "Passa a Impostazioni" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 +msgid "Switch to editing mode" +msgstr "Passa alla modalità modifica" + #: src/slic3r/GUI/wxExtensions.cpp:644 #, c-format, boost-format msgid "Switch to the %s mode" @@ -12702,10 +12179,6 @@ msgstr "" "\n" "Procedere?" -#: src/slic3r/GUI/Tab.cpp:1413 -msgid "symbolic profile name" -msgstr "nome simbolico profilo" - #: src/libslic3r/PrintConfig.cpp:2761 msgid "" "Synchronize support layers with the object print layers. This is useful with " @@ -12722,14 +12195,14 @@ msgstr "Sincronizza con i layer dell'oggetto" msgid "System &Info" msgstr "&Info di Sistema" -#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 -msgid "System info sent successfully. Thank you." -msgstr "Informazioni di sistema inviate correttamente. Grazie." - #: src/slic3r/GUI/SysInfoDialog.cpp:84 msgid "System Information" msgstr "Informazioni di sistema" +#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 +msgid "System info sent successfully. Thank you." +msgstr "Informazioni di sistema inviate correttamente. Grazie." + #: src/slic3r/GUI/PresetComboBoxes.cpp:249 #: src/slic3r/GUI/PresetComboBoxes.cpp:287 #: src/slic3r/GUI/PresetComboBoxes.cpp:794 @@ -12815,6 +12288,147 @@ msgstr "" "Se il dispositivo è connesso, premi il pulsante Reset vicino al connettore " "USB ..." +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 +msgid "" +"The SLA archive doesn't contain any presets. Please activate some SLA " +"printer preset first before importing that SLA archive." +msgstr "" +"L'archivio SLA non contiene alcun preset. Per favore attiva qualche preset " +"della stampante SLA prima di importare quell'archivio SLA." + +#: src/slic3r/GUI/ConfigManipulation.cpp:82 +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 "" +"La modalità Vaso a spirale necessita:\n" +"-un solo perimetro\n" +"-nessun layer solido superiore\n" +"-densità riempimento 0%\n" +"-nessun materiale di supporto\n" +"-Mantieni spessore guscio verticale attivo\n" +"-Rileva perimetri sottili disattivo" + +#: src/libslic3r/Print.cpp:469 +msgid "" +"The Spiral Vase option can only be used when printing single material " +"objects." +msgstr "" +"L'opzione Vaso a Spirale può essere usata solo durante la stampa di oggetti " +"in materiale singolo." + +#: src/libslic3r/Print.cpp:494 +msgid "" +"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." +msgstr "" +"La Torre di Pulitura attualmente non supporta la volumetrica E " +"(use_volumetric_e=0)." + +#: src/slic3r/GUI/ConfigManipulation.cpp:121 +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 di Pulitura attualmente è compatibile con i supporti non solubili " +"solamente se questi sono stampati con l'attuale estrusore senza l'innesco di " +"un cambio strumento. (entrambi support_material_extruder e " +"support_material_interface_extruder devono essere impostati a 0)." + +#: src/libslic3r/Print.cpp:598 +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)." +msgstr "" +"La Torre di Pulitura attualmente è compatibile con i supporti non solubili " +"solamente se questi sono stampati con l'attuale estrusore senza l'innesco di " +"un cambio strumento. (entrambi support_material_extruder e " +"support_material_interface_extruder devono essere impostati a 0)." + +#: src/libslic3r/Print.cpp:496 +msgid "" +"The Wipe Tower is currently not supported for multimaterial sequential " +"prints." +msgstr "" +"La Torre di pulitura non è al momento supportata per stampe multi-material " +"sequenziali." + +#: src/libslic3r/Print.cpp:488 +msgid "" +"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." +msgstr "" +"La Torre di pulitura è al momento supportata solo da varianti G-code Marlin, " +"RepRap/Sprinter, RepRapFirmware e Repetier." + +#: src/libslic3r/Print.cpp:490 +msgid "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." +msgstr "" +"Attualmente la Torre di pulitura è supportata solo con l'indirizzamento " +"relativo dell'estrusore (use_relative_e_distances = 1)." + +#: src/libslic3r/Print.cpp:519 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"over an equal number of raft layers" +msgstr "" +"La Torre di pulitura è supportata con oggetti multipli solo se questi " +"vengono stampati sullo stesso numero di layer di raft" + +#: src/libslic3r/Print.cpp:522 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"with the same support_material_contact_distance" +msgstr "" +"La Torre di pulitura è supportata con oggetti multipli solo se questi " +"vengono stampati sullo stesso support_material_contact_distance" + +#: src/libslic3r/Print.cpp:524 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are sliced " +"equally." +msgstr "" +"La Torre di Pulitura è supportata con oggetti multipli solo se questi sono " +"processati allo stesso modo." + +#: src/libslic3r/Print.cpp:517 +msgid "" +"The Wipe Tower is only supported for multiple objects if they have equal " +"layer heights" +msgstr "" +"La Torre di pulitura è supportata con oggetti multipli solo se questi hanno " +"la stessa altezza layer" + +#: src/slic3r/GUI/Tab.cpp:3005 +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 "" +"La funzione Pulitura non è disponibile quando si usa la modalità Retrazione " +"Firmware.\n" +"\n" +"Devo disattivarla per poter abilitare la Retrazione Firmware?" + +#: src/libslic3r/Print.cpp:537 +msgid "" +"The Wipe tower is only supported if all objects have the same variable layer " +"height" +msgstr "" +"La Torre di Pulitura è supportata solo se tutti gli oggetti hanno la stessa " +"altezza layer variabile" + #: src/slic3r/GUI/GUI_App.cpp:957 #, boost-format msgid "" @@ -12976,19 +12590,20 @@ msgstr "" "compensare per lo schiacciamento del 1° layer, anche noto come effetto Zampa " "d'elefante." -#: src/slic3r/GUI/Plater.cpp:5717 -msgid "The following characters are not allowed by a FAT file system:" -msgstr "I seguenti caratteri non sono permessi da un file system FAT:" - -#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 -msgid "the following characters are not allowed:" -msgstr "non sono permessi i seguenti caratteri:" - #: src/slic3r/GUI/ConfigWizard.cpp:2459 msgid "The following FFF printer models have no filament selected:" msgstr "" "I seguenti modelli di stampante FFF non hanno nessun filamento selezionato:" +#: src/slic3r/GUI/ConfigWizard.cpp:2477 +msgid "The following SLA printer models have no materials selected:" +msgstr "" +"I seguenti modelli di stampante SLA non hanno nessun filamento selezionato:" + +#: src/slic3r/GUI/Plater.cpp:5717 +msgid "The following characters are not allowed by a FAT file system:" +msgstr "I seguenti caratteri non sono permessi da un file system FAT:" + #: src/slic3r/GUI/Tab.cpp:1842 #, c-format, boost-format msgid "" @@ -13045,15 +12660,6 @@ msgstr "" "Le seguenti scorciatoie sono applicabili quando il gizmo specificato è " "attivo" -#: src/slic3r/GUI/ConfigWizard.cpp:2477 -msgid "The following SLA printer models have no materials selected:" -msgstr "" -"I seguenti modelli di stampante SLA non hanno nessun filamento selezionato:" - -#: src/slic3r/GUI/SavePresetDialog.cpp:110 -msgid "the following suffix is not allowed:" -msgstr "il seguente suffisso non è permesso:" - #: src/slic3r/GUI/GUI.cpp:327 msgid "The following values were substituted:" msgstr "I seguenti valori sono stati sostituiti:" @@ -13379,6 +12985,15 @@ msgstr "" "Il progetto selezionato non è più disponibile.\n" "Vuoi rimuoverlo dall'elenco dei progetti recenti?" +#: src/slic3r/GUI/DoubleSlider.cpp:1408 +msgid "" +"The sequential print is on.\n" +"It's impossible to apply any custom G-code for objects printing sequentually." +msgstr "" +"La stampa sequenziale è attiva.\n" +"È impossibile applicare qualsiasi G-code personalizzato per gli oggetti che " +"vengono stampati in sequenza." + #: src/slic3r/GUI/DoubleSlider.cpp:1440 msgid "" "The sequential print is on.\n" @@ -13391,15 +13006,6 @@ msgstr "" "vengono stampati in sequenza.\n" "Questo codice non sarà processato durante la generazione del G-code." -#: src/slic3r/GUI/DoubleSlider.cpp:1408 -msgid "" -"The sequential print is on.\n" -"It's impossible to apply any custom G-code for objects printing sequentually." -msgstr "" -"La stampa sequenziale è attiva.\n" -"È impossibile applicare qualsiasi G-code personalizzato per gli oggetti che " -"vengono stampati in sequenza." - #: src/slic3r/GUI/ConfigWizard.cpp:1287 msgid "The size of the object can be specified in inches" msgstr "La dimensione dell'oggetto può essere specificata in pollici" @@ -13408,14 +13014,6 @@ msgstr "La dimensione dell'oggetto può essere specificata in pollici" msgid "The size of the object is zero" msgstr "La dimensione dell'oggetto è zero" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 -msgid "" -"The SLA archive doesn't contain any presets. Please activate some SLA " -"printer preset first before importing that SLA archive." -msgstr "" -"L'archivio SLA non contiene alcun preset. Per favore attiva qualche preset " -"della stampante SLA prima di importare quell'archivio SLA." - #: src/libslic3r/PrintConfig.cpp:3671 msgid "" "The slope of the pad wall relative to the bed plane. 90 degrees means " @@ -13439,32 +13037,6 @@ msgid "The speed for retractions (it only applies to the extruder motor)." msgstr "" "Velocità delle retrazioni (si applica solamente al motore dell'estrusore)." -#: src/slic3r/GUI/ConfigManipulation.cpp:82 -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 "" -"La modalità Vaso a spirale necessita:\n" -"-un solo perimetro\n" -"-nessun layer solido superiore\n" -"-densità riempimento 0%\n" -"-nessun materiale di supporto\n" -"-Mantieni spessore guscio verticale attivo\n" -"-Rileva perimetri sottili disattivo" - -#: src/libslic3r/Print.cpp:469 -msgid "" -"The Spiral Vase option can only be used when printing single material " -"objects." -msgstr "" -"L'opzione Vaso a Spirale può essere usata solo durante la stampa di oggetti " -"in materiale singolo." - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:630 msgid "The supplied name is empty. It can't be saved." msgstr "Il nome fornito è vuoto. Non può essere salvato." @@ -13518,105 +13090,6 @@ msgstr "" "support_material_contact_distance sarà usato per entrambe le distanze di " "contatto Z superiore e inferiore." -#: src/slic3r/GUI/Tab.cpp:3005 -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 "" -"La funzione Pulitura non è disponibile quando si usa la modalità Retrazione " -"Firmware.\n" -"\n" -"Devo disattivarla per poter abilitare la Retrazione Firmware?" - -#: src/libslic3r/Print.cpp:494 -msgid "" -"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." -msgstr "" -"La Torre di Pulitura attualmente non supporta la volumetrica E " -"(use_volumetric_e=0)." - -#: src/slic3r/GUI/ConfigManipulation.cpp:121 -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 di Pulitura attualmente è compatibile con i supporti non solubili " -"solamente se questi sono stampati con l'attuale estrusore senza l'innesco di " -"un cambio strumento. (entrambi support_material_extruder e " -"support_material_interface_extruder devono essere impostati a 0)." - -#: src/libslic3r/Print.cpp:598 -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)." -msgstr "" -"La Torre di Pulitura attualmente è compatibile con i supporti non solubili " -"solamente se questi sono stampati con l'attuale estrusore senza l'innesco di " -"un cambio strumento. (entrambi support_material_extruder e " -"support_material_interface_extruder devono essere impostati a 0)." - -#: src/libslic3r/Print.cpp:496 -msgid "" -"The Wipe Tower is currently not supported for multimaterial sequential " -"prints." -msgstr "" -"La Torre di pulitura non è al momento supportata per stampe multi-material " -"sequenziali." - -#: src/libslic3r/Print.cpp:488 -msgid "" -"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " -"RepRapFirmware and Repetier G-code flavors." -msgstr "" -"La Torre di pulitura è al momento supportata solo da varianti G-code Marlin, " -"RepRap/Sprinter, RepRapFirmware e Repetier." - -#: src/libslic3r/Print.cpp:490 -msgid "" -"The Wipe Tower is currently only supported with the relative extruder " -"addressing (use_relative_e_distances=1)." -msgstr "" -"Attualmente la Torre di pulitura è supportata solo con l'indirizzamento " -"relativo dell'estrusore (use_relative_e_distances = 1)." - -#: src/libslic3r/Print.cpp:519 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"over an equal number of raft layers" -msgstr "" -"La Torre di pulitura è supportata con oggetti multipli solo se questi " -"vengono stampati sullo stesso numero di layer di raft" - -#: src/libslic3r/Print.cpp:522 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"with the same support_material_contact_distance" -msgstr "" -"La Torre di pulitura è supportata con oggetti multipli solo se questi " -"vengono stampati sullo stesso support_material_contact_distance" - -#: src/libslic3r/Print.cpp:524 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are sliced " -"equally." -msgstr "" -"La Torre di Pulitura è supportata con oggetti multipli solo se questi sono " -"processati allo stesso modo." - -#: src/libslic3r/Print.cpp:517 -msgid "" -"The Wipe Tower is only supported for multiple objects if they have equal " -"layer heights" -msgstr "" -"La Torre di pulitura è supportata con oggetti multipli solo se questi hanno " -"la stessa altezza layer" - #: src/libslic3r/Print.cpp:482 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " @@ -13625,14 +13098,6 @@ msgstr "" "La torre di pulitura è supportata solo se tutti gli estrusori hanno l'ugello " "con lo stesso diametro ed utilizzano filamenti con lo stesso diametro." -#: src/libslic3r/Print.cpp:537 -msgid "" -"The Wipe tower is only supported if all objects have the same variable layer " -"height" -msgstr "" -"La Torre di Pulitura è supportata solo se tutti gli oggetti hanno la stessa " -"altezza layer variabile" - #: src/slic3r/GUI/Plater.cpp:4096 msgid "There are active warnings concerning sliced models:" msgstr "Sono presenti avvisi attivi relativi ai modelli processati:" @@ -13684,6 +13149,18 @@ msgstr "Ponti spessi" msgid "This %s version: %s" msgstr "%s versione: %s" +#: src/libslic3r/PrintConfig.cpp:2433 +msgid "This G-code will be used as a code for the color change" +msgstr "Questo G-code verrà utilizzato come codice per il cambio colore" + +#: src/libslic3r/PrintConfig.cpp:2442 +msgid "This G-code will be used as a code for the pause print" +msgstr "Questo G-code sarà usato come codice per la pausa di stampa" + +#: src/libslic3r/PrintConfig.cpp:2451 +msgid "This G-code will be used as a custom code" +msgstr "Questo G-code verrà utilizzato come codice personalizzato" + #: src/slic3r/GUI/DoubleSlider.cpp:2087 src/slic3r/GUI/Tab.cpp:1322 msgid "" "This action is not revertible.\n" @@ -13956,18 +13433,6 @@ msgstr "" "Questo contrassegno farà spostare l'ugello durante la retrazione in modo da " "minimizzare il possibile grumo con estrusori che trasudano." -#: src/libslic3r/PrintConfig.cpp:2433 -msgid "This G-code will be used as a code for the color change" -msgstr "Questo G-code verrà utilizzato come codice per il cambio colore" - -#: src/libslic3r/PrintConfig.cpp:2442 -msgid "This G-code will be used as a code for the pause print" -msgstr "Questo G-code sarà usato come codice per la pausa di stampa" - -#: src/libslic3r/PrintConfig.cpp:2451 -msgid "This G-code will be used as a custom code" -msgstr "Questo G-code verrà utilizzato come codice personalizzato" - #: src/slic3r/GUI/Tab.cpp:1351 msgid "This is a default preset." msgstr "Questo è un preset predefinito." @@ -14406,10 +13871,6 @@ msgstr "" "affidabili con materiali flessibili che potrebbero richiedere più tempo per " "tornare alle dimensioni originali." -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "to" -msgstr "a" - #: src/slic3r/GUI/Tab.cpp:1365 msgid "To do that please specify a new name for the preset." msgstr "" @@ -14446,10 +13907,6 @@ msgstr "" msgid "Toggle %c axis mirroring" msgstr "Attiva / disattiva il mirroring dell'asse %c" -#: src/libslic3r/miniz_extension.cpp:93 -msgid "too many files" -msgstr "troppi file" - #: src/libslic3r/SLAPrintSteps.cpp:426 msgid "Too many overlapping holes." msgstr "Troppi fori sovrapposti." @@ -14503,6 +13960,10 @@ msgstr "" "Suggerimento per lo spessore del guscio Superiore / Inferiore: non " "disponibile a causa di un'altezza dello strato non valida." +#: src/slic3r/GUI/MainFrame.cpp:1118 +msgid "Top View" +msgstr "Vista superiore" + #: src/libslic3r/PrintConfig.cpp:2548 msgid "Top contact Z distance" msgstr "Distanza di contatto Z superiore" @@ -14524,10 +13985,6 @@ msgstr "La parte superiore è aperta." msgid "Top shell is %1% mm thick for layer height %2% mm." msgstr "Il guscio superiore è spesso %1% mm per l'altezza layer %2% mm." -#: src/slic3r/GUI/PresetHints.cpp:178 -msgid "top solid infill" -msgstr "riempimento solido superiore" - #: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:323 #: src/libslic3r/ExtrusionEntity.cpp:350 src/libslic3r/PrintConfig.cpp:2839 #: src/libslic3r/PrintConfig.cpp:2852 @@ -14538,10 +13995,6 @@ msgstr "Riempimento solido superiore" msgid "Top solid layers" msgstr "Layer solidi superiori" -#: src/slic3r/GUI/MainFrame.cpp:1118 -msgid "Top View" -msgstr "Vista superiore" - #: src/libslic3r/PrintConfig.cpp:1550 msgid "Topmost surface only" msgstr "Solo superficie superiore più alta" @@ -14623,6 +14076,33 @@ msgstr "Tipologia stampante." msgid "Type:" msgstr "Tipo:" +#: src/slic3r/GUI/Tab.cpp:4257 +msgid "UNLOCKED LOCK" +msgstr "LUCCHETTO APERTO" + +#: src/slic3r/GUI/Tab.cpp:4283 +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 "" +"L'icona del LUCCHETTO APERTO indica che alcune impostazioni sono state " +"modificate e non sono uguali ai valori di sistema (o predefinite) per il " +"gruppo di opzioni corrente.\n" +"Clicca qui per reimpostare tutte le impostazioni del gruppo corrente ai " +"valori di sistema (o predefiniti)." + +#: src/slic3r/GUI/Tab.cpp:4298 +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 "" +"L'icona del LUCCHETTO APERTO indica che il valore è stato cambiato e non è " +"uguale al valore di sistema (o predefinito). Clicca per reimpostare il " +"valore corrente al valore di sistema (o predefinito)." + #: src/libslic3r/SLAPrintSteps.cpp:441 msgid "Unable to drill the current configuration of holes into the model." msgstr "Impossibile forare il modello con la configurazione attuale dei fori." @@ -14666,10 +14146,6 @@ msgstr "Gruppo non definito" msgid "Undefined" msgstr "Indefinito" -#: src/libslic3r/miniz_extension.cpp:91 -msgid "undefined error" -msgstr "errore non definito" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:294 msgid "Underflow" msgstr "Underflow" @@ -14691,6 +14167,10 @@ msgstr[1] "Annulla %1$d Azioni" msgid "Undo / Redo is processing" msgstr "Annulla / Ripeti in lavorazione" +#: src/slic3r/GUI/GLCanvas3D.cpp:3916 +msgid "Undo History" +msgstr "Cronologia Annulla" + #: src/slic3r/GUI/NotificationManager.hpp:772 msgid "Undo desktop integration failed." msgstr "Annullamento integrazione desktop non riuscito." @@ -14699,10 +14179,6 @@ msgstr "Annullamento integrazione desktop non riuscito." msgid "Undo desktop integration was successful." msgstr "Annullamento integrazione desktop riuscita." -#: src/slic3r/GUI/GLCanvas3D.cpp:3916 -msgid "Undo History" -msgstr "Cronologia Annulla" - #: resources/data/hints.ini: [hint:Undo/redo history] msgid "" "Undo/redo history\n" @@ -14714,10 +14190,6 @@ msgstr "" "Annulla/Ripeti per vedere la cronologia delle modifiche e per annullare " "o ripetere più azioni contemporaneamente?" -#: src/libslic3r/miniz_extension.cpp:115 -msgid "unexpected decompressed size" -msgstr "dimensione decompressa imprevista" - #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:28 #: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:317 msgid "Unknown" @@ -14735,10 +14207,6 @@ msgid "Unknown error occured during exporting G-code." msgstr "" "Si è verificato un errore sconosciuto durante l'esportazione del G-code." -#: src/slic3r/GUI/WipeTowerDialog.cpp:308 -msgid "unloaded" -msgstr "scaricato" - #: src/libslic3r/PrintConfig.cpp:908 msgid "Unloading speed" msgstr "Velocità di scaricamento" @@ -14747,33 +14215,6 @@ msgstr "Velocità di scaricamento" msgid "Unloading speed at the start" msgstr "Velocità iniziale di scaricamento" -#: src/slic3r/GUI/Tab.cpp:4257 -msgid "UNLOCKED LOCK" -msgstr "LUCCHETTO APERTO" - -#: src/slic3r/GUI/Tab.cpp:4283 -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 "" -"L'icona del LUCCHETTO APERTO indica che alcune impostazioni sono state " -"modificate e non sono uguali ai valori di sistema (o predefinite) per il " -"gruppo di opzioni corrente.\n" -"Clicca qui per reimpostare tutte le impostazioni del gruppo corrente ai " -"valori di sistema (o predefiniti)." - -#: src/slic3r/GUI/Tab.cpp:4298 -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 "" -"L'icona del LUCCHETTO APERTO indica che il valore è stato cambiato e non è " -"uguale al valore di sistema (o predefinito). Clicca per reimpostare il " -"valore corrente al valore di sistema (o predefinito)." - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 msgid "Unsaved Changes" msgstr "Modifiche non salvate" @@ -14782,26 +14223,6 @@ msgstr "Modifiche non salvate" msgid "Unselect gizmo or clear selection" msgstr "Deseleziona gizmo o pulisci selezione" -#: src/libslic3r/miniz_extension.cpp:119 -msgid "unsupported central directory size" -msgstr "dimensione della directory centrale non supportata" - -#: src/libslic3r/miniz_extension.cpp:99 -msgid "unsupported encryption" -msgstr "criptaggio non supportato" - -#: src/libslic3r/miniz_extension.cpp:101 -msgid "unsupported feature" -msgstr "caratteristica non supportata" - -#: src/libslic3r/miniz_extension.cpp:97 -msgid "unsupported method" -msgstr "metodo non supportato" - -#: src/libslic3r/miniz_extension.cpp:109 -msgid "unsupported multidisk archive" -msgstr "archivio multidisk non supportato" - #: src/slic3r/GUI/OpenGLManager.cpp:265 msgid "Unsupported OpenGL version" msgstr "Versione OpenGL non supportata" @@ -14815,10 +14236,6 @@ msgstr "Selezione non supportata" msgid "Untitled" msgstr "Senza titolo" -#: src/slic3r/GUI/GCodeViewer.cpp:3176 -msgid "up to" -msgstr "fino a" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 msgid "Update available" msgstr "Aggiornamento disponibile" @@ -14888,6 +14305,10 @@ msgstr "" "Usare \"Pari-dispari\" per i modelli di aerei 3DLabPrint. Usare \"Chiudi fori" "\" per chiudere tutti i fori del modello." +#: src/slic3r/GUI/Preferences.cpp:268 +msgid "Use Retina resolution for the 3D scene" +msgstr "Usa risoluzione Retina per la scena 3D" + #: src/slic3r/GUI/DoubleSlider.cpp:1615 src/slic3r/GUI/GUI_Factories.cpp:787 msgid "Use another extruder" msgstr "Usa un altro estrusore" @@ -14941,10 +14362,6 @@ msgstr "Usa la visuale prospettica" msgid "Use relative E distances" msgstr "Usa distanze E relative" -#: src/slic3r/GUI/Preferences.cpp:268 -msgid "Use Retina resolution for the 3D scene" -msgstr "Usa risoluzione Retina per la scena 3D" - #: src/slic3r/GUI/Preferences.cpp:507 msgid "Use system menu for application" msgstr "Utilizzare il menu di sistema per l'applicazione" @@ -14970,15 +14387,6 @@ msgstr "" msgid "Use volumetric E" msgstr "Utilizza E volumetrico" -#: src/slic3r/GUI/DoubleSlider.cpp:1634 -msgid "used" -msgstr "usato" - -#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 -#: src/slic3r/GUI/GCodeViewer.cpp:3562 -msgid "Used filament" -msgstr "Filamento usato" - #: src/slic3r/GUI/Plater.cpp:296 src/slic3r/GUI/Plater.cpp:1376 msgid "Used Filament (g)" msgstr "Filamento usato (g)" @@ -15007,6 +14415,11 @@ msgstr "Materiale Usato (ml)" msgid "Used Material (unit)" msgstr "Materiale usato (unità)" +#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 +#: src/slic3r/GUI/GCodeViewer.cpp:3562 +msgid "Used filament" +msgstr "Filamento usato" + #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:25 src/libslic3r/PrintConfig.cpp:317 msgid "User" msgstr "Utente" @@ -15017,10 +14430,6 @@ msgstr "Utente" msgid "User presets" msgstr "Preset utente" -#: src/libslic3r/miniz_extension.cpp:149 -msgid "validation failed" -msgstr "convalida non riuscita" - #: src/slic3r/GUI/ButtonsDescription.cpp:57 msgid "Value is the same as the system value" msgstr "Valore uguale a quello di sistema" @@ -15041,6 +14450,11 @@ msgstr "I valori in questa colonna sono per la modalità Normale" msgid "Values in this column are for Stealth mode" msgstr "I valori in questa colonna sono per la modalità Silenziosa" +#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 +msgid "Variable layer height" +msgstr "Altezza layer variabile" + #: resources/data/hints.ini: [hint:Variable layer height] msgid "" "Variable layer height\n" @@ -15054,11 +14468,6 @@ msgstr "" "strumentoAltezza layer variabile. (Non disponibile per le stampanti " "SLA)." -#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 -msgid "Variable layer height" -msgstr "Altezza layer variabile" - #: src/slic3r/GUI/GLCanvas3D.cpp:1273 msgid "Variable layer height - Adaptive" msgstr "Altezza layer variabile - Adattivo" @@ -15075,14 +14484,6 @@ msgstr "Altezza layer variabile - Ripristina" msgid "Variable layer height - Smooth all" msgstr "Altezza layer variabile - Leviga tutto" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "variants" -msgstr "varianti" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 -msgid "vendor" -msgstr "produttore" - #: src/slic3r/GUI/ConfigWizard.cpp:642 msgid "Vendor:" msgstr "Fornitore:" @@ -15096,18 +14497,14 @@ msgstr "G-code verboso" msgid "Version" msgstr "Versione" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 -msgid "version" -msgstr "versione" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 +msgid "Vertical Slider" +msgstr "Cursore di scorrimento verticale" #: src/slic3r/GUI/Tab.cpp:1457 msgid "Vertical shells" msgstr "Gusci verticali" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 -msgid "Vertical Slider" -msgstr "Cursore di scorrimento verticale" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:218 #: src/slic3r/GUI/KBShortcutsDialog.cpp:222 msgid "Vertical slider - Move active thumb Down" @@ -15185,6 +14582,39 @@ msgstr "Flusso volumetrico (mm³/s)" msgid "Volumetric speed" msgstr "Velocità volumetrica" +#: src/slic3r/GUI/NotificationManager.cpp:1459 +#: src/slic3r/GUI/NotificationManager.cpp:1486 +#: src/slic3r/GUI/NotificationManager.cpp:1494 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +msgid "WARNING:" +msgstr "ATTENZIONE:" + +#: src/slic3r/GUI/Tab.cpp:4264 +msgid "WHITE BULLET" +msgstr "PALLINO BIANCO" + +#: src/slic3r/GUI/Tab.cpp:4286 +msgid "WHITE BULLET icon indicates a non system (or non default) preset." +msgstr "" +"L'icona a forma di PALLINO BIANCO indica un preset non di sistema (o non " +"predefinito)." + +#: src/slic3r/GUI/Tab.cpp:4289 +msgid "" +"WHITE BULLET icon indicates that the settings are the same as in the last " +"saved preset for the current option group." +msgstr "" +"L'icona a forma di PALLINO BIANCO indica che le impostazioni corrispondono " +"agli ultimi preset salvati per il gruppo di opzioni corrente." + +#: src/slic3r/GUI/Tab.cpp:4304 +msgid "" +"WHITE BULLET icon indicates that the value is the same as in the last saved " +"preset." +msgstr "" +"L'icona a forma di PALLINO BIANCO indica che il valore è lo stesso " +"dell'ultimo preset salvato." + #: src/libslic3r/PrintConfig.cpp:3740 msgid "Wall thickness" msgstr "Spessore parete" @@ -15197,13 +14627,6 @@ msgstr "Spessore parete" msgid "Warning" msgstr "Attenzione" -#: src/slic3r/GUI/NotificationManager.cpp:1459 -#: src/slic3r/GUI/NotificationManager.cpp:1486 -#: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 -msgid "WARNING:" -msgstr "ATTENZIONE:" - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:590 #, boost-format msgid "" @@ -15260,10 +14683,6 @@ msgstr "" "progetto sull'applicazione, viene mostrata una finestra di dialogo che " "chiede quale azione eseguire sul file da caricare." -#: src/slic3r/GUI/PresetHints.cpp:192 -msgid "when printing" -msgstr "durante la stampa" - #: src/libslic3r/PrintConfig.cpp:530 msgid "" "When printing multi-material objects, this settings will make Slic3r to clip " @@ -15359,32 +14778,6 @@ msgstr "" "l'estrusore spingerà questa quantità addizionale di filamento. Questa " "impostazione è raramente necessaria." -#: src/slic3r/GUI/Tab.cpp:4264 -msgid "WHITE BULLET" -msgstr "PALLINO BIANCO" - -#: src/slic3r/GUI/Tab.cpp:4286 -msgid "WHITE BULLET icon indicates a non system (or non default) preset." -msgstr "" -"L'icona a forma di PALLINO BIANCO indica un preset non di sistema (o non " -"predefinito)." - -#: src/slic3r/GUI/Tab.cpp:4289 -msgid "" -"WHITE BULLET icon indicates that the settings are the same as in the last " -"saved preset for the current option group." -msgstr "" -"L'icona a forma di PALLINO BIANCO indica che le impostazioni corrispondono " -"agli ultimi preset salvati per il gruppo di opzioni corrente." - -#: src/slic3r/GUI/Tab.cpp:4304 -msgid "" -"WHITE BULLET icon indicates that the value is the same as in the last saved " -"preset." -msgstr "" -"L'icona a forma di PALLINO BIANCO indica che il valore è lo stesso " -"dell'ultimo preset salvato." - #: src/slic3r/GUI/Tab.cpp:3999 msgid "Whole word" msgstr "Parola intera" @@ -15430,6 +14823,11 @@ msgstr "" msgid "Wipe" msgstr "Pulitura" +#: src/slic3r/GUI/ConfigManipulation.cpp:126 +#: src/slic3r/GUI/ConfigManipulation.cpp:146 +msgid "Wipe Tower" +msgstr "Torre di pulitura" + #: src/libslic3r/PrintConfig.cpp:3013 msgid "Wipe into this object" msgstr "Pulitura in questo oggetto" @@ -15448,15 +14846,6 @@ msgstr "Opzioni pulitura" msgid "Wipe tower" msgstr "Torre di pulitura" -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "wipe tower" -msgstr "torre di pulitura" - -#: src/slic3r/GUI/ConfigManipulation.cpp:126 -#: src/slic3r/GUI/ConfigManipulation.cpp:146 -msgid "Wipe Tower" -msgstr "Torre di pulitura" - #: src/slic3r/GUI/WipeTowerDialog.cpp:173 msgid "Wipe tower - Purging volume adjustment" msgstr "Torre di pulitura - Regolazione volume di spurgo" @@ -15481,10 +14870,6 @@ msgstr "Angolo di rotazione della torre di pulitura rispetto all'asse X." msgid "Wipe while retracting" msgstr "Pulisci durante la retrazione" -#: src/slic3r/GUI/PresetHints.cpp:193 -msgid "with a volumetric rate" -msgstr "con una portata volumetrica" - #: src/libslic3r/PrintConfig.cpp:2122 msgid "" "With bowden extruders, it may be wise to do some amount of quick retract " @@ -15535,10 +14920,6 @@ msgstr "" "\n" "Gruppo di configurazioni aggiornate:" -#: src/libslic3r/miniz_extension.cpp:151 -msgid "write calledback failed" -msgstr "scrittura richiamo non riuscita" - #: src/libslic3r/PrintConfig.cpp:4306 msgid "Write information about the model to the console." msgstr "Scrivi informazioni sul modello alla console." @@ -15551,6 +14932,10 @@ msgstr "Password errata" msgid "X coordinate of the left front corner of a wipe tower" msgstr "Coordinata X dell'angolo frontale sinistro di una torre di pulitura" +#: src/libslic3r/PrintConfig.cpp:3027 +msgid "XY Size Compensation" +msgstr "Compensazione dimensione XY" + #: src/libslic3r/PrintConfig.cpp:2517 msgid "XY separation between an object and its support" msgstr "Separazione XY tra un oggetto e il suo supporto" @@ -15564,10 +14949,6 @@ msgstr "" "percentuale (ad esempio 50%), verrà calcolato sulla larghezza del perimetro " "esterno." -#: src/libslic3r/PrintConfig.cpp:3027 -msgid "XY Size Compensation" -msgstr "Compensazione dimensione XY" - #: src/libslic3r/PrintConfig.cpp:2976 msgid "Y coordinate of the left front corner of a wipe tower" msgstr "Coordinata Y dell'angolo frontale sinistro di una torre di pulitura" @@ -15628,6 +15009,11 @@ msgstr "" "È possibile inserire qui le note personali. Questo testo verrà aggiunto nei " "commenti iniziali del G-code." +#: src/libslic3r/PrintConfig.cpp:3383 +msgid "You can put your notes regarding the SLA print material here." +msgstr "" +"È possibile inserire qui le proprie note riguardo il materiale di stampa SLA." + #: src/libslic3r/PrintConfig.cpp:874 msgid "You can put your notes regarding the filament here." msgstr "È possibile inserire qui le note riguardanti il filamento." @@ -15636,11 +15022,6 @@ msgstr "È possibile inserire qui le note riguardanti il filamento." msgid "You can put your notes regarding the printer here." msgstr "È possibile inserire qui le note riguardanti la stampante." -#: src/libslic3r/PrintConfig.cpp:3383 -msgid "You can put your notes regarding the SLA print material here." -msgstr "" -"È possibile inserire qui le proprie note riguardo il materiale di stampa SLA." - #: src/libslic3r/PrintConfig.cpp:637 msgid "" "You can set this to a positive value to disable fan at all during the first " @@ -15873,6 +15254,621 @@ msgstr "" "Zoom sull'oggetto selezionato\n" "o tutti gli oggetti in scena, se nessuno è selezionato" +#: src/slic3r/GUI/GCodeViewer.cpp:3182 +msgid "above" +msgstr "sopra" + +#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 +msgid "active" +msgstr "attivo" + +#: src/libslic3r/miniz_extension.cpp:121 +msgid "allocation failed" +msgstr "allocazione fallita" + +#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 +msgid "approximate seconds" +msgstr "secondi approssimativi" + +#: src/libslic3r/miniz_extension.cpp:147 +msgid "archive is too large" +msgstr "l'archivio è troppo grande" + +#: src/slic3r/GUI/MainFrame.cpp:655 +msgid "based on Slic3r" +msgstr "basato su Slic3r" + +#: src/libslic3r/miniz_extension.cpp:141 +msgid "buffer too small" +msgstr "buffer troppo piccolo" + +#: src/slic3r/GUI/PresetHints.cpp:191 +msgid "by the print profile maximum" +msgstr "secondo il massimo del profilo di stampa" + +#: src/libslic3r/miniz_extension.cpp:113 +msgid "compression failed" +msgstr "compressione fallita" + +#: src/slic3r/GUI/DoubleSlider.cpp:1458 +msgid "continue" +msgstr "continua" + +#: src/libslic3r/miniz_extension.cpp:111 +msgid "decompression failed or archive is corrupted" +msgstr "decompressione non riuscita o archivio corrotto" + +#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 +#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 +msgid "default" +msgstr "predefinito" + +#: src/slic3r/GUI/Tab.cpp:1400 +msgid "default SLA material profile" +msgstr "profilo materiale SLA predefinito" + +#: src/slic3r/GUI/Tab.cpp:1404 +msgid "default SLA print profile" +msgstr "profilo di stampa SLA predefinito" + +#: src/slic3r/GUI/GCodeViewer.cpp:3388 +msgid "default color" +msgstr "colore predefinito" + +#: src/slic3r/GUI/Tab.cpp:1386 +msgid "default filament profile" +msgstr "profilo filamento predefinito" + +#: src/slic3r/GUI/Tab.cpp:1383 +msgid "default print profile" +msgstr "profilo di stampa predefinito" + +#: src/slic3r/GUI/Field.cpp:190 +msgid "default value" +msgstr "valore predefinito" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "delete" +msgstr "elimina" + +#: src/slic3r/GUI/Plater.cpp:3652 +msgid "differs from the original file" +msgstr "differisce dal file originale" + +#: src/slic3r/GUI/Plater.cpp:5202 +msgid "does not contain valid gcode." +msgstr "non contiene un g-code valido." + +#: src/slic3r/GUI/PresetHints.cpp:59 +#, boost-format +msgid "except for the first %1% layers." +msgstr "ad eccezione dei primi %1% layer." + +#: src/slic3r/GUI/PresetHints.cpp:61 +msgid "except for the first layer." +msgstr "ad eccezione del primo layer." + +#: src/slic3r/GUI/PresetHints.cpp:170 +msgid "external perimeters" +msgstr "perimetri esterni" + +#: src/libslic3r/miniz_extension.cpp:103 +msgid "failed finding central directory" +msgstr "directory centrale non trovata" + +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +msgid "filament" +msgstr "filamento" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 +msgid "filaments" +msgstr "filamenti" + +#: src/libslic3r/miniz_extension.cpp:131 +msgid "file close failed" +msgstr "chiusura del file fallita" + +#: src/libslic3r/miniz_extension.cpp:125 +msgid "file create failed" +msgstr "generazione del file non riuscita" + +#: src/libslic3r/miniz_extension.cpp:145 +msgid "file not found" +msgstr "file non trovato" + +#: src/libslic3r/miniz_extension.cpp:123 +msgid "file open failed" +msgstr "apertura file non riuscita" + +#: src/libslic3r/miniz_extension.cpp:129 +msgid "file read failed" +msgstr "lettura del file non riuscita" + +#: src/libslic3r/miniz_extension.cpp:133 +msgid "file seek failed" +msgstr "ricerca file fallita" + +#: src/libslic3r/miniz_extension.cpp:135 +msgid "file stat failed" +msgstr "statistica file non riuscita" + +#: src/libslic3r/miniz_extension.cpp:95 +msgid "file too large" +msgstr "file troppo grande" + +#: src/libslic3r/miniz_extension.cpp:127 +msgid "file write failed" +msgstr "scrittura file fallita" + +#: src/slic3r/GUI/PresetHints.cpp:188 +msgid "flow rate is maximized" +msgstr "il flusso viene massimizzato" + +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:4266 +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/GCodeViewer.cpp:3190 +msgid "from" +msgstr "da" + +#: src/slic3r/GUI/Tab.cpp:1412 +msgid "full profile name" +msgstr "nome completo profilo" + +#: src/libslic3r/PrintConfig.cpp:1057 +msgid "g" +msgstr "g" + +#: src/libslic3r/PrintConfig.cpp:1006 +msgid "g/cm³" +msgstr "g/cm³" + +#: src/libslic3r/PrintConfig.cpp:3288 +msgid "g/ml" +msgstr "g/ml" + +#: src/slic3r/GUI/Plater.cpp:4107 +msgid "generated warnings" +msgstr "ha generato avvisi" + +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +msgid "in" +msgstr "in" + +#. TRN Description for "UNLOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4259 +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 che è stata modificata qualche impostazione e non è uguale ai valori " +"di sistema (o predefiniti) del corrente gruppo di opzioni.\n" +"Clicca l'icona LUCCHETTO APERTO per reimpostare tutte le impostazioni del " +"corrente gruppo di opzioni ai valori di sistema (o predefiniti)." + +#. TRN Description for "LOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4255 +msgid "" +"indicates that the settings are the same as the system (or default) values " +"for the current option group" +msgstr "" +"indica che le impostazioni sono uguali ai valori di sistema (o predefiniti) " +"per l'attuale gruppo di opzioni" + +#. TRN Description for "BACK ARROW" +#: src/slic3r/GUI/Tab.cpp:4271 +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 che le impostazioni sono state modificate e non corrispondono " +"all'ultimo preset salvato per l'attuale gruppo opzioni.\n" +"Clicca l'icona FRECCIA INDIETRO per reimpostare all'ultimo preset salvato " +"tutte le impostazioni per il seguente gruppo di opzioni." + +#: src/slic3r/GUI/PresetHints.cpp:174 +msgid "infill" +msgstr "riempimento" + +#: src/libslic3r/miniz_extension.cpp:143 +msgid "internal error" +msgstr "errore interno" + +#: src/libslic3r/miniz_extension.cpp:139 +msgid "invalid filename" +msgstr "nome file non valido" + +#: src/libslic3r/miniz_extension.cpp:107 +msgid "invalid header or archive is corrupted" +msgstr "titolo non valido o archivio corrotto" + +#: src/libslic3r/miniz_extension.cpp:137 +msgid "invalid parameter" +msgstr "parametro non valido" + +#: src/slic3r/GUI/GUI_App.cpp:266 +msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." +msgstr "è basato su Slic3r di Alessandro Ranellucci e la comunità RepRap." + +#. TRN "Slic3r _is licensed under the_ License" +#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 +msgid "is licensed under the" +msgstr "è concesso in licenza ai sensi" + +#: src/libslic3r/PrintConfig.cpp:3281 +msgid "kg" +msgstr "kg" + +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 +#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 +#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 +#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 +#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 +msgid "layers" +msgstr "layer" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:309 +msgid "loaded" +msgstr "caricato" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 +msgid "max PrusaSlicer version" +msgstr "versione PrusaSlicer massima" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 +msgid "min PrusaSlicer version" +msgstr "versione PrusaSlicer minima" + +#: src/libslic3r/PrintConfig.cpp:3274 +msgid "ml" +msgstr "ml" + +#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 +#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 +#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 +#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 +#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 +#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 +#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 +#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 +#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 +#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 +#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 +#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 +#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 +#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 +#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 +#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 +#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 +#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 +#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 +#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 +#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 +#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 +#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 +#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 +#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 +#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 +#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 +#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 +#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 +#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 +#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 +#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 +#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 +#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 +#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 +#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 +#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 +#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 +#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 +#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 +#: src/libslic3r/PrintConfig.cpp:3767 +msgid "mm" +msgstr "mm" + +#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 +#: src/libslic3r/PrintConfig.cpp:2148 +msgid "mm (zero to disable)" +msgstr "mm (imposta a zero per disabilitare)" + +#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 +#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 +#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 +#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 +#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 +#: src/libslic3r/PrintConfig.cpp:2845 +msgid "mm or %" +msgstr "mm o %" + +#: src/libslic3r/PrintConfig.cpp:385 +msgid "mm or % (zero to disable)" +msgstr "mm o % (zero per disattivare)" + +#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 +#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 +#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 +#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 +#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 +#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 +#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 +#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 +#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 +#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 +#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 +msgid "mm/s" +msgstr "mm/s" + +#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 +#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 +#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 +#: src/libslic3r/PrintConfig.cpp:2859 +msgid "mm/s or %" +msgstr "mm/s o %" + +#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 +#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 +#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 +#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 +#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 +msgid "mm/s²" +msgstr "mm/s²" + +#: src/libslic3r/PrintConfig.cpp:2316 +msgid "mm²" +msgstr "mm²" + +#: src/libslic3r/PrintConfig.cpp:957 +msgid "mm³" +msgstr "mm³" + +#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 +#: src/libslic3r/PrintConfig.cpp:1782 +msgid "mm³/s" +msgstr "mm³/s" + +#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 +msgid "mm³/s²" +msgstr "mm³/s²" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "model" +msgstr "modello" + +#: src/slic3r/GUI/GUI_App.cpp:2159 +msgid "modified" +msgstr "modificato" + +#: src/libslic3r/PrintConfig.cpp:3295 +msgid "money/bottle" +msgstr "soldi/bottiglia" + +#: src/libslic3r/PrintConfig.cpp:1047 +msgid "money/kg" +msgstr "soldi/kg" + +#: src/slic3r/GUI/Plater.cpp:1428 +msgid "normal mode" +msgstr "modalità normale" + +#: src/libslic3r/miniz_extension.cpp:105 +msgid "not a ZIP archive" +msgstr "non un archivio ZIP" + +#: src/slic3r/GUI/ConfigWizard.cpp:262 +msgid "nozzle" +msgstr "ugello" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "object" +msgid_plural "objects" +msgstr[0] "oggetto" +msgstr[1] "oggetti" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "objects" +msgstr "oggetti" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 +msgid "of a current Object" +msgstr "di un Oggetto corrente" + +#: src/slic3r/GUI/DoubleSlider.cpp:1431 +msgid "or press \"+\" key" +msgstr "o premi il tasto \"+\"" + +#: src/slic3r/GUI/Field.cpp:193 +msgid "parameter name" +msgstr "nome parametro" + +#: src/slic3r/GUI/PresetHints.cpp:171 +msgid "perimeters" +msgstr "perimetri" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +msgid "print" +msgstr "stampa" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +msgid "printer" +msgstr "stampante" + +#: src/slic3r/GUI/Tab.cpp:1375 +msgid "printer model" +msgstr "modello stampante" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "remove" +msgstr "rimuovi" + +#: src/slic3r/Utils/PresetUpdater.cpp:815 +#, c-format, boost-format +msgid "requires max. %s" +msgstr "richiede max. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:812 +#, c-format, boost-format +msgid "requires min. %s" +msgstr "richiede min. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:808 +#, c-format, boost-format +msgid "requires min. %s and max. %s" +msgstr "richiede min. %s e max. %s" + +#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 +#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 +#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 +#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 +#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 +#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 +#: src/libslic3r/PrintConfig.cpp:3349 +msgid "s" +msgstr "s" + +#: src/slic3r/GUI/PresetHints.cpp:176 +msgid "solid infill" +msgstr "riempimento solido" + +#: src/slic3r/GUI/Plater.cpp:1435 +msgid "stealth mode" +msgstr "modalità silenziosa" + +#: src/slic3r/GUI/PresetHints.cpp:181 +msgid "support" +msgstr "supporto" + +#: src/slic3r/GUI/PresetHints.cpp:183 +msgid "support interface" +msgstr "interfaccia supporto" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "supports and pad" +msgstr "supporti e pad" + +#: src/slic3r/GUI/Tab.cpp:1413 +msgid "symbolic profile name" +msgstr "nome simbolico profilo" + +#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 +msgid "the following characters are not allowed:" +msgstr "non sono permessi i seguenti caratteri:" + +#: src/slic3r/GUI/SavePresetDialog.cpp:110 +msgid "the following suffix is not allowed:" +msgstr "il seguente suffisso non è permesso:" + +#: src/slic3r/GUI/GCodeViewer.cpp:3190 +msgid "to" +msgstr "a" + +#: src/libslic3r/miniz_extension.cpp:93 +msgid "too many files" +msgstr "troppi file" + +#: src/slic3r/GUI/PresetHints.cpp:178 +msgid "top solid infill" +msgstr "riempimento solido superiore" + +#: src/libslic3r/miniz_extension.cpp:91 +msgid "undefined error" +msgstr "errore non definito" + +#: src/libslic3r/miniz_extension.cpp:115 +msgid "unexpected decompressed size" +msgstr "dimensione decompressa imprevista" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:308 +msgid "unloaded" +msgstr "scaricato" + +#: src/libslic3r/miniz_extension.cpp:119 +msgid "unsupported central directory size" +msgstr "dimensione della directory centrale non supportata" + +#: src/libslic3r/miniz_extension.cpp:99 +msgid "unsupported encryption" +msgstr "criptaggio non supportato" + +#: src/libslic3r/miniz_extension.cpp:101 +msgid "unsupported feature" +msgstr "caratteristica non supportata" + +#: src/libslic3r/miniz_extension.cpp:97 +msgid "unsupported method" +msgstr "metodo non supportato" + +#: src/libslic3r/miniz_extension.cpp:109 +msgid "unsupported multidisk archive" +msgstr "archivio multidisk non supportato" + +#: src/slic3r/GUI/GCodeViewer.cpp:3176 +msgid "up to" +msgstr "fino a" + +#: src/slic3r/GUI/DoubleSlider.cpp:1634 +msgid "used" +msgstr "usato" + +#: src/libslic3r/miniz_extension.cpp:149 +msgid "validation failed" +msgstr "convalida non riuscita" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "variants" +msgstr "varianti" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 +msgid "vendor" +msgstr "produttore" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 +msgid "version" +msgstr "versione" + +#: src/slic3r/GUI/PresetHints.cpp:192 +msgid "when printing" +msgstr "durante la stampa" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "wipe tower" +msgstr "torre di pulitura" + +#: src/slic3r/GUI/PresetHints.cpp:193 +msgid "with a volumetric rate" +msgstr "con una portata volumetrica" + +#: src/libslic3r/miniz_extension.cpp:151 +msgid "write calledback failed" +msgstr "scrittura richiamo non riuscita" + #: src/libslic3r/PrintConfig.cpp:456 src/libslic3r/PrintConfig.cpp:1075 #: src/libslic3r/PrintConfig.cpp:2232 src/libslic3r/PrintConfig.cpp:2242 #: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2774 @@ -17029,6 +17025,10 @@ msgstr "AddToPropertyCollection chiamata senza valid adder" msgid "Adding book %s" msgstr "Aggiunta del libro %s in corso" +#: ../src/common/preferencescmn.cpp:43 +msgid "Advanced" +msgstr "Avanzate" + #: ../src/richtext/richtextliststylepage.cpp:435 msgid "After a paragraph:" msgstr "Dopo un paragrafo:" @@ -17295,6 +17295,10 @@ msgstr "Bordo" msgid "Borders" msgstr "Bordi" +#: ../src/richtext/richtextsizepage.cpp:288 ../src/common/stockitem.cpp:144 +msgid "Bottom" +msgstr "Basso" + #: ../src/generic/prntdlgg.cpp:893 msgid "Bottom margin (mm):" msgstr "Margine inferiore (mm):" @@ -18106,6 +18110,10 @@ msgstr "Copiato negli Appunti:\"%s\"" msgid "Copies:" msgstr "Copie:" +#: ../src/common/stockitem.cpp:150 ../src/stc/stc_i18n.cpp:18 +msgid "Copy" +msgstr "Copia" + #: ../src/common/stockitem.cpp:258 msgid "Copy selection" msgstr "Copia selezione" diff --git a/resources/localization/ko/PrusaSlicer_ko_KR.po b/resources/localization/ko/PrusaSlicer_ko_KR.po index 698a7880a..a5b40e996 100644 --- a/resources/localization/ko/PrusaSlicer_ko_KR.po +++ b/resources/localization/ko/PrusaSlicer_ko_KR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: 2020-02-28 09:34+0900\n" "Last-Translator: lee hak-min \n" "Language-Team: ulsanether\n" @@ -572,7 +572,7 @@ msgstr "활동중" msgid "PrusaSlicer version" msgstr "Prusa슬라이서 버전" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "출력" @@ -580,17 +580,17 @@ msgstr "출력" msgid "filaments" msgstr "필라멘트" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "SLA 인쇄" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "SLA 재료" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "프린터" @@ -649,7 +649,7 @@ msgstr "표준" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "모두 선택" @@ -736,7 +736,7 @@ msgstr "" msgid "All installed printers are compatible with the selected %1%." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "필라멘트" @@ -824,7 +824,7 @@ msgstr "" "또한 업데이트가 적용되기 전에 전체 구성의 백업 구성(스냅샷)이 생성됩니다." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "디스크에서 다시 불러오기" @@ -1122,7 +1122,7 @@ msgstr "&완료" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "취소" @@ -1186,7 +1186,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "" @@ -1631,8 +1631,8 @@ msgid "parameter name" msgstr "매개 변수 명칭" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "N/A" @@ -1833,7 +1833,7 @@ msgstr "" msgid "Add selected shape(s) to the bed" msgstr "" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "추가" @@ -2035,7 +2035,7 @@ msgid "Wipe" msgstr "" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "설정" @@ -2302,7 +2302,7 @@ msgid "Add..." msgstr "추가..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "전부 지우기" @@ -3183,7 +3183,7 @@ msgstr "" msgid "Internal error: %1%" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " @@ -3192,18 +3192,18 @@ msgstr "" "PrusaSlicer 구성 파일을 구문 분석하는 오류, 아마 손상된 것입니다. 파일을 수동" "으로 삭제하여 오류에 복구해 보십시오. 사용자 프로필은 영향을 받지 않습니다." -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3215,7 +3215,7 @@ msgid "" "configuration." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3224,19 +3224,19 @@ msgid "" "Shall this configuration be imported?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3246,53 +3246,53 @@ msgid "" "Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" "Do you want to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3305,198 +3305,198 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" "Settings will be available in physical printers settings." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" "Note: This name can be changed later from the physical printers settings" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "재현" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "현재 기본 설정을 불러오기" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "보기 모드를 불러오기" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "파일(3MF/AMF) 선택:" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "파일을 선택하세요 (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "응용 프로그램 언어 변경" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "언어를 선택" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "언어" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "수정된곳" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "%s 실행" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "구성 스냅샷" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "구성 스냅 샷 검사 / 활성화" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "구성 스냅 샷 가져 오기" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "구성 스냅 샷 캡처" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "구성 업데이트 확인" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "환경 설정" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "응용 프로그램 환경 설정" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "단순" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "기본 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "고급 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "전문가" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "전문가 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "모드" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "%s 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "아두이노 기반의 프린터 이미지 업로드" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "스냅 샷 이름" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "국가에 맞는 언어를 선택" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3504,93 +3504,93 @@ msgstr "" "언어를 전환 하면 응용 프로그램 재시작 합니다. 플레이트 위 객체(object)는 모" "두 지워집니다." -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "계속 하시겠습니까?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "&구성" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "SLA 방식을 사용 하여 다중 객체(object)를 인쇄할 수는 없습니다." -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "사전 설정을 변경 하기 전에 객체(object) 목록을 확인 하십시오." -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "gcode 파일 선택:" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to changes your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "" @@ -3696,7 +3696,7 @@ msgstr "스커트와 브림" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3706,7 +3706,7 @@ msgid "Advanced" msgstr "고급" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3720,8 +3720,8 @@ msgid "Supports" msgstr "서포트" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3731,8 +3731,8 @@ msgstr "서포트" msgid "Pad" msgstr "패드" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -3835,7 +3835,7 @@ msgstr "STL로 내보내기" msgid "Reload the selected volumes from disk" msgstr "디스크에서 선택한 볼륨 다시 로드" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "" @@ -3861,19 +3861,19 @@ msgstr "인쇄 볼륨에 따라 배율 조정" msgid "Scale the selected object to fit the print volume" msgstr "인쇄 볼륨에 맞게 선택한 객체(object)의 배율 조정" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "" @@ -4127,7 +4127,7 @@ msgstr "" msgid "Loading" msgstr "로딩" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "" @@ -4552,7 +4552,7 @@ msgstr "매개 변수 제거" msgid "Delete Option %s" msgstr "삭제 %s 옵션" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "옵션 %s 변경" @@ -4671,18 +4671,18 @@ msgstr "" msgid "Legend/Estimated printing time" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "" @@ -4844,12 +4844,12 @@ msgid "" "presets were used as fallback." msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" "배드에 여러 부분으로 구성된 객체가 있는 SLA 프로젝트를 로드할 수 없습니다." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "주목!" @@ -4890,11 +4890,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "G-code 내보내기" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "G-code 보내기" @@ -5275,7 +5275,7 @@ msgstr "" msgid "Show/Hide G-code window" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "미리보기" @@ -5387,29 +5387,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "" #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "출력 설정" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "재질 설정" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "필라멘트 설정" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "프린터 설정" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "" @@ -5919,7 +5919,7 @@ msgid "Open New Instance" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "" @@ -6028,9 +6028,9 @@ msgstr "G 코드" msgid "Save zip file as:" msgstr "압축(zip)파일 다른이름 저장:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "슬라이싱" @@ -6286,7 +6286,7 @@ msgstr "" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "" @@ -6312,8 +6312,8 @@ msgstr "복제본" msgid "Instance %d" msgstr "복제본 %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "레이어" @@ -6575,12 +6575,12 @@ msgstr "개체 아래" msgid "Around object" msgstr "개체 주위" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "프린터로 보내기" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "바로 슬라이스" @@ -6685,7 +6685,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "새로운 프로젝트" @@ -6693,7 +6693,7 @@ msgstr "새로운 프로젝트" msgid "Expand sidebar" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6702,12 +6702,12 @@ msgid_plural "" "PrusaSlicer" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -6717,11 +6717,11 @@ msgid_plural "" "These objects have been removed from the model" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -6733,15 +6733,15 @@ msgid_plural "" "the dimensions of these objects?" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -6753,29 +6753,29 @@ msgid_plural "" "the dimensions of these objects?" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "다중 부품(Part) 객체(object)가 감지" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 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:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "감지된 고급 데이터" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " @@ -6784,7 +6784,7 @@ msgstr "" "다중 부품(Part) 하나 또는 그 중 일부 때문에 %s에서 객체(object)를 추가 할 수 " "없습니다" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" @@ -6794,145 +6794,145 @@ msgstr "" "여러 객체(object)로 간주하는 대신,\n" "이 파일들은 여러 부분을 갖는 단일 객체(object)를 나타낼 수 있습니까?" -#: src/slic3r/GUI/Plater.cpp:2767 +#: src/slic3r/GUI/Plater.cpp:2779 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." msgstr "객체(object)가 너무 커서 인쇄물에 맞게 자동으로 축소되었습니다." -#: src/slic3r/GUI/Plater.cpp:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "객체(object)가 너무 큽니까?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "STL 파일 내보내기:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "AMF 파일 내보내기:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "다른 이름으로 파일 저장:" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "OBJ 파일 내보내기:" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "객체(object) 지우기" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "프로젝트 재설정" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "객체(object)로 분할" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "잘못 된 데이터" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "다른 내보내기 작업이 현재 실행 중입니다." -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "다시 로드할 파일을 선택하십시오." -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "다시 로드할 수 없음:" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "다시 로드하는 동안 오류" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "디스크에서 모두 다시 로드" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "3D 편집화면 보기" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -6940,171 +6940,171 @@ msgid "" "printer technology." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" "Note, if changes will be saved then new project wouldn't keep them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "프로젝트 불러오기" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "객체(object) 가져오기" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "객체(object) 가져오기" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "파일 로드" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "파일 로드" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "모든 객체(object)가 제거 됩니다, 계속합니까?" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "선택한 객체(object) 삭제" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "복제본 늘리기" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "복제본 감소" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "복사본 수를 %d로 설정" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "평면으로 절단" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "G-code 파일 다른 이름 저장:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "내보내기" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." msgstr "" -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "클립보드에서 붙여넣기" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "일반" @@ -7235,7 +7235,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7249,7 +7249,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7260,7 +7260,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -7775,11 +7775,11 @@ msgstr "프린터 호스트로 G 코드 보내기" msgid "Upload to Printer Host with the following filename:" msgstr "다음 파일 이름으로 프린터 호스트에 업로드:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "필요한 경우 디렉토리 분리 기호로 슬래시 (/)를 사용하십시오." -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "" @@ -7788,18 +7788,18 @@ msgstr "" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "아이디" @@ -8237,7 +8237,7 @@ msgstr "전체 프로필 이름" msgid "symbolic profile name" msgstr "기호 프로파일 이름" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "레이어 및 둘레" @@ -8321,11 +8321,11 @@ msgstr "겹침(Overlap)" msgid "Flow" msgstr "유량(Flow)" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "그 외" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "출력 옵션" @@ -8337,11 +8337,11 @@ msgstr "연속 인쇄" msgid "Extruder clearance" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "출력 파일" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "사후 처리 스크립트" @@ -8349,19 +8349,20 @@ msgstr "사후 처리 스크립트" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "메모" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "속한 그룹" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "프로파일 속한곳" @@ -8435,7 +8436,7 @@ msgid "Ramming settings" msgstr "래밍 설정" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "수동 G코드" @@ -8473,8 +8474,8 @@ msgstr "" msgid "Size and coordinates" msgstr "크기와 좌표" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "기능" @@ -8542,11 +8543,11 @@ msgstr "기울이기" msgid "Tilt time" msgstr "기울이기 시간" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "수정" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "노출" @@ -8702,70 +8703,74 @@ msgstr "선택한 사전 설정의 %1%를 선택 하시겠습니까?" msgid "%1% Preset" msgstr "%1% 기본설정" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "설정" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "찾기" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "전체 단어 일치" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " "apply a different set of machine limits." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "잠긴 잠금" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 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:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "잠금 해제 잠금" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -8777,12 +8782,12 @@ msgstr "" "잠금 해제 잠금 아이콘을 클릭하여 현재 옵션 그룹에 대한 모든 설정을 시스템(또" "는 기본값) 값으로 재설정합니다." -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "흰색 글머리 기호" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 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." @@ -8790,12 +8795,12 @@ msgstr "" "왼쪽 단추의 경우: 비시스템(또는 기본이 아닌) 사전 설정을 나타냅니다.\n" "오른쪽 버튼: 설정이 수정되지 않았음을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "돌아가기 화살표" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -8807,7 +8812,7 @@ msgstr "" "현재 옵션 그룹의 모든 설정을 시스템 값으로 재설정하려면 자물쇠 잠금 아이콘을 " "클릭하십시오." -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" @@ -8815,7 +8820,7 @@ msgstr "" "LOCKED LOCK 아이콘은 설정이 현재 옵션 그룹의 시스템(또는 기본값) 값과 동일하" "다는 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -8827,11 +8832,11 @@ msgstr "" "현재 옵션 그룹에 대한 모든 설정을 시스템(또는 기본값) 값으로 재설정하려면 클" "릭합니다." -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "WHITE BULLET 아이콘은 시스템 사전 설정이 아닌 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." @@ -8839,7 +8844,7 @@ msgstr "" "WHITE BULLET 기호 아이콘은 설정이 현재 옵션 그룹에 대해 마지막으로 저장 된 사" "전 설정과 동일 하다는 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -8851,7 +8856,7 @@ msgstr "" "마지막 현재 옵션 그룹에 대 한 모든 설정 다시 설정을 클릭 하 여 사전 설정을 저" "장." -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." @@ -8859,7 +8864,7 @@ msgstr "" "LOCKED LOCK 아이콘은 값이 시스템(또는 기본값) 값과 동일하다는 것을 나타냅니" "다." -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" @@ -8869,7 +8874,7 @@ msgstr "" "을 나타냅니다.\n" "현재 값을 시스템(또는 기본값) 값으로 재설정하려면 클릭합니다." -#: src/slic3r/GUI/Tab.cpp:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." @@ -8877,7 +8882,7 @@ msgstr "" "WHITE BULLET 기호 아이콘은 마지막으로 저장 한 사전 설정과 동일한 값을 나타냅" "니다." -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -8887,105 +8892,105 @@ msgstr "" "을 나타냅니다.\n" "현재 값을 마지막으로 저장된 사전 설정으로 재설정하려면 클릭합니다." -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "재료" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "서포트 헤드" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "서포트 기둥" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "서포트 기둥 및 접합부 연결" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "자동 생성" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" "To enable \"%1%\", please switch off \"%2%\"" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "객체(object) 고도" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "개체 주위패드" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "미 저장된 변경점" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "저장" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -8993,120 +8998,121 @@ msgid "" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to be asked about unsaved changes again." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 -#, boost-format -msgid "Save the selected options to preset \"%1%\"." -msgstr "" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format +msgid "Save the selected options to preset \"%1%\"." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 +#, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "" @@ -9912,32 +9918,32 @@ msgstr "유효성 검사 실패" msgid "write calledback failed" msgstr "쓰기 다시 실패" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "모든 객체(object)가 인쇄 볼륨 외부에 있습니다." -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "제공된 설정으로 인해 빈 인쇄가 발생합니다." -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "" "일부 객체(object)가 너무 가깝습니다. 귀하의 압출기가 그들과 충돌합니다." -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "일부 객체(object)는 너무 크고 익스트루더 충돌없이 인쇄 할 수 없습니다." -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " "\"complete_objects\"." msgstr "" -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." @@ -9945,7 +9951,7 @@ msgstr "" "나선형 꽃병 옵션(Spiral Vase)은 단일 재료 객체(object)를 인쇄 할 때만 사용할 " "수 있습니다." -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." @@ -9953,13 +9959,13 @@ msgstr "" "모든 압출기 의 노즐 직경이 동일하고 동일한 직경의 필라멘트를 사용하는 경우에" "만 와이프 타워가 지원됩니다." -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." @@ -9967,24 +9973,24 @@ msgstr "" "와이프 타워는 현재 상대적 압출기 어드레싱 (use_relative_e_distances = 1)에서" "만 지원됩니다." -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" "현재 와이프 타워를 사용하도록 설정되어 있는 경우 스모즈 방지 기능이 지원되지 " "않습니다." -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "와이프 타워는 현재 볼륨 E(use_volumetric_e=0)를 지원하지 않습니다." -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." msgstr "와이프 타워는 현재 다중 재질 순차 인쇄에 지원되지 않습니다." -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" @@ -9992,7 +9998,7 @@ msgstr "" "와이프 타워 (Wipe Tower)는 같은 레이어 높이에 경우 여러 객체(object)에 대해서" "만 지원됩니다" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" @@ -10000,7 +10006,7 @@ msgstr "" "와이프 타워는 같은 수의 라프트 레이어 위에 인쇄 된 경우 여러 객체(object)에 " "대해서만 지원됩니다" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -10008,7 +10014,7 @@ msgstr "" "와이프 타워는 동일한 support_material_contact_distance로 인쇄 된 경우 여러 객" "체(object)에 대해서만 지원됩니다" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." @@ -10016,29 +10022,29 @@ msgstr "" "와이프 타워는 똑같이 슬라이스 된 경우 여러 객체(object)에 대해서만 지원됩니" "다." -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" msgstr "" "모든 오브젝트의 가변 레이어 높이가 같은 경우에만 지우기 타워가 지원됩니다." -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "하나 이상의 객체(object)에 프린터에없는 압출기가 지정되었습니다." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "%1%=%2% mm가 너무 낮아 레이어 높이 %3% mm에서 인쇄할 수 없습니다." -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "노즐 직경 %3% mm로 인쇄할 수 있는 과도한 %1%=%2% mm" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -10049,7 +10055,7 @@ msgstr "" "(support_material_extruder == 0 또는 support_material_interface_extruder == " "0)로 인쇄되는 경우 모든 노즐은 동일한 지름이어야합니다." -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." @@ -10057,7 +10063,7 @@ msgstr "" "와이프 타워가 가용성 지지체와 함께 작동 하려면 서포트 레이어를 객체(object) " "레이어와 동기화 해야 합니다." -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -10068,27 +10074,46 @@ msgstr "" "에만 비가용성 서포트를 지원 합니다. (support_material_extruder과 " "support_material_interface_extruder 모두 0으로 설정 해야 합니다.)" -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "첫번째 레이어 높이는 노즐 직경보다 클 수 없습니다" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "레이어 높이는 노즐 직경보다 클 수 없습니다" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "레이어 채우기" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "G 코드 내보내기" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "G 코드 생성" diff --git a/resources/localization/ko_KR/PrusaSlicer_ko.po b/resources/localization/ko_KR/PrusaSlicer_ko.po index c7207eada..3e2ae505b 100644 --- a/resources/localization/ko_KR/PrusaSlicer_ko.po +++ b/resources/localization/ko_KR/PrusaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: 2021-04-05 21:03+0900\n" "Last-Translator: \n" "Language-Team: \n" @@ -587,7 +587,7 @@ msgstr "활성" msgid "PrusaSlicer version" msgstr "프라사슬라이서 버전" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "출력" @@ -595,17 +595,17 @@ msgstr "출력" msgid "filaments" msgstr "필 라 멘 트" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "SLA 프린트" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "SLA 재료" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "프린터" @@ -664,7 +664,7 @@ msgstr "표준" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "모두" @@ -751,7 +751,7 @@ msgstr "" msgid "All installed printers are compatible with the selected %1%." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "필라멘트 설정을 선택" @@ -839,7 +839,7 @@ msgstr "" "또한 업데이트가 적용되기 전에 전체 구성의 백업 구성(스냅샷)이 생성됩니다." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "디스크에서 재장전" @@ -1143,7 +1143,7 @@ msgstr "완료(&Finish)" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "취소" @@ -1207,7 +1207,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "" @@ -1675,8 +1675,8 @@ msgid "parameter name" msgstr "매개 변수 명칭" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "N/A" @@ -1879,7 +1879,7 @@ msgstr "" msgid "Add selected shape(s) to the bed" msgstr "" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "추가" @@ -2081,7 +2081,7 @@ msgid "Wipe" msgstr "와이프(wipe) 탑의 최소 퍼지" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "옵션" @@ -2348,7 +2348,7 @@ msgid "Add..." msgstr "더하기..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "모두 삭제" @@ -3252,7 +3252,7 @@ msgstr "중요 오류" msgid "Internal error: %1%" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " @@ -3261,7 +3261,7 @@ msgstr "" "PrusaSlicer 구성 파일을 구문 분석하는 오류, 아마 손상된 것입니다. 파일을 수동" "으로 삭제하여 오류에 복구해 보십시오. 사용자 프로필은 영향을 받지 않습니다." -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." @@ -3269,12 +3269,12 @@ msgstr "" "오류 구문 분석 PrusaGCodeViewer 컨피그 파일, 그것은 아마 손상. 오류를 복구하" "기 위해 파일을 수동으로 삭제해 봅보십시오." -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3286,7 +3286,7 @@ msgid "" "configuration." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3295,19 +3295,19 @@ msgid "" "Shall this configuration be imported?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3317,7 +3317,7 @@ msgid "" "Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" @@ -3326,46 +3326,46 @@ msgstr "" "%s\n" "계속하시겠습니까?" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "선택 기억" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "로딩 구성" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "릴리스 페이지를 참조하십시오." -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "설정 탭 준비" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3378,23 +3378,23 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" "\"인쇄 호스트 업로드\"에 대한 저장된 옵션이 있는 다음 사전 설정이 있습니다." -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" @@ -3404,7 +3404,7 @@ msgstr "" "지 않습니다.\n" "설정은 실제 프린터 설정에서 사용할 수 있습니다." -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" @@ -3413,169 +3413,169 @@ msgstr "" "기본적으로 새 프린터 장치는 생성 중에 \"프린터 N\"으로 지정됩니다.\n" "참고: 이 이름은 나중에 실제 프린터 설정에서 변경할 수 있습니다." -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "정보" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "재현" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "현재 기본 설정을 불러오기" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "보기 모드를 불러오기" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "파일(3MF/AMF) 선택:" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "파일을 선택하세요 (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "하나의 파일(GCODE/)을 선택합니다. GCO/. G/.ngc/NGC):" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "응용 프로그램 언어 변경" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "언어 선택" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "언어" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "변경" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "%s 실행하기" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "&구성 스냅샷" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "구성 스냅숏 검사/활성화" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "구성 및 스냅샷 찍기" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "구성 스냅샷 캡처" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "구성 업데이트 확인" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "기본 설정" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "응용 프로그램 기본 설정" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "단순" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "기본 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "고급" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "고급 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "전문가" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "전문가 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "모드" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "%s 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "언어(&L)" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "아두이노 기반 프린터에 펌웨어 이미지 업로드" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "스냅샷 이름" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "구성 스냅숏을 활성화하지 못했습니다." -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "언어 선택" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3583,93 +3583,93 @@ msgstr "" "언어를 전환 하면 응용 프로그램 재시작 합니다. 플레이트 위 오브젝트는 모두 지" "워집니다." -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "계속 하시겠습니까?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "구성 노트" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "업로드는 여전히 진행 중입니다." -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "그들을 중지하고 어쨌든 계속?" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "지속적인 업로드" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "SLA 방식을 사용 하여 다중 객체를 인쇄할 수는 없습니다." -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "미리 설정하기 전에 개체 목록을 확인하십시오." -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "gcode 파일을 선택합니다." -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "브라우저에서 하이퍼링크를 열도록 억제" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to changes your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "프라사슬라이스: 다시 물어보지 마세요." @@ -3775,7 +3775,7 @@ msgstr "스커트와 브림" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3785,7 +3785,7 @@ msgid "Advanced" msgstr "고급" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3799,8 +3799,8 @@ msgid "Supports" msgstr "서포트" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3810,8 +3810,8 @@ msgstr "서포트" msgid "Pad" msgstr "패드" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -3914,7 +3914,7 @@ msgstr "STL로 수출" msgid "Reload the selected volumes from disk" msgstr "디스크에서 선택한 볼륨 다시 로드" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "" @@ -3940,19 +3940,19 @@ msgstr "볼륨 인쇄배율 조정" msgid "Scale the selected object to fit the print volume" msgstr "인쇄 볼륨에 맞게 선택한 객체의 배율 조정" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "제국 단위에서 변환" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "제국 단위에서 변환을 되돌리기" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "" @@ -4206,7 +4206,7 @@ msgstr "" msgid "Loading" msgstr "로딩중" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "파일 로드" @@ -4637,7 +4637,7 @@ msgstr "매개 변수 제거" msgid "Delete Option %s" msgstr "삭제 %s 옵션" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "변경 옵션 %s" @@ -4756,18 +4756,18 @@ msgstr "공구 마커" msgid "Legend/Estimated printing time" msgstr "범례/예상 인쇄 시간" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "더 보기" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "" @@ -4927,11 +4927,11 @@ msgid "" "presets were used as fallback." msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "침대에 다중 부품 오브젝트가 있는 SLA 프로젝트를 로드할 수 없습니다." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "주의!" @@ -4972,11 +4972,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "ini/amf/3mf/gcode에서 구성을 로드하고 병합" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "G코드 내보내기" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "G-code 보내기" @@ -5363,7 +5363,7 @@ msgstr "범례 표시/숨기기 및 예상 인쇄 시간" msgid "Show/Hide G-code window" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "미리보기" @@ -5480,29 +5480,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "" #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "출력 설정" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "재질 설정" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "필라멘트 설정" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "프린터 설정" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "" @@ -6014,7 +6014,7 @@ msgid "Open New Instance" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "" @@ -6124,9 +6124,9 @@ msgstr "%1%로 내보낸 G 코드 파일" msgid "Save zip file as:" msgstr "압축(zip)파일 다른이름 저장:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "새로운 슬라이싱 작업 시작" @@ -6385,7 +6385,7 @@ msgstr "오류:" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "경고" @@ -6411,8 +6411,8 @@ msgstr "적용" msgid "Instance %d" msgstr "인스턴스 %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "레이어" @@ -6678,12 +6678,12 @@ msgstr "아래 개체" msgid "Around object" msgstr "개체 주변" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "프린터로 보내기" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "바로 슬라이스" @@ -6790,7 +6790,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "장치 %s(%s)의 배출이 실패했습니다." -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "새로운 프로젝트" @@ -6798,7 +6798,7 @@ msgstr "새로운 프로젝트" msgid "Expand sidebar" msgstr "사이드바 확장" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6807,12 +6807,12 @@ msgid_plural "" "PrusaSlicer" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -6822,11 +6822,11 @@ msgid_plural "" "These objects have been removed from the model" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -6838,15 +6838,15 @@ msgid_plural "" "the dimensions of these objects?" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -6858,29 +6858,29 @@ msgid_plural "" "the dimensions of these objects?" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "다중 부품 객체가 감지" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 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:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "감지된 고급 데이터" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " @@ -6889,7 +6889,7 @@ msgstr "" "다중 부품(Part) 하나 또는 그 중 일부 때문에 %s에서 객체(object)를 추가 할 수 " "없습니다" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" @@ -6899,145 +6899,145 @@ msgstr "" "여러 객체(object)로 간주하는 대신,\n" "이 파일들은 여러 부분을 갖는 단일 객체(object)를 나타낼 수 있습니까?" -#: src/slic3r/GUI/Plater.cpp:2767 +#: src/slic3r/GUI/Plater.cpp:2779 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:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "개체가 너무 큽니까?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "STL 파일 내보내기:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "AMF 파일 내보내기:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "파일을 다음과 같이 저장" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "OBJ 파일 내보내기:" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "오브젝트 지우기" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "프로젝트 재설정" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "오브젝트별 분할" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "잘못된 데이터" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "다른 내보내기 작업이 현재 실행 중입니다." -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "다시 로드할 파일을 선택하십시오." -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "선택한 파일" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "다음에서 다시 로드됩니다." -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "다시 로드할 수 없습니다." -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "다시 로드하는 동안 오류" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "디스크에서 모두 다시 로드 " -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "슬라이스 모델에 대한 활성 경고가 있습니다." -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "생성된 경고" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "3D 편집기 보기" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -7045,171 +7045,171 @@ msgid "" "printer technology." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" "Note, if changes will be saved then new project wouldn't keep them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "프로젝트 불러오기" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "개체 가져오기" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "가져오기 개체" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "유효한 gcode가 포함되어 있지 않습니다." -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr ".gcode 파일을 로드하는 동안 오류" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "%s - 프로젝트 파일 삭제" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "&프로젝트 열기" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "형상 가져오기만" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "구성만 가져오기" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "파일에 적용할 작업 선택" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "실행" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "다시 보지 않기" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "한 번에 하나의 .gcode 파일만 열 수 있습니다." -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "G 코드 파일 드래그 및 드롭" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "로드 파일" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "파일 로드" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "모든 개체가 제거되고 계속되나요?" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "선택한 개체 삭제" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "인스턴스 증가" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "인스턴스 감소" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "사본 수를 입력합니다." -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "선택한 개체의 복사본" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "복사본 수를 %d" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "평면으로 절단" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "G-code 파일 다른 이름 저장:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "내보내기" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." msgstr "" -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "클립보드에서 붙여넣기" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "일반" @@ -7350,7 +7350,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7364,7 +7364,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7375,7 +7375,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -7899,11 +7899,11 @@ msgstr "프린터 호스트에 G 코드 보내기" msgid "Upload to Printer Host with the following filename:" msgstr "다음 파일 이름으로 프린터 호스트에 업로드:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "필요한 경우 디렉토리 분리 기호로 슬래시 (/ ) 를 사용하십시오." -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "그룹" @@ -7912,18 +7912,18 @@ msgstr "그룹" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "ID" @@ -8365,7 +8365,7 @@ msgstr "전체 프로필 이름" msgid "symbolic profile name" msgstr "기호 프로필 이름" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "레이어 및 둘레" @@ -8452,11 +8452,11 @@ msgstr "오버랩" msgid "Flow" msgstr "흐름도" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "기타" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "출력 옵션" @@ -8468,11 +8468,11 @@ msgstr "순차적 인쇄" msgid "Extruder clearance" msgstr "압출기 클리어런스" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "출력 파일" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "포스트 프로세싱 스크립트" @@ -8480,19 +8480,20 @@ msgstr "포스트 프로세싱 스크립트" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "메모" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "종속성" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "프로파일 속한곳" @@ -8566,7 +8567,7 @@ msgid "Ramming settings" msgstr "래밍 설정" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "사용자 지정 G 코드" @@ -8612,8 +8613,8 @@ msgstr "" msgid "Size and coordinates" msgstr "크기 및 좌표" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "권한" @@ -8681,11 +8682,11 @@ msgstr "기울이기" msgid "Tilt time" msgstr "기울이기 시간" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "수정" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "최소 노출 시간" @@ -8841,40 +8842,44 @@ msgstr "선택한 사전 설정의 %1%를 선택 하시겠습니까?" msgid "%1% Preset" msgstr "%1% 기본설정" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "설정" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "찾기" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "전체 단어 일치" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "기계 제한은 G 코드로 방출되고 인쇄 시간을 예측하는 데 사용됩니다." -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " @@ -8884,26 +8889,26 @@ msgstr "" "는 데 사용됩니다, 따라서 프린터가 기계 제한의 다른 세트를 적용 할 수 있으므" "로 정확하지 않을 수 있습니다." -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." msgstr "" "기계 제한이 설정되지 않으므로 인쇄 시간 추정치가 정확하지 않을 수 있습니다." -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "잠긴 잠금" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 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:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "" "UNLOCKED LOCK 아이콘은 일부 설정이 변경되었으며 현재 옵션 그룹의 시스템(또는 " @@ -8912,7 +8917,7 @@ msgstr "" "릭합니다." #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -8924,14 +8929,14 @@ msgstr "" "잠금 해제 된 LOCK 아이콘을 클릭하여 현재 옵션 그룹에 대한 모든 설정을 시스템 " "(또는 기본값) 값으로 재설정합니다." -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "" "WHITE BULLET 기호 아이콘은 설정이 현재 옵션 그룹에 대해 마지막으로 저장 된 사" "전 설정과 동일 하다는 것을 나타냅니다." #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 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." @@ -8939,12 +8944,12 @@ msgstr "" "왼쪽 단추의 경우: 비시스템(또는 비기본적) 사전 설정을 나타내고,\n" "오른쪽 단추: 설정이 수정되지 않았음을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "돌아가기 화살표" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -8956,7 +8961,7 @@ msgstr "" "뒤로 화살표 아이콘을 클릭하여 현재 옵션 그룹에 대한 모든 설정을 마지막으로 저" "장된 사전 설정으로 재설정합니다." -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" @@ -8964,7 +8969,7 @@ msgstr "" "잠긴 LOCK 아이콘은 설정이 현재 옵션 그룹의 시스템(또는 기본값) 값과 동일하다" "는 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -8976,11 +8981,11 @@ msgstr "" "현재 옵션 그룹에 대한 모든 설정을 시스템(또는 기본값) 값으로 재설정하려면 클" "릭합니다." -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "WHITE BULLET 아이콘은 시스템 사전 설정이 아닌 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." @@ -8988,7 +8993,7 @@ msgstr "" "WHITE BULLET 기호 아이콘은 설정이 현재 옵션 그룹에 대해 마지막으로 저장 된 사" "전 설정과 동일 하다는 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -9000,14 +9005,14 @@ msgstr "" "마지막 현재 옵션 그룹에 대 한 모든 설정 다시 설정을 클릭 하 여 사전 설정을 저" "장." -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "" "LOCK 아이콘잠기는 값이 시스템(또는 기본값) 값과 동일하다는 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" @@ -9017,7 +9022,7 @@ msgstr "" "을 나타냅니다.\n" "현재 값을 시스템(또는 기본값) 값으로 재설정하려면 클릭합니다." -#: src/slic3r/GUI/Tab.cpp:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." @@ -9025,7 +9030,7 @@ msgstr "" "WHITE BULLET 기호 아이콘은 마지막으로 저장 한 사전 설정과 동일한 값을 나타냅" "니다." -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -9035,31 +9040,31 @@ msgstr "" "음을 나타냅니다.\n" "현재 값을 마지막 저장된 사전 설정으로 재설정하려면 클릭합니다." -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "재료" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "서포트 헤드" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "서포트 기둥" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "서포트 기둥 및 접합부 연결" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "자동 생성" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" @@ -9068,74 +9073,74 @@ msgstr "" "\"%1%\"는 \"%3%\" 범주에 있기 때문에 \"%2% %1%\"이 비활성화됩니다.\n" "\"%1%\"을 활성화하려면 \"%2%\"을 끄십시오." -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "객체 고도" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "물체 주위의 패드" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "Undef" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "사전 설정 전환: 저장되지 않은 변경 사항" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "이전 값" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "새 값" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "전송하기" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "무시\t" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "저장" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -9143,11 +9148,11 @@ msgid "" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "프라사슬라이스러는 당신의 행동을 기억할 것입니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -9156,55 +9161,56 @@ msgstr "" "\"기본 설정\"을 방문하여 \"%1%\"을 확인하십시오.\n" "저장되지 않은 변경 사항에 대해 다시 묻는 것입니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" "일부 필드는 너무 길기 때문에 적합합니다. 마우스 오른쪽 클릭으로 전체 텍스트" "가 드러납니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "모든 설정 변경 내용은 삭제됩니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "선택한 옵션을 저장합니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "선택한 설정을 새로 선택한 사전 설정으로 전송합니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format msgid "Save the selected options to preset \"%1%\"." msgstr "선택한 옵션을 저장하여 \"%1%\"을 미리 설정합니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 #, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "선택한 옵션을 새로 선택한 사전 설정된 \"%1%\"로 전송합니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "" "사전 설정된 \"%1%\"에는 다음과 같은 저장되지 않은 변경 사항이 있습니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " @@ -9213,7 +9219,7 @@ msgstr "" "사전 설정된 \"%1%\"은 새 프린터 프로필과 호환되지 않으며 다음과 같은 저장되" "지 않은 변경 사항이 있습니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " @@ -9222,50 +9228,50 @@ msgstr "" "사전 설정된 \"%1%\"은 새 인쇄 프로파일과 호환되지 않으며 다음과 같은 저장되" "지 않은 변경 사항이 있습니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "압출기 수" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "" @@ -10075,24 +10081,24 @@ msgstr "유효성 검사 실패" msgid "write calledback failed" msgstr "쓰기 호출 백 실패" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "모든 개체가 인쇄 볼륨 외부에 있습니다." -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "제공된 설정으로 인해 빈 인쇄가 발생합니다." -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "일부 개체가 너무 가깝습니다. 귀하의 압출기가 그들과 충돌합니다." -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "일부 개체는 너무 크고 익스트루더 충돌없이 인쇄 할 수 없습니다." -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " @@ -10102,7 +10108,7 @@ msgstr "" "를 제외한 모든 개체를 제거하거나 \"complete_objects\"하여 순차 모드를 사용하" "도록 설정합니다." -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." @@ -10110,7 +10116,7 @@ msgstr "" "나선형 꽃병 옵션(Spiral Vase)은 단일 재료 객체를 인쇄 할 때만 사용할 수 있습" "니다." -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." @@ -10118,7 +10124,7 @@ msgstr "" "와이프 타워는 모든 압출기직경이 동일하고 동일한 직경의 필라멘트를 사용하는 경" "우에만 지원됩니다." -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." @@ -10126,7 +10132,7 @@ msgstr "" "와이프 타워는 현재 말린, RepRap / 단거리, RepRapFirmware 및 Repetier G 코드 " "맛에 대해서만 지원됩니다." -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." @@ -10134,29 +10140,29 @@ msgstr "" "와이프 타워는 현재 상대적 압출기 어드레싱 (use_relative_e_distances=1)에서만 " "지원됩니다." -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "현재 활성화된 와이프 타워로는 Ooze 방지가 지원되지 않습니다." -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "와이프 타워는 현재 볼륨 E(use_volumetric_e=0)를 지원하지 않습니다." -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." msgstr "와이프 타워는 현재 다중 재료 순차 인쇄에 대해 지원되지 않습니다." -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" msgstr "" "와이프 타워는 레이어 높이가 동일한 경우에만 여러 개체에 대해서만 지원됩니다." -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" @@ -10164,7 +10170,7 @@ msgstr "" "와이프 타워는 같은 수의 라프트 레이어 위에 인쇄 된 경우 여러 객체에 대해서만 " "지원됩니다" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -10172,14 +10178,14 @@ msgstr "" "와이프 타워는 동일한 support_material_contact_distance로 인쇄 된 경우 여러 객" "체에 대해서만 지원됩니다" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." msgstr "" "와이프 타워는 똑같이 슬라이스 된 경우 여러 오브젝트에 대해서만 지원됩니다." -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" @@ -10187,22 +10193,22 @@ msgstr "" "지우기 타워는 모든 오브젝트가 동일한 가변 레이어 높이를 갖는 경우에만 지원됩" "니다." -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "하나 이상의 개체에 프린터에없는 압출기가 지정되었습니다." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "%1%=%2% mm가 너무 낮아 레이어 높이%3% mm에서 인쇄할 수 없습니다." -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "노즐 직경 %3% mm로 인쇄할 수 있는 과도한 %1%=%2% mm" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -10213,7 +10219,7 @@ msgstr "" "(support_material_extruder == 0 or support_material_interface_extruder == 0)" "로 인쇄되는 경우 모든 노즐은 동일한 지름이어야합니다." -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." @@ -10221,7 +10227,7 @@ msgstr "" "와이프 타워가 가용성 지지체와 함께 작동 하려면 서포트 레이어를 오브젝트 레이" "어와 동기화 해야 합니다." -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -10232,27 +10238,46 @@ msgstr "" "에만 비가용성 서포트를 지원 합니다. (support_material_extruder과 " "support_material_interface_extruder 모두 0으로 설정 해야 합니다.)" -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "첫번째 레이어의 높이는 노즐 직경보다 클 수 없습니다" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "레이어 높이는 노즐 직경보다 클 수 없습니다" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "레이어 채우기" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "G코드 내보내기" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "G 코드 생성" diff --git a/resources/localization/ko_KR/PrusaSlicer_ko_KR.po b/resources/localization/ko_KR/PrusaSlicer_ko_KR.po index 778985524..20b852373 100644 --- a/resources/localization/ko_KR/PrusaSlicer_ko_KR.po +++ b/resources/localization/ko_KR/PrusaSlicer_ko_KR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: 2021-04-04 22:15+0900\n" "Last-Translator: \n" "Language-Team: \n" @@ -587,7 +587,7 @@ msgstr "활성" msgid "PrusaSlicer version" msgstr "프라사슬라이서 버전" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "출력" @@ -595,17 +595,17 @@ msgstr "출력" msgid "filaments" msgstr "필 라 멘 트" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "SLA 프린트" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "SLA 재료" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "프린터" @@ -664,7 +664,7 @@ msgstr "표준" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "모두" @@ -751,7 +751,7 @@ msgstr "" msgid "All installed printers are compatible with the selected %1%." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "필라멘트 설정을 선택" @@ -839,7 +839,7 @@ msgstr "" "또한 업데이트가 적용되기 전에 전체 구성의 백업 구성(스냅샷)이 생성됩니다." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "디스크에서 재장전" @@ -1143,7 +1143,7 @@ msgstr "완료(&Finish)" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "취소" @@ -1207,7 +1207,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "" @@ -1675,8 +1675,8 @@ msgid "parameter name" msgstr "매개 변수 명칭" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "N/A" @@ -1879,7 +1879,7 @@ msgstr "" msgid "Add selected shape(s) to the bed" msgstr "" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "추가" @@ -2081,7 +2081,7 @@ msgid "Wipe" msgstr "와이프(wipe) 탑의 최소 퍼지" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "옵션" @@ -2348,7 +2348,7 @@ msgid "Add..." msgstr "더하기..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "모두 삭제" @@ -3252,7 +3252,7 @@ msgstr "중요 오류" msgid "Internal error: %1%" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " @@ -3261,7 +3261,7 @@ msgstr "" "PrusaSlicer 구성 파일을 구문 분석하는 오류, 아마 손상된 것입니다. 파일을 수동" "으로 삭제하여 오류에 복구해 보십시오. 사용자 프로필은 영향을 받지 않습니다." -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." @@ -3269,12 +3269,12 @@ msgstr "" "오류 구문 분석 PrusaGCodeViewer 컨피그 파일, 그것은 아마 손상. 오류를 복구하" "기 위해 파일을 수동으로 삭제해 봅보십시오." -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3286,7 +3286,7 @@ msgid "" "configuration." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3295,19 +3295,19 @@ msgid "" "Shall this configuration be imported?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3317,7 +3317,7 @@ msgid "" "Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" @@ -3326,46 +3326,46 @@ msgstr "" "%s\n" "계속하시겠습니까?" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "선택 기억" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "로딩 구성" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "릴리스 페이지를 참조하십시오." -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "설정 탭 준비" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3378,23 +3378,23 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" "\"인쇄 호스트 업로드\"에 대한 저장된 옵션이 있는 다음 사전 설정이 있습니다." -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" @@ -3404,7 +3404,7 @@ msgstr "" "지 않습니다.\n" "설정은 실제 프린터 설정에서 사용할 수 있습니다." -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" @@ -3413,169 +3413,169 @@ msgstr "" "기본적으로 새 프린터 장치는 생성 중에 \"프린터 N\"으로 지정됩니다.\n" "참고: 이 이름은 나중에 실제 프린터 설정에서 변경할 수 있습니다." -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "정보" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "재현" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "현재 기본 설정을 불러오기" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "보기 모드를 불러오기" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "파일(3MF/AMF) 선택:" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "파일을 선택하세요 (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "하나의 파일(GCODE/)을 선택합니다. GCO/. G/.ngc/NGC):" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "응용 프로그램 언어 변경" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "언어 선택" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "언어" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "변경" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "%s 실행하기" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "&구성 스냅샷" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "구성 스냅숏 검사/활성화" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "구성 및 스냅샷 찍기" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "구성 스냅샷 캡처" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "구성 업데이트 확인" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "기본 설정" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "응용 프로그램 기본 설정" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "단순" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "기본 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "고급" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "고급 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "전문가" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "전문가 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "모드" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "%s 보기 모드" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "언어(&L)" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "아두이노 기반 프린터에 펌웨어 이미지 업로드" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "스냅샷 이름" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "구성 스냅숏을 활성화하지 못했습니다." -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "언어 선택" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3583,93 +3583,93 @@ msgstr "" "언어를 전환 하면 응용 프로그램 재시작 합니다. 플레이트 위 오브젝트는 모두 지" "워집니다." -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "계속 하시겠습니까?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "구성 노트" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "업로드는 여전히 진행 중입니다." -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "그들을 중지하고 어쨌든 계속?" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "지속적인 업로드" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "SLA 방식을 사용 하여 다중 객체를 인쇄할 수는 없습니다." -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "미리 설정하기 전에 개체 목록을 확인하십시오." -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "gcode 파일을 선택합니다." -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "브라우저에서 하이퍼링크를 열도록 억제" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to changes your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "프라사슬라이스: 다시 물어보지 마세요." @@ -3775,7 +3775,7 @@ msgstr "스커트와 브림" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3785,7 +3785,7 @@ msgid "Advanced" msgstr "고급" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3799,8 +3799,8 @@ msgid "Supports" msgstr "서포트" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3810,8 +3810,8 @@ msgstr "서포트" msgid "Pad" msgstr "패드" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -3914,7 +3914,7 @@ msgstr "STL로 수출" msgid "Reload the selected volumes from disk" msgstr "디스크에서 선택한 볼륨 다시 로드" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "" @@ -3940,19 +3940,19 @@ msgstr "볼륨 인쇄배율 조정" msgid "Scale the selected object to fit the print volume" msgstr "인쇄 볼륨에 맞게 선택한 객체의 배율 조정" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "제국 단위에서 변환" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "제국 단위에서 변환을 되돌리기" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "" @@ -4206,7 +4206,7 @@ msgstr "" msgid "Loading" msgstr "로딩중" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "파일 로드" @@ -4637,7 +4637,7 @@ msgstr "매개 변수 제거" msgid "Delete Option %s" msgstr "삭제 %s 옵션" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "변경 옵션 %s" @@ -4756,18 +4756,18 @@ msgstr "공구 마커" msgid "Legend/Estimated printing time" msgstr "범례/예상 인쇄 시간" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "더 보기" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "" @@ -4927,11 +4927,11 @@ msgid "" "presets were used as fallback." msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "침대에 다중 부품 오브젝트가 있는 SLA 프로젝트를 로드할 수 없습니다." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "주의!" @@ -4972,11 +4972,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "ini/amf/3mf/gcode에서 구성을 로드하고 병합" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "G코드 내보내기" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "G-code 보내기" @@ -5363,7 +5363,7 @@ msgstr "범례 표시/숨기기 및 예상 인쇄 시간" msgid "Show/Hide G-code window" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "미리보기" @@ -5480,29 +5480,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "" #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "출력 설정" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "재질 설정" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "필라멘트 설정" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "프린터 설정" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "" @@ -6014,7 +6014,7 @@ msgid "Open New Instance" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "" @@ -6124,9 +6124,9 @@ msgstr "%1%로 내보낸 G 코드 파일" msgid "Save zip file as:" msgstr "압축(zip)파일 다른이름 저장:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "새로운 슬라이싱 작업 시작" @@ -6385,7 +6385,7 @@ msgstr "오류:" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "경고" @@ -6411,8 +6411,8 @@ msgstr "적용" msgid "Instance %d" msgstr "인스턴스 %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "레이어" @@ -6678,12 +6678,12 @@ msgstr "아래 개체" msgid "Around object" msgstr "개체 주변" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "프린터로 보내기" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "바로 슬라이스" @@ -6790,7 +6790,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "장치 %s(%s)의 배출이 실패했습니다." -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "새로운 프로젝트" @@ -6798,7 +6798,7 @@ msgstr "새로운 프로젝트" msgid "Expand sidebar" msgstr "사이드바 확장" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6807,12 +6807,12 @@ msgid_plural "" "PrusaSlicer" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -6822,11 +6822,11 @@ msgid_plural "" "These objects have been removed from the model" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -6838,15 +6838,15 @@ msgid_plural "" "the dimensions of these objects?" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -6858,29 +6858,29 @@ msgid_plural "" "the dimensions of these objects?" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "다중 부품 객체가 감지" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 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:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "감지된 고급 데이터" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " @@ -6889,7 +6889,7 @@ msgstr "" "다중 부품(Part) 하나 또는 그 중 일부 때문에 %s에서 객체(object)를 추가 할 수 " "없습니다" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" @@ -6899,145 +6899,145 @@ msgstr "" "여러 객체(object)로 간주하는 대신,\n" "이 파일들은 여러 부분을 갖는 단일 객체(object)를 나타낼 수 있습니까?" -#: src/slic3r/GUI/Plater.cpp:2767 +#: src/slic3r/GUI/Plater.cpp:2779 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:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "개체가 너무 큽니까?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "STL 파일 내보내기:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "AMF 파일 내보내기:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "파일을 다음과 같이 저장" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "OBJ 파일 내보내기:" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "오브젝트 지우기" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "프로젝트 재설정" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "오브젝트별 분할" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "잘못된 데이터" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "다른 내보내기 작업이 현재 실행 중입니다." -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "다시 로드할 파일을 선택하십시오." -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "선택한 파일" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "다음에서 다시 로드됩니다." -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "다시 로드할 수 없습니다." -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "다시 로드하는 동안 오류" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "디스크에서 모두 다시 로드 " -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "슬라이스 모델에 대한 활성 경고가 있습니다." -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "생성된 경고" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "3D 편집기 보기" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -7045,171 +7045,171 @@ msgid "" "printer technology." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" "Note, if changes will be saved then new project wouldn't keep them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "프로젝트 불러오기" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "개체 가져오기" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "가져오기 개체" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "유효한 gcode가 포함되어 있지 않습니다." -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr ".gcode 파일을 로드하는 동안 오류" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "%s - 프로젝트 파일 삭제" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "&프로젝트 열기" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "형상 가져오기만" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "구성만 가져오기" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "파일에 적용할 작업 선택" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "실행" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "다시 보지 않기" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "한 번에 하나의 .gcode 파일만 열 수 있습니다." -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "G 코드 파일 드래그 및 드롭" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "로드 파일" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "파일 로드" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "모든 개체가 제거되고 계속되나요?" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "선택한 개체 삭제" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "인스턴스 증가" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "인스턴스 감소" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "사본 수를 입력합니다." -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "선택한 개체의 복사본" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "복사본 수를 %d" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "평면으로 절단" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "G-code 파일 다른 이름 저장:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "내보내기" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." msgstr "" -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "클립보드에서 붙여넣기" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "일반" @@ -7350,7 +7350,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7364,7 +7364,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7375,7 +7375,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -7899,11 +7899,11 @@ msgstr "프린터 호스트에 G 코드 보내기" msgid "Upload to Printer Host with the following filename:" msgstr "다음 파일 이름으로 프린터 호스트에 업로드:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "필요한 경우 디렉토리 분리 기호로 슬래시 (/ ) 를 사용하십시오." -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "그룹" @@ -7912,18 +7912,18 @@ msgstr "그룹" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "ID" @@ -8365,7 +8365,7 @@ msgstr "전체 프로필 이름" msgid "symbolic profile name" msgstr "기호 프로필 이름" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "레이어 및 둘레" @@ -8452,11 +8452,11 @@ msgstr "오버랩" msgid "Flow" msgstr "흐름도" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "기타" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "출력 옵션" @@ -8468,11 +8468,11 @@ msgstr "순차적 인쇄" msgid "Extruder clearance" msgstr "압출기 클리어런스" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "출력 파일" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "포스트 프로세싱 스크립트" @@ -8480,19 +8480,20 @@ msgstr "포스트 프로세싱 스크립트" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "메모" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "종속성" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "프로파일 속한곳" @@ -8566,7 +8567,7 @@ msgid "Ramming settings" msgstr "래밍 설정" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "사용자 지정 G 코드" @@ -8612,8 +8613,8 @@ msgstr "" msgid "Size and coordinates" msgstr "크기 및 좌표" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "권한" @@ -8681,11 +8682,11 @@ msgstr "기울이기" msgid "Tilt time" msgstr "기울이기 시간" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "수정" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "최소 노출 시간" @@ -8841,40 +8842,44 @@ msgstr "선택한 사전 설정의 %1%를 선택 하시겠습니까?" msgid "%1% Preset" msgstr "%1% 기본설정" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "설정" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "찾기" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "전체 단어 일치" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "기계 제한은 G 코드로 방출되고 인쇄 시간을 예측하는 데 사용됩니다." -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " @@ -8884,26 +8889,26 @@ msgstr "" "는 데 사용됩니다, 따라서 프린터가 기계 제한의 다른 세트를 적용 할 수 있으므" "로 정확하지 않을 수 있습니다." -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." msgstr "" "기계 제한이 설정되지 않으므로 인쇄 시간 추정치가 정확하지 않을 수 있습니다." -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "잠긴 잠금" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 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:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "" "UNLOCKED LOCK 아이콘은 일부 설정이 변경되었으며 현재 옵션 그룹의 시스템(또는 " @@ -8912,7 +8917,7 @@ msgstr "" "릭합니다." #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -8924,14 +8929,14 @@ msgstr "" "잠금 해제 된 LOCK 아이콘을 클릭하여 현재 옵션 그룹에 대한 모든 설정을 시스템 " "(또는 기본값) 값으로 재설정합니다." -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "" "WHITE BULLET 기호 아이콘은 설정이 현재 옵션 그룹에 대해 마지막으로 저장 된 사" "전 설정과 동일 하다는 것을 나타냅니다." #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 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." @@ -8939,12 +8944,12 @@ msgstr "" "왼쪽 단추의 경우: 비시스템(또는 비기본적) 사전 설정을 나타내고,\n" "오른쪽 단추: 설정이 수정되지 않았음을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "돌아가기 화살표" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -8956,7 +8961,7 @@ msgstr "" "뒤로 화살표 아이콘을 클릭하여 현재 옵션 그룹에 대한 모든 설정을 마지막으로 저" "장된 사전 설정으로 재설정합니다." -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" @@ -8964,7 +8969,7 @@ msgstr "" "잠긴 LOCK 아이콘은 설정이 현재 옵션 그룹의 시스템(또는 기본값) 값과 동일하다" "는 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -8976,11 +8981,11 @@ msgstr "" "현재 옵션 그룹에 대한 모든 설정을 시스템(또는 기본값) 값으로 재설정하려면 클" "릭합니다." -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "WHITE BULLET 아이콘은 시스템 사전 설정이 아닌 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." @@ -8988,7 +8993,7 @@ msgstr "" "WHITE BULLET 기호 아이콘은 설정이 현재 옵션 그룹에 대해 마지막으로 저장 된 사" "전 설정과 동일 하다는 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -9000,14 +9005,14 @@ msgstr "" "마지막 현재 옵션 그룹에 대 한 모든 설정 다시 설정을 클릭 하 여 사전 설정을 저" "장." -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "" "LOCK 아이콘잠기는 값이 시스템(또는 기본값) 값과 동일하다는 것을 나타냅니다." -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" @@ -9017,7 +9022,7 @@ msgstr "" "을 나타냅니다.\n" "현재 값을 시스템(또는 기본값) 값으로 재설정하려면 클릭합니다." -#: src/slic3r/GUI/Tab.cpp:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." @@ -9025,7 +9030,7 @@ msgstr "" "WHITE BULLET 기호 아이콘은 마지막으로 저장 한 사전 설정과 동일한 값을 나타냅" "니다." -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -9035,31 +9040,31 @@ msgstr "" "음을 나타냅니다.\n" "현재 값을 마지막 저장된 사전 설정으로 재설정하려면 클릭합니다." -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "재료" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "서포트 헤드" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "서포트 기둥" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "서포트 기둥 및 접합부 연결" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "자동 생성" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" @@ -9068,74 +9073,74 @@ msgstr "" "\"%1%\"는 \"%3%\" 범주에 있기 때문에 \"%2% %1%\"이 비활성화됩니다.\n" "\"%1%\"을 활성화하려면 \"%2%\"을 끄십시오." -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "객체 고도" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "물체 주위의 패드" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "Undef" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "사전 설정 전환: 저장되지 않은 변경 사항" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "이전 값" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "새 값" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "전송하기" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "무시\t" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "저장" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -9143,11 +9148,11 @@ msgid "" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "프라사슬라이스러는 당신의 행동을 기억할 것입니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -9156,55 +9161,56 @@ msgstr "" "\"기본 설정\"을 방문하여 \"%1%\"을 확인하십시오.\n" "저장되지 않은 변경 사항에 대해 다시 묻는 것입니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" "일부 필드는 너무 길기 때문에 적합합니다. 마우스 오른쪽 클릭으로 전체 텍스트" "가 드러납니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "모든 설정 변경 내용은 삭제됩니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "선택한 옵션을 저장합니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "선택한 설정을 새로 선택한 사전 설정으로 전송합니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format msgid "Save the selected options to preset \"%1%\"." msgstr "선택한 옵션을 저장하여 \"%1%\"을 미리 설정합니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 #, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "선택한 옵션을 새로 선택한 사전 설정된 \"%1%\"로 전송합니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "" "사전 설정된 \"%1%\"에는 다음과 같은 저장되지 않은 변경 사항이 있습니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " @@ -9213,7 +9219,7 @@ msgstr "" "사전 설정된 \"%1%\"은 새 프린터 프로필과 호환되지 않으며 다음과 같은 저장되" "지 않은 변경 사항이 있습니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " @@ -9222,50 +9228,50 @@ msgstr "" "사전 설정된 \"%1%\"은 새 인쇄 프로파일과 호환되지 않으며 다음과 같은 저장되" "지 않은 변경 사항이 있습니다." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "압출기 수" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "" @@ -10075,24 +10081,24 @@ msgstr "유효성 검사 실패" msgid "write calledback failed" msgstr "쓰기 호출 백 실패" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "모든 개체가 인쇄 볼륨 외부에 있습니다." -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "제공된 설정으로 인해 빈 인쇄가 발생합니다." -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "일부 개체가 너무 가깝습니다. 귀하의 압출기가 그들과 충돌합니다." -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "일부 개체는 너무 크고 익스트루더 충돌없이 인쇄 할 수 없습니다." -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " @@ -10102,7 +10108,7 @@ msgstr "" "를 제외한 모든 개체를 제거하거나 \"complete_objects\"하여 순차 모드를 사용하" "도록 설정합니다." -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." @@ -10110,7 +10116,7 @@ msgstr "" "나선형 꽃병 옵션(Spiral Vase)은 단일 재료 객체를 인쇄 할 때만 사용할 수 있습" "니다." -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." @@ -10118,7 +10124,7 @@ msgstr "" "와이프 타워는 모든 압출기직경이 동일하고 동일한 직경의 필라멘트를 사용하는 경" "우에만 지원됩니다." -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." @@ -10126,7 +10132,7 @@ msgstr "" "와이프 타워는 현재 말린, RepRap / 단거리, RepRapFirmware 및 Repetier G 코드 " "맛에 대해서만 지원됩니다." -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." @@ -10134,29 +10140,29 @@ msgstr "" "와이프 타워는 현재 상대적 압출기 어드레싱 (use_relative_e_distances=1)에서만 " "지원됩니다." -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "현재 활성화된 와이프 타워로는 Ooze 방지가 지원되지 않습니다." -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "와이프 타워는 현재 볼륨 E(use_volumetric_e=0)를 지원하지 않습니다." -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." msgstr "와이프 타워는 현재 다중 재료 순차 인쇄에 대해 지원되지 않습니다." -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" msgstr "" "와이프 타워는 레이어 높이가 동일한 경우에만 여러 개체에 대해서만 지원됩니다." -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" @@ -10164,7 +10170,7 @@ msgstr "" "와이프 타워는 같은 수의 라프트 레이어 위에 인쇄 된 경우 여러 객체에 대해서만 " "지원됩니다" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -10172,14 +10178,14 @@ msgstr "" "와이프 타워는 동일한 support_material_contact_distance로 인쇄 된 경우 여러 객" "체에 대해서만 지원됩니다" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." msgstr "" "와이프 타워는 똑같이 슬라이스 된 경우 여러 오브젝트에 대해서만 지원됩니다." -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" @@ -10187,22 +10193,22 @@ msgstr "" "지우기 타워는 모든 오브젝트가 동일한 가변 레이어 높이를 갖는 경우에만 지원됩" "니다." -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "하나 이상의 개체에 프린터에없는 압출기가 지정되었습니다." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "%1%=%2% mm가 너무 낮아 레이어 높이%3% mm에서 인쇄할 수 없습니다." -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "노즐 직경 %3% mm로 인쇄할 수 있는 과도한 %1%=%2% mm" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -10213,7 +10219,7 @@ msgstr "" "(support_material_extruder == 0 or support_material_interface_extruder == 0)" "로 인쇄되는 경우 모든 노즐은 동일한 지름이어야합니다." -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." @@ -10221,7 +10227,7 @@ msgstr "" "와이프 타워가 가용성 지지체와 함께 작동 하려면 서포트 레이어를 오브젝트 레이" "어와 동기화 해야 합니다." -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -10232,27 +10238,46 @@ msgstr "" "에만 비가용성 서포트를 지원 합니다. (support_material_extruder과 " "support_material_interface_extruder 모두 0으로 설정 해야 합니다.)" -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "첫번째 레이어의 높이는 노즐 직경보다 클 수 없습니다" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "레이어 높이는 노즐 직경보다 클 수 없습니다" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "레이어 채우기" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "G코드 내보내기" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "G 코드 생성" diff --git a/resources/localization/nl/PrusaSlicer_nl.po b/resources/localization/nl/PrusaSlicer_nl.po index 54971091a..fe5d58709 100644 --- a/resources/localization/nl/PrusaSlicer_nl.po +++ b/resources/localization/nl/PrusaSlicer_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: 2021-12-14 09:56+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -602,7 +602,7 @@ msgstr "Actief" msgid "PrusaSlicer version" msgstr "PrusaSlicer versie" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "print" @@ -610,17 +610,17 @@ msgstr "print" msgid "filaments" msgstr "filamenten" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "SLA-print" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "SLA-materiaal" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "printer" @@ -679,7 +679,7 @@ msgstr "Standaard" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "Alles" @@ -770,7 +770,7 @@ msgstr "SLA materialen" msgid "All installed printers are compatible with the selected %1%." msgstr "Alle geïnstalleerde printers zijn compatibel met de geselecteerde %1%." -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "filament" @@ -864,7 +864,7 @@ msgstr "" "update wordt toegepast." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "Herlaad van schijf" @@ -1174,7 +1174,7 @@ msgstr "&Voltooi" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "Annuleren" @@ -1245,7 +1245,7 @@ msgstr "" "aangemaakt." #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "Desktopintegratie" @@ -1736,8 +1736,8 @@ msgid "parameter name" msgstr "parameternaam" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "n.v.t." @@ -1943,7 +1943,7 @@ msgstr "Voeg toe aan bed" msgid "Add selected shape(s) to the bed" msgstr "Voeg geselecteerd(e) object(en) toe aan bed" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "Voeg toe" @@ -2150,7 +2150,7 @@ msgid "Wipe" msgstr "Afvegen" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "Opties" @@ -2419,7 +2419,7 @@ msgid "Add..." msgstr "Voeg toe..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "Verwijder alles" @@ -3352,7 +3352,7 @@ msgstr "Kritische fout" msgid "Internal error: %1%" msgstr "Interne fout: %1%" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " @@ -3362,7 +3362,7 @@ msgstr "" "Probeer het bestand handmatig te verwijderen om de fout te herstellen. Uw " "gebruikersprofielen worden niet beïnvloed." -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." @@ -3370,12 +3370,12 @@ msgstr "" "Fout tijdens het lezen van PrusaGCodeViewer-configuratiebestand. Het is " "mogelijk beschadigd. Probeer het handmatig te verwijderen." -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "U opent %1%, versie %2%." -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3394,7 +3394,7 @@ msgstr "" "In dat geval wordt uw actieve configuratie opgeslagen voor het importeren " "van de nieuwe configuratie." -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3406,19 +3406,19 @@ msgstr "" "aangemaakt door b>%1% %2%.\n" "Moet de nieuwe configuratie worden geïmporteerd?" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "Importeer" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "Niet importeren" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3434,7 +3434,7 @@ msgstr "" "https://www.prusa3d.com/prusaslicer/.\n" "Wilt u doorgaan?" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" @@ -3443,46 +3443,46 @@ msgstr "" "%s\n" "Wilt u doorgaan?" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "Onthoud mijn keuze" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "Nieuwe release versie %1% is beschikbaar." -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "Zie downloadpagina." -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "Nieuwe pre-release versie %1% is beschikbaar." -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "Zie Release-pagina." -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "Instellingentab voorbereiden" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3495,23 +3495,23 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" "Je hebt de volgende presets opgeslagen voor de printhost-uploadwachtrij" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" @@ -3521,7 +3521,7 @@ msgstr "" "getoond in de printerinstellingen.\n" "Instellingen zijn beschikbaar in de fysieke printerinstellingen." -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" @@ -3531,138 +3531,138 @@ msgstr "" "Let op: deze naam kan later worden aangepast in de fysieke-" "printerinstellingen" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "Informatie" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "Opnieuw aanmaken" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "Laden van huidige presets" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "Laden van de weergavemodus" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "Kies een 3MF- of AMF-bestand:" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Kies één of meer STL-, OBJ-, AMF-, 3MF-, of PRUSA-bestanden:" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "Kies een bestand (gcode/.GCO/.G/.ngc/NGC):" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "Veranderen van de taal van het programma" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "Taalselectie" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "Wijzig taal (change language)" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "aangepast" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "Voer %s uit" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "Configuratiesnapshots" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "Inspecteer/activeer configuratiesnapshots" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "Neem configuratiesnapshot" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "Neem een configuratiesnapshot op" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "Controleer op configuratie-updates" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "Controleer op configuratie-updates" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "Voorkeuren" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "Programmavoorkeuren" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "Eenvoudig" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "Eenvoudige weergave" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "Geavanceerd" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "Geavanceerde weergave" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "Expert" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "Expertweergave" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "Modus" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "%s-weergavemodus" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "Wijzig taal (change language)" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "Flash printer firmware" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "Upload een firmwarebestand op een Arduino-gebaseerde printer" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "Neemt een configuratiesnapshot" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." @@ -3670,32 +3670,32 @@ msgstr "" "Sommige presets zijn aangepast en onopgeslagen instellingen worden niet " "meegenomen bij de configuratiesnapshot." -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "Snapshotnaam" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "Laad een configuratiesnapshot" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "Doorgaan om configuratiesnapshot %1% te activeren?" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "Activeren van configuratiesnapshot mislukt." -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "Herstart programma" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "Taalselectie" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3703,89 +3703,89 @@ msgstr "" "Het veranderen van de taal zorgt dat het programma opnieuw opstart.\n" "U verliest de geladen inhoud zoals getoond in de modelweergave." -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "" "Weet u zeker dat u door wilt gaan?\n" "Do you want to proceed?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "Configuratie" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "De preset-aanpassing is succesvol opgeslagen" msgstr[1] "De presets-aanpassing is succesvol opgeslagen" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "Voor nieuwe projecten worden alle aanpassingen gereset" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "Laad een nieuw project terwijl het huidige project is aangepast." -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "Project is aan het laden" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "Openen van nieuw project terwijl sommige presets niet opgeslagen zijn." -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "De uploads zijn nog bezig" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "Stop ze en ga toch door?" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "Lopende uploads" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "" "Het is niet mogelijk meerdelige objecten te printen met de SLA-technologie." -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "Controleer de objectenlijst voor het wijzigen van de preset." -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "Configuratie is aangepast van de configuratiewizard" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "Selecteer een gcode-bestand:" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "Open hyperlinks in de standaardbrowser?" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "PrusaSlicer: Open hyperlink" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "Hyperlinks openen in browser uitzetten" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "PrusaSlicer onthoudt uw keuze." -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -3794,8 +3794,8 @@ msgstr "" "Ga naar Voorkeuren en controleer \"%1%\"\n" "om uw keuze te wijzigen." -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "PrusaSlicer: vraag het niet nogmaals" @@ -3901,7 +3901,7 @@ msgstr "Skirt en brim" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3911,7 +3911,7 @@ msgid "Advanced" msgstr "Geavanceerd" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3925,8 +3925,8 @@ msgid "Supports" msgstr "Support" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3936,8 +3936,8 @@ msgstr "Support" msgid "Pad" msgstr "Basisplaat" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -4040,7 +4040,7 @@ msgstr "Exporteer als STL-bestand" msgid "Reload the selected volumes from disk" msgstr "Herlaad de geselecteerde volumes vanaf schijf" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "Vervang met STL" @@ -4066,19 +4066,19 @@ msgstr "Verschaal tot printvolume" msgid "Scale the selected object to fit the print volume" msgstr "Verschaal het geselecteerde object tot deze in het printvolume past" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "Converteer naar Engelse eenheden" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "Conversie van Engelse eenheden ongedaan maken" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "Converteer vanaf meters" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "Omrekenen van meters terugdraaien" @@ -4341,7 +4341,7 @@ msgstr "Laad bewerker" msgid "Loading" msgstr "Aan het laden" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "Bestand laden" @@ -4781,7 +4781,7 @@ msgstr "Verwijder parameter" msgid "Delete Option %s" msgstr "Verwijder optie %s" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "Wijzig optie %s" @@ -4900,18 +4900,18 @@ msgstr "Toolmarkering" msgid "Legend/Estimated printing time" msgstr "Legenda / Geschatte printtijd" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "Meer" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "Open voorkeuren." -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "Open documentatie in de webbrowser." @@ -5077,11 +5077,11 @@ msgstr "" "Het geïmporteerde SLA-archief bevat geen presets. De huidige SLA-presets " "worden gebruikt als oplossing." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "U kunt geen SLA-project laden met een meerdelig object op het bed" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "Attentie!" @@ -5127,11 +5127,11 @@ msgstr "" "Laad configuratie van INI-, AMF-, 3MF- of gcode-bestanden en voeg samen" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "Exporteer gcode-bestand" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "Stuur G-code" @@ -5522,7 +5522,7 @@ msgstr "Toon/verberg legenda en geschatte printtijd" msgid "Show/Hide G-code window" msgstr "Toon/verberg G-code venster" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "Sliceweergave" @@ -5640,29 +5640,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "PrusaSlicer sluit terwijl sommige presets aangepast zijn." #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "Printinstellingen" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "Materiaalinstellingen" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "Filamentinstellingen" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "Printerinstellingen" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "Zonder titel" @@ -6176,7 +6176,7 @@ msgid "Open New Instance" msgstr "Open nieuwe instantie" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "Vergelijk presets" @@ -6285,9 +6285,9 @@ msgstr "G-code" msgid "Save zip file as:" msgstr "ZIP-bestand opslaan als:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "Slicen" @@ -6555,7 +6555,7 @@ msgstr "Fout:" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "Waarschuwing:" @@ -6581,8 +6581,8 @@ msgstr "Instanties" msgid "Instance %d" msgstr "Instantie %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "Lagen" @@ -6859,12 +6859,12 @@ msgstr "Onder het object" msgid "Around object" msgstr "Rondom het object" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "Stuur naar printer" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "Slice nu" @@ -6973,7 +6973,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "Uitwerpen van apparat %s(%s) mislukt." -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "Nieuw project" @@ -6981,7 +6981,7 @@ msgstr "Nieuw project" msgid "Expand sidebar" msgstr "Zijbalk uitklappen" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6995,12 +6995,12 @@ msgstr[1] "" "De vorige presets zijn tijdelijk geïnstalleerd op de actieve instantie van " "PrusaSlicer" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "Laden van bestand \"%1%\" mislukt dankzij een ongeldige configuratie." -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -7015,11 +7015,11 @@ msgstr[1] "" "Objectengrootte van bestand %s blijken nul te zijn.\n" "Het object is verwijderd van het model" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "De afmetingen van het object zijn nul" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -7038,15 +7038,15 @@ msgstr[1] "" "De gebruikte eenheid van PrusaSlicer is millimeters. Wilt u de afmetingen " "van het object verschalen?" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "Het object is te klein" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "Pas toe op alle resterende kleine objecten die worden geladen." -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -7065,7 +7065,7 @@ msgstr[1] "" "De gebruikte eenheid van PrusaSlicer is millimeters. Wilt u de afmetingen " "van het object verschalen?" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" @@ -7076,11 +7076,11 @@ msgstr "" "Moet het bestand worden geladen als één object met meerdere onderdelen\n" "in plaats van deze te beschouwen als meerdere objecten?" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "Meerdelig object gedetecteerd" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 msgid "" "This file cannot be loaded in a simple mode. Do you want to switch to an " "advanced mode?" @@ -7088,11 +7088,11 @@ msgstr "" "Dit bestand kan niet geladen worden in eenvoudige modus. Wilt u overstappen " "op geavanceerde modus?" -#: src/slic3r/GUI/Plater.cpp:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "Geavanceerde data gedetecteerd" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " @@ -7101,7 +7101,7 @@ msgstr "" "U kan geen objecten toevoegen van %s, omdat sommige daarvan meerdelig kunnen " "zijn" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" @@ -7111,7 +7111,7 @@ msgstr "" "Moeten deze objecten beschouwd worden als één object\n" "met meerdere onderdelen, of als meerdere objecten?" -#: src/slic3r/GUI/Plater.cpp:2767 +#: src/slic3r/GUI/Plater.cpp:2779 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." @@ -7119,39 +7119,39 @@ msgstr "" "Het object is te groot. Daarom is het automatisch verschaald tot de grootte " "van het printbed." -#: src/slic3r/GUI/Plater.cpp:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "Object te groot?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "Exporteer STL-bestand:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "Exporteer AMF-bestand:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "Bestand opslaan als:" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "Exporteer OBJ-bestand:" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "Verwijder object" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "Verwijder alle objecten" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "Reset project" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." @@ -7159,15 +7159,15 @@ msgstr "" "Het geselecteerde object kan niet gesplitst worden omdat het maar één " "onderdeel bevat." -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "Alle niet-solide onderdelen (bewerkers) zijn verwijderd" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "Splits op naar objecten" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." @@ -7175,87 +7175,87 @@ msgstr "" "Een object heeft aangepaste supportforcering die niet gebruikt worden omdat " "supports uit staan." -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "Sta supports voor forceringen alleen toe" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "Ongeldige data" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "Een andere export loopt op dit moment." -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "Vervangen door:" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "Niet mogelijk om te vervangen met meer dan één volume" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "Fout tijdens vervangen" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "Selecteer het nieuwe bestand" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "Vervangbestand is niet geselecteerd" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "Selecteer het bestand om te herladen" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "Het geselecteerde bestand" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "verschilt ten opzichte van het originele bestand" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "Wilt u het vervangen" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "Herladen van:" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "Niet in staat om te herladen:" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "Fout tijdens herladen" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "Herlaad alles van schijf" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "Er zijn actieve waarschuwingen wat betreft de slice:" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "gegeven waarschuwingen" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "3D-bewerkingsweergave" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "Ongedaan maken / opnieuw doen wordt verwerkt" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -7266,21 +7266,21 @@ msgstr "" "Sommige %1% presets zijn aangepast. Deze gaan verloren bij het wijzigen van " "het soort printer." -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "Een nieuw project aanmaken terwijl het huidige project is aangepast." -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "Een nieuw project aanmaken terwijl sommige presets zijn aangepast." -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" "U kunt de aanpassingen in de preset behouden bij het nieuwe project, of deze " "verwijderen" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" @@ -7291,126 +7291,126 @@ msgstr "" "Let op dat als de wijzigingen worden opgeslagen, deze niet bewaard worden in " "het nieuwe project" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "Maak een nieuw project aan" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "Laad project" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "Importeer object" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "Importeer objecten" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "bevat geen geldige G-code." -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "Probleem bij het laden van het gcode-bestand" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "%s - Plaats projectbestand" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "Open als project" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "Importeer alleen het model" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "Importeer alleen de configuratie" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "Selecteer een commando om toe te passen op het bestand" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "Commando" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "Laat niet meer zien" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "Je kunt maar één gcode-bestand tegelijk openen." -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "Versleep en plaats G-code-bestand" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "Laad bestand" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "Laad bestanden" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "Alle objecten worden verwijderd. Doorgaan?" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "Verwijder geselecteerde objecten" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "Verhoog aantal instanties" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "Verlaag aantal instanties" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "Voer het aantal kopieën in:" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "Kopieën van het geselecteerde object" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Stel aantal kopieën in voor %d" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "Snij met behulp van vlak" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "G-code-bestand opslaan als:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "SL1 / SL1S bestand opslaan als:" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "De gegeven naam is niet geldig." -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" "De volgende karakters worden niet toegestaan in een FAT-bestandssysteem:" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" @@ -7418,15 +7418,15 @@ msgstr "" "Het bed is leeg.\n" "Wilt u toch het project opslaan?" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "Project opslaan" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "Exporteer" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." @@ -7434,14 +7434,14 @@ msgstr "" "Aangepaste supports, naden en multi-material schilderingen zijn verwijderd " "bij het repareren van de mesh." -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "Plak van klembord" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "Algemeen" @@ -7588,7 +7588,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7602,7 +7602,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7613,7 +7613,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -8169,12 +8169,12 @@ msgstr "Stuur G-code naar printerhost" msgid "Upload to Printer Host with the following filename:" msgstr "Upload naar printerhost met de volgende bestandsnaam:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" "Gebruik schuine streepjes ( / ) als mapscheidingstekens als dat nodig is." -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "Groep" @@ -8183,18 +8183,18 @@ msgstr "Groep" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "Bestandsnaam eindigt niet op \"%s\". Wilt u doorgaan?" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "Upload" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "Upload en print" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "Uploaden en simuleren" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "Upload" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "ID" @@ -8654,7 +8654,7 @@ msgstr "volledige profielnaam" msgid "symbolic profile name" msgstr "symbolische profielnaam" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "Lagen en perimeters" @@ -8738,11 +8738,11 @@ msgstr "Overlapping" msgid "Flow" msgstr "Stroom" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "Overige" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "Output-opties" @@ -8754,11 +8754,11 @@ msgstr "Achtereenvolgens printen" msgid "Extruder clearance" msgstr "Extruderruimte" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "Outputbestand" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "Scripts voor nabewerking" @@ -8766,19 +8766,20 @@ msgstr "Scripts voor nabewerking" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "Opmerkingen" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "Afhankelijkheden" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "Profielafhankelijkheden" @@ -8859,7 +8860,7 @@ msgid "Ramming settings" msgstr "Ramming-instellingen" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "Custom G-code" @@ -8906,8 +8907,8 @@ msgstr "" msgid "Size and coordinates" msgstr "Grootte en coördinaten" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "Mogelijkheden" @@ -8976,11 +8977,11 @@ msgstr "Draaiing" msgid "Tilt time" msgstr "Draaitijd" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "Correcties" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "Belichtingstijd" @@ -9158,42 +9159,46 @@ msgstr "Weet u zeker dat u de geselecteerde preset %1% wilt?" msgid "%1% Preset" msgstr "Preset %1%" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "Stel in" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "Zoeken" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "Alleen hele woorden" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" "Machinelimieten worden opgenomen in de G-code en gebruikt voor de geschatte " "printtijd." -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " @@ -9203,7 +9208,7 @@ msgstr "" "gebruikt om de printtijd te schatten, waardoor ze niet nauwkeurig kunnen " "zijn bij een printer met andere machinelimieten." -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." @@ -9211,12 +9216,12 @@ msgstr "" "Machinelimieten zijn niet ingesteld, waardoor de geschatte printtijd niet " "nauwkeurig is." -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "Vergrendeld" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 msgid "" "indicates that the settings are the same as the system (or default) values " "for the current option group" @@ -9224,12 +9229,12 @@ msgstr "" "geeft aan dat de instellingen gelijk zijn aan de systeemwaarden voor de " "huidige optiegroep" -#: src/slic3r/GUI/Tab.cpp:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "Ontgrendeld" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -9241,12 +9246,12 @@ msgstr "" "Klik op het ontgrendeld-pictogram om de instelling te resetten naar de " "systeemwaarden voor de huidige optiegroep." -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "Wit bolletje" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 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." @@ -9254,12 +9259,12 @@ msgstr "" "de linkerknop geeft aan dat het niet een systeempreset is,\n" "de rechterknop geeft aan of de instelling is gewijzigd." -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "Pijltje terug" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -9271,7 +9276,7 @@ msgstr "" "Klik op het pijltje-terug-pictogram om alle instellingen te resetten naar de " "laatst opgeslagen preset voor de huidige optiegroep." -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" @@ -9279,7 +9284,7 @@ msgstr "" "Vergrendeld-pictogram geeft aan dat de instellingen gelijk zijn aan de " "systeemwaarde van de huidige optiegroep" -#: src/slic3r/GUI/Tab.cpp:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -9291,11 +9296,11 @@ msgstr "" "Klik om alle instellingen voor de huidige optiegroep te resetten naar " "systeemwaarden." -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "Het witte bolletje geeft aan dat het geen systeempreset betreft." -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." @@ -9303,7 +9308,7 @@ msgstr "" "Het witte bolletje geeft aan dat de instelling gelijk is aan de laatst " "opgeslagen preset voor de huidige optiegroep." -#: src/slic3r/GUI/Tab.cpp:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -9316,14 +9321,14 @@ msgstr "" "Klik om alle instellingen terug te zetten voor de huidige optiegroep naar de " "laatst opgeslagen preset." -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "" "Vergrendeld-pictogram geeft aan dat de waarde gelijk is aan de systeemwaarde." -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" @@ -9333,7 +9338,7 @@ msgstr "" "aan de systeemwaarde.\n" "Klik om de huidige waarde te resetten naar de systeemwaarde." -#: src/slic3r/GUI/Tab.cpp:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." @@ -9341,7 +9346,7 @@ msgstr "" "Het witte bolletje geeft aan dat de waarde gelijk is aan de laatst " "opgeslagen preset." -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -9351,31 +9356,31 @@ msgstr "" "gelijk is aan de laatst opgeslagen preset.\n" "Klik om de waarde te resetten naar de laatst opgeslagen preset." -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "Materiaal" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "Materiaal-printprofiel" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "Supportkop" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "Supportpijler" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "Verbindingen van de supporttakken en kruisingen" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "Automatisch genereren" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" @@ -9384,74 +9389,74 @@ msgstr "" "\"%1%\" is uitgeschakeld omdat \"%2%\" aanstaat in \"%3%\"-categorie.\n" "Om \"%1%\" aan te zetten moet \"%2%\" uit staan" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "Objectverhoging" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "Basisplaat rondom object" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "Ongedefinieerd" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "Onopgeslagen wijzigingen" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "Wisselen van presets: niet-opgeslagen wijzigingen" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "Oude waarde" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "Nieuwe waarde" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "Behoud" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "Omzetten" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "Niet opslaan" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "Afwijzen" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "Opslaan" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -9459,11 +9464,11 @@ msgid "" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "PrusaSlicer onthoudt je keuze." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -9472,56 +9477,57 @@ msgstr "" "Kijk naar \"Voorkeuren\" en check \"%1%\"\n" "om weer te vragen over niet-opgeslagen wijzigingen." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" "Sommige velden zijn te lang om te passen. Rechtermuisklik toont de volledige " "tekst." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "Alle gewijzigde instellingen worden niet opgeslagen" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "Gewijzigde instellingen worden niet opgeslagen." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "Geselecteerde opties opslaan." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "Behoud de geselecteerde instellingen." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "Ze de geselecteerde instelling om in de nieuw geselecteerde preset." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format msgid "Save the selected options to preset \"%1%\"." msgstr "Geselecteerde opties voor preset \"%1%\" opslaan." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 #, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "" "Zet de geselecteerde optie om in de nieuw geselecteerde preset \"%1%\"." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "De volgende preset is aangepast" msgstr[1] "De volgende presets zijn aangepast" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "Preset \"%1%\" heeft de volgende niet-opgeslagen wijzigingen:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " @@ -9530,7 +9536,7 @@ msgstr "" "Preset \"%1%\" is niet geschikt voor het nieuwe printerprofiel en heeft de " "volgende niet-opgeslagen wijzigingen:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " @@ -9539,40 +9545,40 @@ msgstr "" "Preset \"%1%\" is niet geschikt voor het nieuwe printprofiel en heeft de " "volgende niet-opgeslagen wijzigingen:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "Aantal extruders" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "Toon alle presets (inclusief incompatibele)" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "Linker presetwaarde" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "Rechter presetwaarde" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "Een van de presets niet gevonden" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "Vergeleken presets hebben verschillende soorten printers" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "Presets zijn gelijk" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." @@ -9581,11 +9587,11 @@ msgstr "" "Klik op deze knop om dezelfde preset te selecteren voor de rechter en linker " "preset." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "Ongedefinieerde categorie" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "Ongedefinieerde groep" @@ -10446,28 +10452,28 @@ msgstr "validatie mislukt" msgid "write calledback failed" msgstr "terugschrijven mislukt" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "Alle objecten bevinden zich buiten het printvolume." -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "De ingevoerde instellingen resulteren in een lege print." -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "" "Sommige objecten staan te dicht op elkaar. De extruder zal er tegenaan " "botsen." -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "" "Sommige objecten zijn te groot en kunnen niet geprint worden zonder " "botsingen." -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " @@ -10477,14 +10483,14 @@ msgstr "" "alle objecten op één na, of sta achtereenvolgens printen toe bij " "\"complete_objects\"." -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." msgstr "" "De spiraalmodus kan alleen gebruikt worden met enkel-materiaal objecten." -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." @@ -10492,7 +10498,7 @@ msgstr "" "Het afveegblok wordt alleen ondersteunt als alle extruders dezelfde nozzle- " "en filamentdiameter hebben." -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." @@ -10500,7 +10506,7 @@ msgstr "" "Het afveegblok wordt alleen ondersteunt voor Marlin, RepRap/Sprinter, " "RepRapFirmware en Repetier firmwaretypes." -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." @@ -10508,19 +10514,19 @@ msgstr "" "Het afveegblok wordt alleen ondersteunt met de relatieve extruderinstelling " "('use_relative_e_distances' = 1)." -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" "Druippreventie wordt niet ondersteund als het afveegblok is geactiveerd." -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" "Het afveegblok niet ondersteunt bij volumetrische extrusiewaarden " "('use_volumetric_e' = 0)." -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." @@ -10528,7 +10534,7 @@ msgstr "" "Het afveegblok wordt momenteel niet ondersteund voor multi-materiaal " "achtereenvolgens printen." -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" @@ -10536,7 +10542,7 @@ msgstr "" "Het afveegblok wordt alleen ondersteunt voor meerdere objecten als deze een " "gelijke laagdikte hebben" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" @@ -10544,7 +10550,7 @@ msgstr "" "Het afveegblok wordt alleen ondersteunt voor meerdere objecten als deze op " "een gelijk aantal raftlagen zijn geplaatst" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -10552,7 +10558,7 @@ msgstr "" "Het afveegblok wordt alleen ondersteunt voor meerdere objecten als de " "instelling 'support_material_contact_distance' gelijk staat" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." @@ -10560,7 +10566,7 @@ msgstr "" "Het afveegblok wordt alleen ondersteunt voor meerdere objecten als ze " "tegelijk gesliced worden." -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" @@ -10568,24 +10574,24 @@ msgstr "" "Het afveegblok wordt alleen ondersteunt als alle objecten dezelfde variabele " "laagdikte hebben" -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "" "Een of meer objecten staan ingesteld op een extruder die de printer niet " "heeft." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "%1%=%2% mm is te weinig om te printen bij een laagdikte van %3% mm" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "Te veel %1%=%2% mm om te printen met een nozzlediameter van %3% mm" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -10597,7 +10603,7 @@ msgstr "" "dezelfde diameter hebben ('support_material_extruder' = 0 of " "'support_material_interface_extruder' = 0)." -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." @@ -10605,7 +10611,7 @@ msgstr "" "Om het afveegblok te laten samenwerken met oplosbare support, moeten de " "supportlagen gesynchroniseerd worden met de objectlagen." -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -10616,28 +10622,47 @@ msgstr "" "worden met de huidige extruder zonder toolwissel (Zet zowel " "'support_material_extruder' en 'support_material_interface_extruder' op 0)." -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "" "Laagdikte van de eerste laag kan niet groter zijn dan de nozzlediameter" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "Laagdikte kan niet groter zijn dan de nozzlediameter" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "Vullingslagen" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "Genereer skirt en brim" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "G-code exporteren" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "G-code genereren" diff --git a/resources/localization/pl/PrusaSlicer.mo b/resources/localization/pl/PrusaSlicer.mo index 4fc344334..8172f0f75 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 c5bf7bfd4..3cff5ff82 100644 --- a/resources/localization/pl/PrusaSlicer_pl.po +++ b/resources/localization/pl/PrusaSlicer_pl.po @@ -7,7 +7,7 @@ msgstr "" "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: Phrase (phrase.com)\n" +"X-Generator: Prusalator\n" #: src/slic3r/GUI/Tab.cpp:4707 #, boost-format @@ -18,6 +18,22 @@ msgstr "" "\"%1%\" jest wyłączony ponieważ \"%2%\" znajduje się w kategorii \"%3%\".\n" "Aby włączyć \"%1%\", wyłącz \"%2%\"." +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" +"Odnaleziono \"G92 E0\" w kodzie before_layer_gcode, co jest niekompatybilne " +"z bezwzględnym adresowaniem ekstrudera." + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" +"Odnaleziono \"G92 E0\" w kodzie layer_gcode, co jest niekompatybilne z " +"względnym adresowaniem ekstrudera." + #: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:1087 #: src/libslic3r/PrintConfig.cpp:1559 src/libslic3r/PrintConfig.cpp:1751 #: src/libslic3r/PrintConfig.cpp:1814 src/libslic3r/PrintConfig.cpp:2065 @@ -134,6 +150,12 @@ msgstr[1] "%1% (%2$d powłok)" msgstr[2] "%1% (%2$d powłok)" msgstr[3] "%1% (%2$d powłok)" +#. TRN Remove/Delete +#: src/slic3r/GUI/Tab.cpp:3736 +#, boost-format +msgid "%1% Preset" +msgstr "%1% Zestaw ustawień" + #: src/slic3r/GUI/ConfigWizard.cpp:752 #, boost-format msgid "" @@ -143,12 +165,6 @@ msgstr "" "%1% oznaczone symbolem *niekompatybilne z niektórymi " "zainstalowanymi drukarkami." -#. TRN Remove/Delete -#: src/slic3r/GUI/Tab.cpp:3736 -#, boost-format -msgid "%1% Preset" -msgstr "%1% Zestaw ustawień" - #: src/slic3r/GUI/GUI.cpp:317 #, boost-format msgid "%1% was substituted with %2%" @@ -210,6 +226,16 @@ msgstr "%s - BREAKING CHANGE" msgid "%s - Drop project file" msgstr "%s - Upuść plik projektu" +#: src/slic3r/GUI/ConfigWizard.cpp:550 +#, c-format, boost-format +msgid "%s Family" +msgstr "Rodzina %s" + +#: src/slic3r/GUI/GUI_App.cpp:2245 +#, c-format, boost-format +msgid "%s View Mode" +msgstr "Tryb %s" + #: src/slic3r/GUI/UpdateDialogs.cpp:213 #, c-format, boost-format msgid "%s configuration is incompatible" @@ -225,11 +251,6 @@ msgstr "%s nie może być wartością procentową" msgid "%s error" msgstr "błąd %s" -#: src/slic3r/GUI/ConfigWizard.cpp:550 -#, c-format, boost-format -msgid "%s Family" -msgstr "Rodzina %s" - #: src/slic3r/GUI/MsgDialog.cpp:233 #, c-format, boost-format msgid "%s has a warning" @@ -240,6 +261,17 @@ msgstr "%s ma ostrzeżenie" msgid "%s has encountered an error" msgstr "%s napotkał błąd" +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 +#, c-format, boost-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 "" +"Błąd %s . Prawdopodobnie wystąpił przez brak pamięci. Jeśli masz pewność, że " +"ilość RAMu jest wystarczająca, to może to być bug, a którego zgłoszenie " +"będziemy wdzięczni." + #: src/slic3r/GUI/GUI_App.cpp:698 #, c-format, boost-format msgid "" @@ -255,17 +287,6 @@ msgstr "" "\n" "Aplikacja zostanie zamknięta." -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:79 -#, c-format, boost-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 "" -"Błąd %s . Prawdopodobnie wystąpił przez brak pamięci. Jeśli masz pewność, że " -"ilość RAMu jest wystarczająca, to może to być bug, a którego zgłoszenie " -"będziemy wdzięczni." - #: src/slic3r/GUI/UpdateDialogs.cpp:304 #, c-format, boost-format msgid "%s has no configuration updates available." @@ -313,11 +334,6 @@ msgstr "" "Kontynuuj do %s , które pozwoli ustawić nowe Zestawy i wybrać automatyczną " "aktualizację wbudowanych Zestawów." -#: src/slic3r/GUI/GUI_App.cpp:2245 -#, c-format, boost-format -msgid "%s View Mode" -msgstr "Tryb %s" - #: src/slic3r/GUI/MsgDialog.cpp:232 #, c-format, boost-format msgid "%s warning" @@ -472,22 +488,14 @@ msgstr "&Okno" msgid "(All)" msgstr "(Wszystko)" -#: src/slic3r/GUI/Plater.cpp:1401 -msgid "(including spool)" -msgstr "(wliczając szpulę)" - -#: src/libslic3r/PrintConfig.cpp:1985 -msgid "(minimum)" -msgstr "(minimum)" +#: src/slic3r/GUI/MainFrame.cpp:1293 +msgid "(Re)Slice No&w" +msgstr "(Pono&wne) Cięcie" #: src/slic3r/GUI/KBShortcutsDialog.cpp:81 msgid "(Re)slice" msgstr "(Ponowne) Cięcie" -#: src/slic3r/GUI/MainFrame.cpp:1293 -msgid "(Re)Slice No&w" -msgstr "(Pono&wne) Cięcie" - #: src/libslic3r/GCode.cpp:573 msgid "(Some lines not shown)" msgstr "(Niektórych linii nie pokazano)" @@ -496,6 +504,14 @@ msgstr "(Niektórych linii nie pokazano)" msgid "(Unknown)" msgstr "(Nieznane)" +#: src/slic3r/GUI/Plater.cpp:1401 +msgid "(including spool)" +msgstr "(wliczając szpulę)" + +#: src/libslic3r/PrintConfig.cpp:1985 +msgid "(minimum)" +msgstr "(minimum)" + #: src/slic3r/GUI/MainFrame.cpp:1625 msgid ") not found." msgstr ") nie znaleziono." @@ -556,10 +572,6 @@ msgstr "3 (ciężki)" msgid "3&D" msgstr "3&D" -#: src/slic3r/GUI/Plater.cpp:4438 -msgid "3D editor view" -msgstr "Edytowanie 3D" - #: src/libslic3r/PrintConfig.cpp:1153 msgid "3D Honeycomb" msgstr "Plaster miodu 3D" @@ -568,6 +580,10 @@ msgstr "Plaster miodu 3D" msgid "3D Mouse disconnected." msgstr "Odłączono 3D Mouse." +#: src/slic3r/GUI/Plater.cpp:4438 +msgid "3D editor view" +msgstr "Edytowanie 3D" + #: src/slic3r/GUI/Mouse3DController.cpp:453 msgid "3Dconnexion settings" msgstr "Ustawienia 3Dconnexion" @@ -608,10 +624,6 @@ msgstr "" "Zostanie utworzona kopia obecnego zestawu ustawień i odłączona od ustawień " "systemowych." -#: src/slic3r/GUI/ConfigWizard.cpp:2717 -msgid "A new filament was installed and it will be activated." -msgstr "Zainstalowano nowy filament i zostanie on aktywowany." - #: src/slic3r/GUI/ConfigWizard.cpp:2691 msgid "A new Printer was installed and it will be activated." msgstr "Zainstalowano nową drukarkę i zostanie ona aktywowana." @@ -620,6 +632,10 @@ msgstr "Zainstalowano nową drukarkę i zostanie ona aktywowana." msgid "A new SLA material was installed and it will be activated." msgstr "Zainstalowano nowy materiał SLA i zostanie on aktywowany." +#: src/slic3r/GUI/ConfigWizard.cpp:2717 +msgid "A new filament was installed and it will be activated." +msgstr "Zainstalowano nowy filament i zostanie on aktywowany." + #: src/slic3r/GUI/ConfigWizard.cpp:2596 msgid "A new vendor was installed and one of its printers will be activated" msgid_plural "" @@ -664,6 +680,14 @@ msgstr "" msgid "A toolpath outside the print area was detected." msgstr "Wykryto ścieżkę narzędzia poza obszarem roboczym." +#: src/libslic3r/PrintConfig.cpp:291 +msgid "API Key / Password" +msgstr "Klucz API / hasło" + +#: src/libslic3r/PrintConfig.cpp:351 +msgid "API key" +msgstr "Klucz API" + #: src/slic3r/Config/Snapshot.cpp:601 msgid "Abort" msgstr "Przerwij" @@ -673,10 +697,6 @@ msgstr "Przerwij" msgid "About %s" msgstr "O %s" -#: src/slic3r/GUI/GCodeViewer.cpp:3182 -msgid "above" -msgstr "ponad" - #: src/libslic3r/PrintConfig.cpp:2161 msgid "Above Z" msgstr "Powyżej Z" @@ -709,10 +729,6 @@ msgstr "Aktywacja" msgid "Active" msgstr "Aktywny" -#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 -msgid "active" -msgstr "aktywny" - #: src/slic3r/GUI/GLCanvas3D.cpp:248 msgid "Adaptive" msgstr "Adaptacyjny" @@ -743,6 +759,60 @@ msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\"" msgstr "" "Dodaj \"%1%\" jako kolejny zestaw ustawień dla fizycznej drukarki \"%2%\"" +#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 +msgid "Add Generic Subobject" +msgstr "Dodaj Standardowy Model Podrzędny" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 +msgid "Add Height Range" +msgstr "Dodaj zakres wysokości" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 +msgid "Add Instance of the selected object" +msgstr "Dodaj instancję wybranego modelu" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 +msgid "Add Layers" +msgstr "Dodaj Warstwy" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 +msgid "Add Settings Bundle for Height range" +msgstr "Dodaj paczkę ustawień dla zakresu wysokości" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 +msgid "Add Settings Bundle for Object" +msgstr "Dodaj paczkę ustawień dla modelu" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 +msgid "Add Settings Bundle for Sub-object" +msgstr "Dodaj paczkę ustawień dla modelu podrzędnego" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 +msgid "Add Settings for Layers" +msgstr "Dodaj ustawienia dla warstw" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 +msgid "Add Settings for Object" +msgstr "Dodaj ustawienia dla modelu" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 +msgid "Add Settings for Sub-object" +msgstr "Dodaj ustawienia dla modelu podrzędnego" + +#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 +msgid "Add Shape" +msgstr "Dodaj kształt" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shape from Gallery" +msgstr "Dodaj Kształt z Galerii" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 +msgid "Add Shapes from Gallery" +msgstr "Dodaj Kształty z Galerii" + #: src/libslic3r/PrintConfig.cpp:3607 msgid "Add a pad underneath the supported model" msgstr "Dodaj podkładkę pod podporami modelu" @@ -812,33 +882,15 @@ msgstr "Dodaj zmianę ekstrudera - kliknij lewym przyciskiem" msgid "Add extruder to sequence" msgstr "Dodaj ekstruder do sekwencji" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1638 -msgid "Add Generic Subobject" -msgstr "Dodaj Standardowy Model Podrzędny" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:3010 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3038 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3058 -msgid "Add Height Range" -msgstr "Dodaj zakres wysokości" - #: src/slic3r/GUI/GLCanvas3D.cpp:4541 src/slic3r/GUI/GUI_Factories.cpp:1084 #: src/slic3r/GUI/GUI_Factories.cpp:1108 src/slic3r/GUI/GUI_Factories.cpp:1119 msgid "Add instance" msgstr "Dodaj instancję" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 -msgid "Add Instance of the selected object" -msgstr "Dodaj instancję wybranego modelu" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:164 msgid "Add layer range" msgstr "Dodaj zakres warstw" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 -msgid "Add Layers" -msgstr "Dodaj Warstwy" - #: src/slic3r/GUI/GUI_Factories.cpp:162 msgid "Add modifier" msgstr "Dodaj modyfikator" @@ -898,42 +950,6 @@ msgstr "Dodaj wybrany kształt(y) do stołu" msgid "Add settings" msgstr "Dodaj ustawienia" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1339 -msgid "Add Settings Bundle for Height range" -msgstr "Dodaj paczkę ustawień dla zakresu wysokości" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1341 -msgid "Add Settings Bundle for Object" -msgstr "Dodaj paczkę ustawień dla modelu" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1340 -msgid "Add Settings Bundle for Sub-object" -msgstr "Dodaj paczkę ustawień dla modelu podrzędnego" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1298 -msgid "Add Settings for Layers" -msgstr "Dodaj ustawienia dla warstw" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1300 -msgid "Add Settings for Object" -msgstr "Dodaj ustawienia dla modelu" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1299 -msgid "Add Settings for Sub-object" -msgstr "Dodaj ustawienia dla modelu podrzędnego" - -#: src/slic3r/GUI/GUI_Factories.cpp:901 src/slic3r/GUI/GUI_ObjectList.cpp:1696 -msgid "Add Shape" -msgstr "Dodaj kształt" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shape from Gallery" -msgstr "Dodaj Kształt z Galerii" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1727 -msgid "Add Shapes from Gallery" -msgstr "Dodaj Kształty z Galerii" - #: src/libslic3r/PrintConfig.cpp:686 msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " @@ -988,14 +1004,14 @@ msgstr "Dodaj/usuń zestawy ustawień" msgid "Add/Remove printers" msgstr "Dodaj/usuń drukarki" -#: src/slic3r/GUI/Tab.cpp:1369 -msgid "Additional information:" -msgstr "Dodatkowe informacje:" - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:63 msgid "Additional Settings" msgstr "Ustawienia dodatkowe" +#: src/slic3r/GUI/Tab.cpp:1369 +msgid "Additional information:" +msgstr "Dodatkowe informacje:" + #: src/slic3r/GUI/ConfigWizard.cpp:1236 msgid "" "Additionally a backup snapshot of the whole configuration is created before " @@ -1008,26 +1024,19 @@ msgstr "" msgid "Address" msgstr "Adres" -#: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 -#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 -#: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4661 -#: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 -#: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 -#: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 -#: src/libslic3r/PrintConfig.cpp:2490 src/libslic3r/PrintConfig.cpp:3028 -#: src/libslic3r/PrintConfig.cpp:3224 +#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 +msgctxt "Mode" msgid "Advanced" -msgstr "Zaawansowane" - -#: src/slic3r/GUI/ConfigWizard.cpp:1280 -msgid "Advanced mode" -msgstr "Tryb Zaawansowany" +msgstr "Zaawansowany" #: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Advanced View Mode" msgstr "Widok Zaawansowany" +#: src/slic3r/GUI/ConfigWizard.cpp:1280 +msgid "Advanced mode" +msgstr "Tryb Zaawansowany" + #: src/slic3r/GUI/FirmwareDialog.cpp:851 msgid "Advanced: Output log" msgstr "Zaawansowane: log wyjściowy" @@ -1052,14 +1061,14 @@ msgstr "" msgid "After layer change G-code" msgstr "G-code wykonywany po zmianie warstwy" -#: src/libslic3r/PrintConfig.cpp:4322 -msgid "Align the model to the given point." -msgstr "Wyrównaj model z danym punktem." - #: src/libslic3r/PrintConfig.cpp:4321 msgid "Align XY" msgstr "Wyrównaj XY" +#: src/libslic3r/PrintConfig.cpp:4322 +msgid "Align the model to the given point." +msgstr "Wyrównaj model z danym punktem." + #: src/libslic3r/PrintConfig.cpp:2223 msgid "Aligned" msgstr "Wyrównany" @@ -1123,10 +1132,6 @@ msgstr "Wszystkie zestawy ustawień użytkownika zostaną usunięte" msgid "All walls" msgstr "Wszystkie ściany" -#: src/libslic3r/miniz_extension.cpp:121 -msgid "allocation failed" -msgstr "niepowodzenie alokacji" - #: src/slic3r/GUI/Preferences.cpp:208 src/slic3r/GUI/Preferences.cpp:212 msgid "Allow just a single PrusaSlicer instance" msgstr "Zezwalaj tylko na pojedynczą instancję PrusaSlicer" @@ -1219,6 +1224,10 @@ msgstr "" "Obiekt posiada niestandardowe modyfikatory wymuszające podpory, które nie " "będą używane, ponieważ generowanie podpór jest wyłączone." +#: src/slic3r/GUI/GLCanvas3D.cpp:6367 +msgid "An object outside the print area was detected." +msgstr "Wykryto model poza obszarem roboczym." + #: src/slic3r/GUI/GLCanvas3D.cpp:6372 msgid "" "An object outside the print area was detected.\n" @@ -1227,10 +1236,6 @@ msgstr "" "Wykryto model poza obszarem roboczym.\n" "Rozwiąż problem, aby kontynuować cięcie." -#: src/slic3r/GUI/GLCanvas3D.cpp:6367 -msgid "An object outside the print area was detected." -msgstr "Wykryto model poza obszarem roboczym." - #: src/slic3r/GUI/Jobs/PlaterJob.cpp:13 msgid "An unexpected error occured" msgstr "Wystąpił nieoczekiwany błąd" @@ -1251,14 +1256,6 @@ msgstr "" "Każda modyfikacja powinna zostać zapisana jako nowy zestaw ustawień " "dziedziczony z obecnego." -#: src/libslic3r/PrintConfig.cpp:351 -msgid "API key" -msgstr "Klucz API" - -#: src/libslic3r/PrintConfig.cpp:291 -msgid "API Key / Password" -msgstr "Klucz API / hasło" - #: src/slic3r/GUI/GUI_App.cpp:2232 msgid "Application preferences" msgstr "Preferencje aplikacji" @@ -1281,18 +1278,10 @@ msgstr "Automatycznie stosuj zmianę koloru" msgid "Apply to all the remaining small objects being loaded." msgstr "Zastosuj do wszystkich pozostałych małych obiektów, które są ładowane." -#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 -msgid "approximate seconds" -msgstr "szacowane sekundy" - #: src/libslic3r/PrintConfig.cpp:709 src/libslic3r/PrintConfig.cpp:1156 msgid "Archimedean Chords" msgstr "Spirala Archimedesa" -#: src/libslic3r/miniz_extension.cpp:147 -msgid "archive is too large" -msgstr "archiwum jest zbyt duże" - #: src/slic3r/GUI/Tab.cpp:3731 #, boost-format msgid "Are you sure you want to %1% the selected preset?" @@ -1324,6 +1313,10 @@ msgstr "" msgid "Are you sure you want to delete \"%1%\" printer?" msgstr "Czy na pewno chcesz usunąć drukarkę \"%1%\"?" +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "Czy na pewno chcesz usunąć wszystkie zamienniki?" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1132 msgid "Are you sure you want to do it?" msgstr "Czy na pewno chcesz to zrobić?" @@ -1577,14 +1570,22 @@ msgstr "Wycofaj przy nieznanej konfiguracji" msgid "Balanced" msgstr "Zbalansowana" -#: src/slic3r/GUI/MainFrame.cpp:655 -msgid "based on Slic3r" -msgstr "bazuje na projekcie Slic3r" - #: src/slic3r/GUI/Tab.cpp:1989 msgid "Bed" msgstr "Stół" +#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape" +msgstr "Kształt stołu" + +#: src/slic3r/GUI/ConfigWizard.cpp:1396 +msgid "Bed Shape and Size" +msgstr "Kształt i rozmiar stołu roboczego" + +#: src/slic3r/GUI/ConfigWizard.cpp:1581 +msgid "Bed Temperature:" +msgstr "Temperatura stołu:" + #: src/libslic3r/PrintConfig.cpp:241 msgid "Bed custom model" msgstr "Własny model stołu" @@ -1601,18 +1602,10 @@ msgstr "Anulowano wypełnianie stołu." msgid "Bed filling done." msgstr "Wypełnianie stołu zakończone." -#: src/slic3r/GUI/BedShapeDialog.hpp:95 src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape" -msgstr "Kształt stołu" - #: src/libslic3r/PrintConfig.cpp:231 msgid "Bed shape" msgstr "Kształt stołu" -#: src/slic3r/GUI/ConfigWizard.cpp:1396 -msgid "Bed Shape and Size" -msgstr "Kształt i rozmiar stołu roboczego" - #: src/libslic3r/PrintConfig.cpp:396 msgid "Bed temperature" msgstr "Temperatura stołu" @@ -1625,10 +1618,6 @@ msgstr "" "Temperatura stołu dla warstw powyżej pierwszej. Ustaw 0, aby wyłączyć " "kontrolowanie temperatury w pliku wyjściowym." -#: src/slic3r/GUI/ConfigWizard.cpp:1581 -msgid "Bed Temperature:" -msgstr "Temperatura stołu:" - #: src/slic3r/GUI/Tab.cpp:2422 src/libslic3r/GCode.cpp:709 #: src/libslic3r/PrintConfig.cpp:402 msgid "Before layer change G-code" @@ -1638,14 +1627,14 @@ msgstr "G-code wykonywany przed zmianą warstwy" msgid "Before roll back" msgstr "Przez zmianą" -#: src/slic3r/GUI/Plater.cpp:579 -msgid "Below object" -msgstr "Pod modelem" - #: src/libslic3r/PrintConfig.cpp:2170 msgid "Below Z" msgstr "Poniżej Z" +#: src/slic3r/GUI/Plater.cpp:579 +msgid "Below object" +msgstr "Pod modelem" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:21 msgid "Best surface quality" msgstr "Najlepsza jakość powierzchni" @@ -1685,13 +1674,14 @@ msgstr "Pojemność butelki" msgid "Bottle weight" msgstr "Waga butelki" -#. 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:1121 src/libslic3r/PrintConfig.cpp:423 -#: src/libslic3r/PrintConfig.cpp:432 +#: src/slic3r/GUI/OptionsGroup.cpp:352 +msgctxt "Layers" msgid "Bottom" -msgstr "Dolne" +msgstr "Spód" + +#: src/slic3r/GUI/MainFrame.cpp:1121 +msgid "Bottom View" +msgstr "Widok od dołu" #: src/libslic3r/PrintConfig.cpp:2566 msgid "Bottom contact Z distance" @@ -1718,10 +1708,6 @@ msgstr "Dolna powłoka ma %1% mm grubości dla warstwy o wysokości %2% mm." msgid "Bottom solid layers" msgstr "Zwarte warstwy dolne" -#: src/slic3r/GUI/MainFrame.cpp:1121 -msgid "Bottom View" -msgstr "Widok od dołu" - #: src/slic3r/GUI/GUI_Factories.cpp:461 src/slic3r/GUI/GUI_Factories.cpp:501 #: src/slic3r/GUI/GUI_Factories.cpp:505 msgid "Box" @@ -1820,10 +1806,6 @@ msgstr "Rozmiar pędzla" msgid "Bucket fill" msgstr "Wiaderko z farbą" -#: src/libslic3r/miniz_extension.cpp:141 -msgid "buffer too small" -msgstr "niewystarczający bufor" - #: src/slic3r/GUI/GUI_App.cpp:1660 msgid "" "But since this version of PrusaSlicer we don't show this information in " @@ -1847,18 +1829,30 @@ msgstr "" "Domyślnie nowe drukarki będą nazywane \"Printer N\" podczas tworzenia.\n" "Uwaga: można to zmienić później w ustawieniach fizycznych drukarki." -#: src/slic3r/GUI/PresetHints.cpp:191 -msgid "by the print profile maximum" -msgstr "maksimum zależny od profilu wydruku" +#: src/slic3r/GUI/NotificationManager.cpp:890 +msgid "CANCELED" +msgstr "ANULOWANE" + +#: src/slic3r/GUI/NotificationManager.cpp:895 +msgid "COMPLETED" +msgstr "ZAKOŃCZONE" + +#: src/libslic3r/miniz_extension.cpp:117 +msgid "CRC-32 check failed" +msgstr "Weryfikacja CRC-32 nie powiodła się" + +#: src/slic3r/Utils/Http.cpp:91 +msgid "" +"CURL init has failed. PrusaSlicer will be unable to establish network " +"connections. See logs for additional details." +msgstr "" +"Niepowodzenie inicjalizacji CURL. PrusaSlicer nie będzie w stanie nawiązać " +"połączenia przez sieć. Szczegóły w logach." #: src/slic3r/GUI/Preferences.cpp:314 msgid "Camera" msgstr "Widok" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 -msgid "Camera view" -msgstr "Widok kamery" - #: resources/data/hints.ini: [hint:Camera Views] msgid "" "Camera Views\n" @@ -1869,6 +1863,10 @@ msgstr "" "Czy wiesz, że możesz użyć klawiszy numerycznych 0-6, aby szybko " "przełączać się między predefiniowanymi kątami widoku?" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 +msgid "Camera view" +msgstr "Widok kamery" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:322 msgid "Can't apply when proccess preview." msgstr "Nie można zastosować podczas przetwarzania podglądu." @@ -1891,10 +1889,6 @@ msgstr "Anuluj wybrane" msgid "Cancel upload" msgstr "Anuluj przesyłanie" -#: src/slic3r/GUI/NotificationManager.cpp:890 -msgid "CANCELED" -msgstr "ANULOWANE" - #: src/slic3r/GUI/PrintHostDialogs.cpp:375 msgid "Cancelled" msgstr "Anulowano" @@ -1994,30 +1988,10 @@ msgstr "Pliki certyfikatów (*.crt, *.pem)|*.crt;*.pem|Wszystkie pliki|*.*" msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"" msgstr "Zmień \"%1%\" na \"%2%\" dla fizycznej drukarki \"%3%\"" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 -msgid "Change camera type (perspective, orthographic)" -msgstr "Zmień rodzaj widoku (perspektywiczny/ortograficzny)" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 -msgid "Change drainage hole diameter" -msgstr "Zmień średnicę otworu odpływowego" - -#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 -msgid "Change extruder" -msgstr "Zmiana ekstrudera" - #: src/slic3r/GUI/GUI_ObjectList.cpp:616 msgid "Change Extruder" msgstr "Zmień Ekstruder" -#: src/slic3r/GUI/DoubleSlider.cpp:1613 -msgid "Change extruder (N/A)" -msgstr "Zmień ekstruder (N/A)" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:722 -msgid "Change extruder color" -msgstr "Zmień kolor ekstrudera" - #: src/slic3r/GUI/GUI_ObjectList.cpp:4267 msgid "Change Extruders" msgstr "Zmień Ekstrudery" @@ -2031,6 +2005,26 @@ msgstr "Zmień Opcję %s" msgid "Change Part Type" msgstr "Zmień Rodzaj Elementu" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 +msgid "Change camera type (perspective, orthographic)" +msgstr "Zmień rodzaj widoku (perspektywiczny/ortograficzny)" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:666 +msgid "Change drainage hole diameter" +msgstr "Zmień średnicę otworu odpływowego" + +#: src/slic3r/GUI/DoubleSlider.cpp:1612 src/slic3r/GUI/GUI_Factories.cpp:740 +msgid "Change extruder" +msgstr "Zmiana ekstrudera" + +#: src/slic3r/GUI/DoubleSlider.cpp:1613 +msgid "Change extruder (N/A)" +msgstr "Zmień ekstruder (N/A)" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:722 +msgid "Change extruder color" +msgstr "Zmień kolor ekstrudera" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:702 msgid "Change point head diameter" msgstr "Zmień średnicę łącznika" @@ -2067,6 +2061,10 @@ msgstr "" "Zmiana niektórych opcji spowoduje ponowne uruchomienie aplikacji.\n" "Utracisz zawartość stołu." +#: src/slic3r/GUI/GUI_App.cpp:2219 +msgid "Check for Configuration Updates" +msgstr "Sprawdź aktualizacje konfiguracji" + #: src/slic3r/GUI/ConfigWizard.cpp:1214 msgid "Check for application updates" msgstr "Sprawdź aktualizacje aplikacji" @@ -2075,9 +2073,9 @@ msgstr "Sprawdź aktualizacje aplikacji" msgid "Check for configuration updates" msgstr "Sprawdzaj aktualizacje konfiguracji" -#: src/slic3r/GUI/GUI_App.cpp:2219 -msgid "Check for Configuration Updates" -msgstr "Sprawdź aktualizacje konfiguracji" +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 +msgid "Choose SLA archive:" +msgstr "Wybierz archiwum SLA:" #: src/slic3r/GUI/BedShapeDialog.cpp:552 msgid "Choose a file to import bed texture from (PNG/SVG):" @@ -2095,6 +2093,10 @@ msgstr "Wybierz plik STL, z którego ma być zaimportowany model stołu:" msgid "Choose an STL file to import bed shape from:" msgstr "Wybierz plik STL, z którego ma być zaimportowany kształt stołu:" +#: src/slic3r/GUI/GalleryDialog.cpp:453 +msgid "Choose one PNG file:" +msgstr "Wybierz jeden plik PNG:" + #: src/slic3r/GUI/GUI_App.cpp:1836 msgid "Choose one file (3MF/AMF):" msgstr "Wybierz jeden plik (3MF/AMF):" @@ -2111,14 +2113,6 @@ msgstr "Wybierz jeden lub więcej plików (STL, OBJ):" msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Wybierz jeden lub więcej plików (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GalleryDialog.cpp:453 -msgid "Choose one PNG file:" -msgstr "Wybierz jeden plik PNG:" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:36 -msgid "Choose SLA archive:" -msgstr "Wybierz archiwum SLA:" - #: src/slic3r/GUI/ConfigWizard.cpp:1361 msgid "Choose the type of firmware used by your printer." msgstr "Wybierz rodzaj firmware używanego przez Twoją drukarkę." @@ -2133,10 +2127,6 @@ msgstr "Koło" msgid "Circular" msgstr "Okrągły" -#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 -msgid "Clear all" -msgstr "Wyczyść wszystko" - #: src/slic3r/GUI/Preferences.cpp:295 msgid "Clear Undo / Redo stack on new project" msgstr "Wyczyść stos akcji Cofnij / Ponów w nowym projekcie" @@ -2148,6 +2138,10 @@ msgstr "" "Wyczyść stos akcji Cofnij / Ponów w nowym projekcie lub gdy obecny projekt " "jest wczytywany." +#: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:121 +msgid "Clear all" +msgstr "Wyczyść wszystko" + #: src/slic3r/GUI/GLCanvas3D.cpp:4689 src/slic3r/GUI/GLCanvas3D.cpp:4728 msgid "Click right mouse button to open/close History" msgstr "Kliknij prawym przyciskiem myszy, aby otworzyć/zamknąć historię" @@ -2200,11 +2194,6 @@ msgstr "Zamknij" msgid "Close holes" msgstr "Zamknij otwory" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 -#: src/libslic3r/PrintConfig.cpp:3759 -msgid "Closing distance" -msgstr "Dystans domykania" - #: src/slic3r/GUI/MainFrame.cpp:232 msgid "Closing PrusaSlicer while some presets are modified." msgstr "" @@ -2214,6 +2203,11 @@ msgstr "" msgid "Closing PrusaSlicer. Current project is modified." msgstr "Zamykanie PrusaSlicer. Bieżący projekt został zmodyfikowany." +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:34 +#: src/libslic3r/PrintConfig.cpp:3759 +msgid "Closing distance" +msgstr "Dystans domykania" + #: src/libslic3r/PrintConfig.cpp:2667 msgid "Closing radius" msgstr "Promień zamykania" @@ -2230,6 +2224,15 @@ msgstr "Zwiń/rozwiń pasek narzędzi" msgid "Color" msgstr "Kolor" +#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 +msgid "Color Change G-code" +msgstr "G-code dla zmiany koloru" + +#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 +#: src/slic3r/GUI/GUI_Preview.cpp:957 +msgid "Color Print" +msgstr "Zmiana Koloru" + #: src/slic3r/GUI/GCodeViewer.cpp:3487 src/slic3r/GUI/GCodeViewer.cpp:3543 msgid "Color change" msgstr "Zmiana koloru" @@ -2244,10 +2247,6 @@ msgstr "Zmiana koloru (\"%1%\")" msgid "Color change (\"%1%\") for Extruder %2%" msgstr "Zmiana koloru (\"%1%\") dla ekstrudera %2%" -#: src/slic3r/GUI/Tab.cpp:2462 src/libslic3r/GCode.cpp:713 -msgid "Color Change G-code" -msgstr "G-code dla zmiany koloru" - #: src/libslic3r/PrintConfig.cpp:2432 msgid "Color change G-code" msgstr "G-code dla zmiany koloru" @@ -2256,11 +2255,6 @@ msgstr "G-code dla zmiany koloru" msgid "Color changes" msgstr "Zmiany koloru" -#: src/slic3r/GUI/GCodeViewer.cpp:3304 src/slic3r/GUI/GUI_Preview.cpp:225 -#: src/slic3r/GUI/GUI_Preview.cpp:957 -msgid "Color Print" -msgstr "Zmiana Koloru" - #: src/libslic3r/PrintConfig.cpp:537 msgid "Colorprint height" msgstr "Wysokość (warstwa) zmiany koloru" @@ -2295,12 +2289,12 @@ msgid "Comment:" msgstr "Komentarz:" #: src/slic3r/GUI/MainFrame.cpp:1417 -msgid "Compare presets" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +msgid "Compare Presets" msgstr "Porównaj zestawy ustawień" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 -msgid "Compare Presets" +msgid "Compare presets" msgstr "Porównaj zestawy ustawień" #: src/slic3r/GUI/Tab.cpp:216 @@ -2335,14 +2329,6 @@ msgstr "Druk sekwencyjny (model po modelu)" msgid "Completed" msgstr "Zakończono" -#: src/slic3r/GUI/NotificationManager.cpp:895 -msgid "COMPLETED" -msgstr "ZAKOŃCZONE" - -#: src/libslic3r/miniz_extension.cpp:113 -msgid "compression failed" -msgstr "niepowodzenie kompresji" - #: src/libslic3r/PrintConfig.cpp:707 src/libslic3r/PrintConfig.cpp:1151 #: src/libslic3r/PrintConfig.cpp:2722 msgid "Concentric" @@ -2360,6 +2346,22 @@ msgstr "Asystent Ko&nfiguracji" msgid "Configuration Assistant" msgstr "Asystent konfiguracji" +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 +msgid "Configuration Snapshots" +msgstr "Zrzuty konfiguracji" + +#: src/slic3r/Utils/PresetUpdater.cpp:777 +msgid "" +"Configuration Updates causes a lost of preset modification.\n" +"So, check unsaved changes and save them if necessary." +msgstr "" +"Aktualizacja konfiguracji spowoduje utratę zmian w zestawach ustawień.\n" +"Sprawdź niezapisane zmiany i w razie potrzeby zapisz je." + +#: src/slic3r/GUI/ConfigWizard.cpp:3039 +msgid "Configuration Wizard" +msgstr "Asystent Konfiguracji" + #: src/slic3r/GUI/GUI.cpp:355 msgid "" "Configuration bundle was loaded, however some configuration values were not " @@ -2401,10 +2403,6 @@ msgstr "" "systemowych i użytkownika? Zrzuty konfiguracji można przeglądać i " "przechodzić między nimi w menu Konfiguracja - Zrzuty konfiguracji." -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:123 -msgid "Configuration Snapshots" -msgstr "Zrzuty konfiguracji" - #: src/slic3r/GUI/UpdateDialogs.cpp:94 src/slic3r/GUI/UpdateDialogs.cpp:261 msgid "Configuration update" msgstr "Aktualizacja konfiguracji" @@ -2421,18 +2419,6 @@ msgstr "Dostępna jest aktualizacja konfiguracji." msgid "Configuration updates" msgstr "Aktualizacje konfiguracji" -#: src/slic3r/Utils/PresetUpdater.cpp:777 -msgid "" -"Configuration Updates causes a lost of preset modification.\n" -"So, check unsaved changes and save them if necessary." -msgstr "" -"Aktualizacja konfiguracji spowoduje utratę zmian w zestawach ustawień.\n" -"Sprawdź niezapisane zmiany i w razie potrzeby zapisz je." - -#: src/slic3r/GUI/ConfigWizard.cpp:3039 -msgid "Configuration Wizard" -msgstr "Asystent Konfiguracji" - #: src/slic3r/GUI/FirmwareDialog.cpp:916 msgid "Confirmation" msgstr "Potwierdzenie" @@ -2499,10 +2485,6 @@ msgstr "Połączenie z FlashAir działa poprawnie a przesyłanie jest włączone msgid "Connection to OctoPrint works correctly." msgstr "Połączenie z OctoPrint pomyślne." -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 -msgid "Connection to printers connected via the print host failed." -msgstr "Niepowodzenie połączenia z drukarką podłączoną do serwera druku." - #: src/slic3r/Utils/OctoPrint.cpp:292 msgid "Connection to Prusa SL1 / SL1S works correctly." msgstr "Połączenie z Prusa SL1 / SL1S działa prawidłowo." @@ -2515,9 +2497,9 @@ msgstr "Połączenie z PrusaLink działa prawidłowo." msgid "Connection to Repetier works correctly." msgstr "Połączenie z Repetier działa poprawnie." -#: src/slic3r/GUI/DoubleSlider.cpp:1458 -msgid "continue" -msgstr "kontynuuj" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:268 +msgid "Connection to printers connected via the print host failed." +msgstr "Niepowodzenie połączenia z drukarką podłączoną do serwera druku." #: src/slic3r/Config/Snapshot.cpp:601 msgid "Continue" @@ -2601,25 +2583,26 @@ msgstr "Pozycja rurki chłodzącej" msgid "Copies of the selected object" msgstr "Kopie wybranego modelu" -#: src/slic3r/GUI/GLCanvas3D.cpp:4520 +#: src/slic3r/GUI/SavePresetDialog.cpp:221 +msgctxt "PresetName" msgid "Copy" -msgstr "Kopiuj" +msgstr "Kopia" + +#: src/slic3r/GUI/AboutDialog.cpp:308 +msgid "Copy Version Info" +msgstr "Skopiuj informacje o wersji" #: src/slic3r/GUI/MainFrame.cpp:1343 msgid "Copy selection to clipboard" msgstr "Skopiuj zaznaczenie do schowka" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 -msgid "Copy to clipboard" -msgstr "Skopiuj do schowka" - #: src/slic3r/GUI/SysInfoDialog.cpp:169 msgid "Copy to Clipboard" msgstr "Kopiuj do Schowka" -#: src/slic3r/GUI/AboutDialog.cpp:308 -msgid "Copy Version Info" -msgstr "Skopiuj informacje o wersji" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:99 +msgid "Copy to clipboard" +msgstr "Skopiuj do schowka" #: src/slic3r/Utils/PresetUpdater.cpp:61 #, boost-format @@ -2770,10 +2753,6 @@ msgstr "" "finalną rozdzielczość wydruku, więc zalecane jest ustawienie tej wartości na " "rozsądnie niskim poziomie." -#: src/libslic3r/miniz_extension.cpp:117 -msgid "CRC-32 check failed" -msgstr "Weryfikacja CRC-32 nie powiodła się" - #: src/libslic3r/PrintConfig.cpp:3682 msgid "Create pad around object and ignore the support elevation" msgstr "Dodaj podkładkę wokół modelu i zignoruj podniesienie na podporach" @@ -2815,14 +2794,6 @@ msgstr "Ctrl + kółko myszy" msgid "Cubic" msgstr "Sześcienny" -#: src/slic3r/Utils/Http.cpp:91 -msgid "" -"CURL init has failed. PrusaSlicer will be unable to establish network " -"connections. See logs for additional details." -msgstr "" -"Niepowodzenie inicjalizacji CURL. PrusaSlicer nie będzie w stanie nawiązać " -"połączenia przez sieć. Szczegóły w logach." - #: src/slic3r/GUI/wxExtensions.cpp:645 #, c-format, boost-format msgid "Current mode is %s" @@ -2940,10 +2911,6 @@ msgstr "Martwa strefa:" msgid "Decimate ratio" msgstr "Współczynnik dziesiątkowania" -#: src/libslic3r/miniz_extension.cpp:111 -msgid "decompression failed or archive is corrupted" -msgstr "niepowodzenie rozpakowywania lub uszkodzone archiwum" - #: src/slic3r/GUI/Plater.cpp:5517 msgid "Decrease Instances" msgstr "Zmniejsz ilość instancji" @@ -2954,16 +2921,9 @@ msgstr "Zmniejsz ilość instancji" msgid "Default" msgstr "Domyślnie" -#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 -#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 -msgid "default" -msgstr "domyślnie" +#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 +msgid "Default SLA material profile" +msgstr "Domyślny profil materiału SLA" #: src/libslic3r/PrintConfig.cpp:1072 msgid "" @@ -2978,18 +2938,10 @@ msgstr "" msgid "Default color" msgstr "Domyślny kolor" -#: src/slic3r/GUI/GCodeViewer.cpp:3388 -msgid "default color" -msgstr "domyślny kolor" - #: src/libslic3r/PrintConfig.cpp:837 msgid "Default extrusion width" msgstr "Domyślna szerokość linii" -#: src/slic3r/GUI/Tab.cpp:1386 -msgid "default filament profile" -msgstr "domyślny profil filamentu" - #: src/libslic3r/PrintConfig.cpp:622 msgid "Default filament profile" msgstr "Domyślny profil filamentu" @@ -3004,10 +2956,6 @@ msgstr "" "wybraniu obecnego profilu drukarki automatycznie zostanie wybrany ten profil " "filamentu." -#: src/slic3r/GUI/Tab.cpp:1383 -msgid "default print profile" -msgstr "domyślny profil druku" - #: src/libslic3r/PrintConfig.cpp:629 msgid "Default print profile" msgstr "Domyślny profil druku" @@ -3023,22 +2971,6 @@ msgstr "" "obecnego profilu drukarki automatycznie zostanie wybrany ten profil " "filamentu." -#: src/slic3r/GUI/Tab.cpp:1400 -msgid "default SLA material profile" -msgstr "domyślny profil materiału SLA" - -#: src/libslic3r/PrintConfig.cpp:3395 src/libslic3r/PrintConfig.cpp:3406 -msgid "Default SLA material profile" -msgstr "Domyślny profil materiału SLA" - -#: src/slic3r/GUI/Tab.cpp:1404 -msgid "default SLA print profile" -msgstr "domyślny profil druku SLA" - -#: src/slic3r/GUI/Field.cpp:190 -msgid "default value" -msgstr "wartość domyślna" - #: src/slic3r/GUI/ConfigWizard.cpp:1177 msgid "Define a custom printer profile" msgstr "Zdefiniuj własny profil drukarki" @@ -3059,10 +2991,6 @@ msgstr "" msgid "Delay after unloading" msgstr "Opóźnienie po rozładowaniu" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "delete" -msgstr "usuń" - #: src/slic3r/GUI/GalleryDialog.cpp:118 src/slic3r/GUI/GalleryDialog.cpp:508 #: src/slic3r/GUI/GLCanvas3D.cpp:4480 src/slic3r/GUI/GUI_Factories.cpp:444 #: src/slic3r/GUI/Tab.cpp:3734 @@ -3073,11 +3001,6 @@ msgstr "Usuń" msgid "Delete &All" msgstr "Usuń &wszystko" -#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 -msgid "Delete all" -msgstr "Usuń wszystko" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1901 msgid "Delete All Instances from Object" msgstr "Usuń wszystkie instancje modelu" @@ -3086,22 +3009,6 @@ msgstr "Usuń wszystkie instancje modelu" msgid "Delete All Objects" msgstr "Usuń wszystkie obiekty" -#: src/slic3r/GUI/DoubleSlider.cpp:2012 -msgid "Delete color change" -msgstr "Usuń zmianę koloru" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 -msgid "Delete color change marker for current layer" -msgstr "Usuń punkt zmiany filamentu na obecnej warstwie" - -#: src/slic3r/GUI/DoubleSlider.cpp:2015 -msgid "Delete custom G-code" -msgstr "Usuń własny G-code" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 -msgid "Delete drainage hole" -msgstr "Usuń otwór odpływowy" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1917 msgid "Delete Height Range" msgstr "Usuń zakres wysokości" @@ -3114,33 +3021,15 @@ msgstr "Usuń instancję" msgid "Delete Object" msgstr "Usuń Model" -#: src/slic3r/GUI/GalleryDialog.cpp:118 -msgid "Delete one or more custom shape. You can't delete system shapes" -msgstr "" -"Usuń jeden lub więcej niestandardowych kształtów. Nie można usuwać kształtów " -"systemowych." - #: src/slic3r/GUI/GUI_ObjectSettings.cpp:105 #, c-format, boost-format msgid "Delete Option %s" msgstr "Usuń Opcję %s" -#: src/slic3r/GUI/DoubleSlider.cpp:2014 -msgid "Delete pause print" -msgstr "Usuń pauzę" - -#: src/slic3r/GUI/PresetComboBoxes.cpp:733 -msgid "Delete physical printer" -msgstr "Usuń fizyczną drukarkę" - #: src/slic3r/GUI/PresetComboBoxes.cpp:340 msgid "Delete Physical Printer" msgstr "Usuń fizyczną drukarkę" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 -msgid "Delete selected" -msgstr "Usuń zaznaczone" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2934 msgid "Delete Selected" msgstr "Usuń Zaznaczone" @@ -3161,6 +3050,45 @@ msgstr "Usuń ustawienia" msgid "Delete Subobject" msgstr "Usuń Model Podrzędny" +#: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 +#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4094 +msgid "Delete all" +msgstr "Usuń wszystko" + +#: src/slic3r/GUI/DoubleSlider.cpp:2012 +msgid "Delete color change" +msgstr "Usuń zmianę koloru" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:238 +msgid "Delete color change marker for current layer" +msgstr "Usuń punkt zmiany filamentu na obecnej warstwie" + +#: src/slic3r/GUI/DoubleSlider.cpp:2015 +msgid "Delete custom G-code" +msgstr "Usuń własny G-code" + +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:402 +msgid "Delete drainage hole" +msgstr "Usuń otwór odpływowy" + +#: src/slic3r/GUI/GalleryDialog.cpp:118 +msgid "Delete one or more custom shape. You can't delete system shapes" +msgstr "" +"Usuń jeden lub więcej niestandardowych kształtów. Nie można usuwać kształtów " +"systemowych." + +#: src/slic3r/GUI/DoubleSlider.cpp:2014 +msgid "Delete pause print" +msgstr "Usuń pauzę" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:733 +msgid "Delete physical printer" +msgstr "Usuń fizyczną drukarkę" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:95 +msgid "Delete selected" +msgstr "Usuń zaznaczone" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:522 msgid "Delete support point" msgstr "Usuń punkt podpory" @@ -3237,10 +3165,6 @@ msgstr "Odznacza wszystkie modele" msgid "Desktop Integration" msgstr "Integracja z pulpitem" -#: src/slic3r/GUI/NotificationManager.hpp:768 -msgid "Desktop integration failed." -msgstr "Integracja z pulpitem nie powiodła się." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:466 msgid "" "Desktop Integration sets this binary to be searchable by the system.\n" @@ -3252,6 +3176,10 @@ msgstr "" "\n" "Naciśnij \"Wykonaj\", aby kontynuować." +#: src/slic3r/GUI/NotificationManager.hpp:768 +msgid "Desktop integration failed." +msgstr "Integracja z pulpitem nie powiodła się." + #: src/slic3r/GUI/NotificationManager.hpp:766 msgid "Desktop integration was successful." msgstr "Integracja z pulpitem zakończyła się sukcesem." @@ -3345,10 +3273,6 @@ msgstr "" "\"Warstwy i obrysy\" i ustaw parametry w prawym panelu. Przeczytaj więcej w " "dokumentacji." -#: src/slic3r/GUI/Plater.cpp:3652 -msgid "differs from the original file" -msgstr "różni się od oryginalnego pliku" - #: src/libslic3r/PrintConfig.cpp:2231 msgid "Direction" msgstr "Kierunek" @@ -3522,17 +3446,13 @@ msgstr "Czy chcesz zapisać zmiany w \"%1%\"?" msgid "Do you want to save your manually edited support points?" msgstr "Czy chcesz zapisać ręcznie edytowane punkty podpór?" -#: src/slic3r/GUI/ConfigWizard.cpp:2463 -msgid "Do you want to select default filaments for these FFF printer models?" -msgstr "Czy chcesz ustawić domyślne filamenty dla tych modeli drukarek FFF?" - #: src/slic3r/GUI/ConfigWizard.cpp:2481 msgid "Do you want to select default SLA materials for these printer models?" msgstr "Czy chcesz ustawić domyślne materiały SLA dla tych modeli drukarek?" -#: src/slic3r/GUI/Plater.cpp:5202 -msgid "does not contain valid gcode." -msgstr "nie zawiera prawidłowego g-code." +#: src/slic3r/GUI/ConfigWizard.cpp:2463 +msgid "Do you want to select default filaments for these FFF printer models?" +msgstr "Czy chcesz ustawić domyślne filamenty dla tych modeli drukarek FFF?" #: src/libslic3r/PrintConfig.cpp:4353 msgid "Don't arrange" @@ -3627,10 +3547,37 @@ msgstr "Dynamicznie" msgid "E&xport" msgstr "&Eksport" +#: src/slic3r/GUI/NotificationManager.cpp:885 +msgid "ERROR" +msgstr "BŁĄD" + +#: src/slic3r/GUI/NotificationManager.cpp:1447 +#: src/slic3r/GUI/NotificationManager.cpp:1454 +#: src/slic3r/GUI/NotificationManager.cpp:1470 +#: src/slic3r/GUI/NotificationManager.cpp:1476 +#: src/slic3r/GUI/NotificationManager.cpp:1547 +msgid "ERROR:" +msgstr "BŁĄD:" + +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 +msgid "" +"ERROR: Please close all manipulators available from the left toolbar first" +msgstr "" +"ERROR: Najpierw zamknij wszystkie manipulatory dostępne z lewego paska " +"narzędzi." + +#: src/slic3r/GUI/Jobs/Job.cpp:111 +msgid "ERROR: not enough resources to execute a new job." +msgstr "BŁĄD: brak zasobów do wykonania nowego zadania." + #: src/slic3r/GUI/ImGuiWrapper.cpp:527 msgid "Edit" msgstr "Edytuj" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 +msgid "Edit Height Range" +msgstr "Edytuj Zakres Wysokości" + #: src/slic3r/GUI/DoubleSlider.cpp:2004 msgid "Edit color" msgstr "Edytuj kolor" @@ -3643,10 +3590,6 @@ msgstr "Edytuj kolor - kliknij prawym przyciskiem na kolorowy segment suwaka" msgid "Edit custom G-code" msgstr "Edytuj własny G-code" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3172 -msgid "Edit Height Range" -msgstr "Edytuj Zakres Wysokości" - #: src/slic3r/GUI/DoubleSlider.cpp:2005 msgid "Edit pause print message" msgstr "Edytuj komunikat wstrzymania wydruku" @@ -3679,10 +3622,6 @@ msgstr "Obsługiwana wektoryzacja własna:" msgid "Ejec&t SD Card / Flash Drive" msgstr "Wysuń kar&tę SD / pamięć flash" -#: src/slic3r/GUI/NotificationManager.cpp:701 -msgid "Eject drive" -msgstr "Wysuń nośnik" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:91 msgid "Eject SD card / Flash drive" msgstr "Wysuń kartę SD / pamięć flash" @@ -3691,6 +3630,10 @@ msgstr "Wysuń kartę SD / pamięć flash" msgid "Eject SD card / Flash drive after the G-code was exported to it." msgstr "Wysuń kartę SD / pamięć flash po wyeksportowaniu na nią G-code." +#: src/slic3r/GUI/NotificationManager.cpp:701 +msgid "Eject drive" +msgstr "Wysuń nośnik" + #: src/slic3r/GUI/Plater.cpp:2202 #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." @@ -3989,9 +3932,9 @@ msgstr "" msgid "Error" msgstr "Błąd" -#: src/slic3r/GUI/NotificationManager.cpp:885 -msgid "ERROR" -msgstr "BŁĄD" +#: src/slic3r/GUI/PrintHostDialogs.cpp:253 +msgid "Error Message" +msgstr "Komunikat o błędzie" #: src/slic3r/GUI/FirmwareDialog.cpp:650 #, c-format, boost-format @@ -4010,10 +3953,6 @@ msgstr "Błąd podczas zamiany" msgid "Error loading shaders" msgstr "Błąd ładowania modułów cieniujących" -#: src/slic3r/GUI/PrintHostDialogs.cpp:253 -msgid "Error Message" -msgstr "Komunikat o błędzie" - #: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " @@ -4052,30 +3991,11 @@ msgstr "Błąd!" msgid "Error! Invalid model" msgstr "Błąd! Nieprawidłowy model" -#: src/slic3r/GUI/NotificationManager.cpp:1447 -#: src/slic3r/GUI/NotificationManager.cpp:1454 -#: src/slic3r/GUI/NotificationManager.cpp:1470 -#: src/slic3r/GUI/NotificationManager.cpp:1476 -#: src/slic3r/GUI/NotificationManager.cpp:1547 -msgid "ERROR:" -msgstr "BŁĄD:" - #: src/slic3r/GUI/FirmwareDialog.cpp:652 #, c-format, boost-format msgid "Error: %s" msgstr "Błąd: %s" -#: src/slic3r/GUI/Jobs/Job.cpp:111 -msgid "ERROR: not enough resources to execute a new job." -msgstr "BŁĄD: brak zasobów do wykonania nowego zadania." - -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:196 -msgid "" -"ERROR: Please close all manipulators available from the left toolbar first" -msgstr "" -"ERROR: Najpierw zamknij wszystkie manipulatory dostępne z lewego paska " -"narzędzi." - #: src/slic3r/GUI/Plater.cpp:301 src/slic3r/GUI/Plater.cpp:1339 #: src/slic3r/GUI/Plater.cpp:1426 msgid "Estimated printing time" @@ -4097,15 +4017,6 @@ msgstr "Wydarzenie" msgid "Everywhere" msgstr "Wszędzie" -#: src/slic3r/GUI/PresetHints.cpp:59 -#, boost-format -msgid "except for the first %1% layers." -msgstr "za wyjątkiem pierwszych %1% warstw." - -#: src/slic3r/GUI/PresetHints.cpp:61 -msgid "except for the first layer." -msgstr "za wyjątkiem pierwszej warstwy." - #: src/libslic3r/Print.cpp:575 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" @@ -4154,14 +4065,14 @@ msgstr "" msgid "Expert" msgstr "Ekspert" -#: src/slic3r/GUI/ConfigWizard.cpp:1281 -msgid "Expert mode" -msgstr "Tryb Eksperta" - #: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Expert View Mode" msgstr "Tryb Widoku Eksperta" +#: src/slic3r/GUI/ConfigWizard.cpp:1281 +msgid "Expert mode" +msgstr "Tryb Eksperta" + #: src/slic3r/GUI/Plater.cpp:6492 msgid "Export" msgstr "Eksport" @@ -4182,6 +4093,63 @@ msgstr "Ekspor&t ścieżek narzędzi do OBJ" msgid "Export 3MF" msgstr "Eksport 3MF" +#: src/libslic3r/PrintConfig.cpp:4261 +msgid "Export AMF" +msgstr "Eksport AMF" + +#: src/slic3r/GUI/Plater.cpp:2853 +msgid "Export AMF file:" +msgstr "Eksport pliku AMF:" + +#: src/slic3r/GUI/MainFrame.cpp:1257 +msgid "Export Config &Bundle" +msgstr "Eks&port Paczki Konfiguracyjnej" + +#: src/slic3r/GUI/MainFrame.cpp:1260 +msgid "Export Config Bundle With Physical Printers" +msgstr "Eksport paczki konfiguracyjnej z drukarkami fizycznymi" + +#: src/slic3r/GUI/NotificationManager.cpp:1113 +msgid "Export G-Code." +msgstr "Eksport G-code." + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 +#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +msgid "Export G-code" +msgstr "Eksport G-code" + +#: src/slic3r/GUI/MainFrame.cpp:1235 +msgid "Export G-code to SD Card / Flash Drive" +msgstr "Eksport G-gode na kartę SD / pamięć flash" + +#: src/libslic3r/PrintConfig.cpp:4238 +msgid "Export OBJ" +msgstr "Eksport OBJ" + +#: src/slic3r/GUI/Plater.cpp:2865 +msgid "Export OBJ file:" +msgstr "Eksport pliku OBJ:" + +#: src/slic3r/GUI/MainFrame.cpp:1239 +msgid "Export Plate as &STL" +msgstr "Eksport stołu jako &STL" + +#: src/slic3r/GUI/MainFrame.cpp:1242 +msgid "Export Plate as STL &Including Supports" +msgstr "Eksport stołu z podporam&i do STL" + +#: src/libslic3r/PrintConfig.cpp:4250 +msgid "Export SLA" +msgstr "Eksport SLA" + +#: src/libslic3r/PrintConfig.cpp:4266 +msgid "Export STL" +msgstr "Eksport STL" + +#: src/slic3r/GUI/Plater.cpp:2846 +msgid "Export STL file:" +msgstr "Eksport pliku STL:" + #: src/slic3r/GUI/MainFrame.cpp:1260 msgid "Export all presets including physical printers to file" msgstr "" @@ -4191,14 +4159,6 @@ msgstr "" msgid "Export all presets to file" msgstr "Eksport wszystkich zestawów ustawień do pliku" -#: src/libslic3r/PrintConfig.cpp:4261 -msgid "Export AMF" -msgstr "Eksport AMF" - -#: src/slic3r/GUI/Plater.cpp:2853 -msgid "Export AMF file:" -msgstr "Eksport pliku AMF:" - #: src/slic3r/GUI/GUI_Factories.cpp:715 msgid "Export as STL" msgstr "Eksport jako STL" @@ -4207,14 +4167,6 @@ msgstr "Eksport jako STL" msgid "Export config" msgstr "Eksport konfiguracji" -#: src/slic3r/GUI/MainFrame.cpp:1257 -msgid "Export Config &Bundle" -msgstr "Eks&port Paczki Konfiguracyjnej" - -#: src/slic3r/GUI/MainFrame.cpp:1260 -msgid "Export Config Bundle With Physical Printers" -msgstr "Eksport paczki konfiguracyjnej z drukarkami fizycznymi" - #: src/slic3r/GUI/MainFrame.cpp:1254 msgid "Export current configuration to file" msgstr "Eksport obecnej konfiguracji do pliku" @@ -4240,55 +4192,14 @@ msgid "" "Export full pathnames of models and parts sources into 3mf and amf files" msgstr "Eksport pełnych ścieżek źródłowych modeli i części do plików 3MF i AMF" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 -msgid "Export G-code" -msgstr "Eksport G-code" - -#: src/slic3r/GUI/MainFrame.cpp:1235 -msgid "Export G-code to SD Card / Flash Drive" -msgstr "Eksport G-gode na kartę SD / pamięć flash" - -#: src/slic3r/GUI/NotificationManager.cpp:1113 -msgid "Export G-Code." -msgstr "Eksport G-code." - -#: src/libslic3r/PrintConfig.cpp:4238 -msgid "Export OBJ" -msgstr "Eksport OBJ" - -#: src/slic3r/GUI/Plater.cpp:2865 -msgid "Export OBJ file:" -msgstr "Eksport pliku OBJ:" - #: src/slic3r/Utils/FixModelByWin10.cpp:379 msgid "Export of a temporary 3mf file failed" msgstr "Niepowodzenie eksportu tymczasowego pliku 3MF" -#: src/slic3r/GUI/MainFrame.cpp:1239 -msgid "Export Plate as &STL" -msgstr "Eksport stołu jako &STL" - -#: src/slic3r/GUI/MainFrame.cpp:1242 -msgid "Export Plate as STL &Including Supports" -msgstr "Eksport stołu z podporam&i do STL" - -#: src/libslic3r/PrintConfig.cpp:4250 -msgid "Export SLA" -msgstr "Eksport SLA" - #: src/slic3r/GUI/Preferences.cpp:148 msgid "Export sources full pathnames to 3mf and amf" msgstr "Eksport pełnych ścieżek do 3MF i AMF" -#: src/libslic3r/PrintConfig.cpp:4266 -msgid "Export STL" -msgstr "Eksport STL" - -#: src/slic3r/GUI/Plater.cpp:2846 -msgid "Export STL file:" -msgstr "Eksport pliku STL:" - #: src/libslic3r/PrintConfig.cpp:4257 msgid "Export the model(s) as 3MF." msgstr "Eksport model(i) jako 3MF." @@ -4317,6 +4228,10 @@ msgstr "Eksport ścieżek narzędzi jako OBJ" msgid "Export." msgstr "Eksport" +#: src/libslic3r/Print.cpp:863 +msgid "Exporting G-code" +msgstr "Eksportowanie G-code" + #: src/slic3r/GUI/MainFrame.cpp:1809 msgid "Exporting configuration bundle" msgstr "Eksportowanie paczki konfiguracji" @@ -4325,10 +4240,6 @@ msgstr "Eksportowanie paczki konfiguracji" msgid "Exporting finished." msgstr "Eksport zakończony." -#: src/libslic3r/Print.cpp:863 -msgid "Exporting G-code" -msgstr "Eksportowanie G-code" - #: src/slic3r/Utils/FixModelByWin10.cpp:221 #: src/slic3r/Utils/FixModelByWin10.cpp:362 msgid "Exporting source model" @@ -4355,10 +4266,6 @@ msgstr "Czas naświetlania" msgid "External perimeter" msgstr "Obrys zewnętrzny" -#: src/slic3r/GUI/PresetHints.cpp:170 -msgid "external perimeters" -msgstr "obrysów zewnętrznych" - #: src/libslic3r/PrintConfig.cpp:727 src/libslic3r/PrintConfig.cpp:739 msgid "External perimeters" msgstr "Obrysy zewnętrzne" @@ -4404,6 +4311,10 @@ msgstr "Ekstruder %d" msgid "Extruder (tool) is changed to Extruder \"%1%\"" msgstr "Ekstruder został zmieniony na ekstruder \"%1%\"" +#: src/libslic3r/PrintConfig.cpp:804 +msgid "Extruder Color" +msgstr "Kolor ekstrudera" + #: src/slic3r/GUI/WipeTowerDialog.cpp:300 msgid "Extruder changed to" msgstr "Ekstruder zmieniony na" @@ -4412,10 +4323,6 @@ msgstr "Ekstruder zmieniony na" msgid "Extruder clearance" msgstr "Odstęp od ekstrudera" -#: src/libslic3r/PrintConfig.cpp:804 -msgid "Extruder Color" -msgstr "Kolor ekstrudera" - #: src/libslic3r/PrintConfig.cpp:811 msgid "Extruder offset" msgstr "Margines ekstrudera" @@ -4437,22 +4344,10 @@ msgstr "Liczba ekstruderów" msgid "Extrusion" msgstr "Ekstruzja" -#: src/libslic3r/PrintConfig.cpp:821 -msgid "Extrusion axis" -msgstr "Oś ekstruzji" - -#: src/libslic3r/PrintConfig.cpp:827 -msgid "Extrusion multiplier" -msgstr "Współczynnik ekstruzji" - #: src/slic3r/GUI/ConfigWizard.cpp:1567 msgid "Extrusion Temperature:" msgstr "Temperatura ekstrudera:" -#: src/slic3r/GUI/Tab.cpp:1650 -msgid "Extrusion width" -msgstr "Szerokość ekstruzji" - #: src/slic3r/GUI/GUI_Factories.cpp:134 src/libslic3r/PrintConfig.cpp:728 #: src/libslic3r/PrintConfig.cpp:838 src/libslic3r/PrintConfig.cpp:1195 #: src/libslic3r/PrintConfig.cpp:1455 src/libslic3r/PrintConfig.cpp:1956 @@ -4461,6 +4356,22 @@ msgstr "Szerokość ekstruzji" msgid "Extrusion Width" msgstr "Szerokość Ekstruzji" +#: src/libslic3r/PrintConfig.cpp:821 +msgid "Extrusion axis" +msgstr "Oś ekstruzji" + +#: src/libslic3r/PrintConfig.cpp:827 +msgid "Extrusion multiplier" +msgstr "Współczynnik ekstruzji" + +#: src/slic3r/GUI/Tab.cpp:1650 +msgid "Extrusion width" +msgstr "Szerokość ekstruzji" + +#: src/slic3r/GUI/ConfigWizard.cpp:2097 +msgid "FFF Technology Printers" +msgstr "Drukarki FFF" + #: src/slic3r/GUI/Plater.cpp:213 msgid "Facets" msgstr "Powierzchnie" @@ -4469,10 +4380,6 @@ msgstr "Powierzchnie" msgid "Faded layers" msgstr "Warstwy przejściowe" -#: src/libslic3r/miniz_extension.cpp:103 -msgid "failed finding central directory" -msgstr "nie odnaleziono katalogu centralnego" - #: src/slic3r/GUI/Plater.cpp:2516 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." @@ -4497,6 +4404,10 @@ msgstr "Niepowodzenie aktywacji zrzutu konfiguracji." msgid "Failed to drill some holes into the model" msgstr "Nie udało się wywiercić niektórych otworów w modelu" +#: src/slic3r/GUI/GCodeViewer.cpp:3296 +msgid "Fan Speed (%)" +msgstr "Prędkość wentylatora (%)" + #: src/slic3r/GUI/Tab.cpp:2007 msgid "Fan settings" msgstr "Ustawienia wentylatora" @@ -4505,10 +4416,6 @@ msgstr "Ustawienia wentylatora" msgid "Fan speed" msgstr "Prędkość wentylatora" -#: src/slic3r/GUI/GCodeViewer.cpp:3296 -msgid "Fan Speed (%)" -msgstr "Prędkość wentylatora (%)" - #: src/slic3r/GUI/PresetHints.cpp:55 #, boost-format msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%." @@ -4565,19 +4472,41 @@ msgstr "Rodzaj funkcji" msgid "Feature types" msgstr "Rodzaje funkcji" -#: src/slic3r/GUI/ConfigWizard.cpp:2097 -msgid "FFF Technology Printers" -msgstr "Drukarki FFF" - #: src/slic3r/GUI/GCodeViewer.cpp:3696 src/slic3r/GUI/GCodeViewer.cpp:3722 #: src/slic3r/GUI/GUI.cpp:339 src/slic3r/GUI/Plater.cpp:818 #: src/slic3r/GUI/Tab.cpp:1962 src/slic3r/GUI/Tab.cpp:1963 msgid "Filament" msgstr "Filament" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 -msgid "filament" -msgstr "filament" +#: src/slic3r/GUI/ConfigWizard.cpp:1489 +msgid "Filament Diameter:" +msgstr "Średnica Filamentu:" + +#: src/libslic3r/GCode.cpp:725 +msgid "Filament End G-code" +msgstr "G-code dla zakończenia filamentu" + +#: src/slic3r/GUI/Tab.cpp:1861 +msgid "Filament Overrides" +msgstr "Nadpisywane Ustawienia" + +#: src/slic3r/GUI/ConfigWizard.cpp:2912 +msgid "Filament Profiles Selection" +msgstr "Wybór profili filamentu" + +#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 +#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 +#: src/slic3r/GUI/Tab.hpp:448 +msgid "Filament Settings" +msgstr "Ustawienia Filamentu" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 +msgid "Filament Settings Tab" +msgstr "Ustawienia filamentu" + +#: src/libslic3r/GCode.cpp:718 +msgid "Filament Start G-code" +msgstr "G-code dla początku filamentu" #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Filament and Nozzle Diameters" @@ -4588,14 +4517,6 @@ msgstr "Średnice filamentu i dyszy" msgid "Filament at extruder %1%" msgstr "Filament w ekstruderze %1%" -#: src/slic3r/GUI/ConfigWizard.cpp:1489 -msgid "Filament Diameter:" -msgstr "Średnica Filamentu:" - -#: src/libslic3r/GCode.cpp:725 -msgid "Filament End G-code" -msgstr "G-code dla zakończenia filamentu" - #: src/libslic3r/PrintConfig.cpp:936 msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " @@ -4612,36 +4533,14 @@ msgstr "Czas ładowania filamentu" msgid "Filament notes" msgstr "Notatki do filamentu" -#: src/slic3r/GUI/Tab.cpp:1861 -msgid "Filament Overrides" -msgstr "Nadpisywane Ustawienia" - #: src/libslic3r/PrintConfig.cpp:1920 msgid "Filament parking position" msgstr "Pozycja zatrzymania filamentu" -#: src/slic3r/GUI/ConfigWizard.cpp:2912 -msgid "Filament Profiles Selection" -msgstr "Wybór profili filamentu" - #: src/slic3r/GUI/Tab.cpp:2024 msgid "Filament properties" msgstr "Właściwości filamentu" -#: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 -#: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 -msgid "Filament Settings" -msgstr "Ustawienia Filamentu" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3768 src/slic3r/GUI/GLCanvas3D.cpp:4589 -msgid "Filament Settings Tab" -msgstr "Ustawienia filamentu" - -#: src/libslic3r/GCode.cpp:718 -msgid "Filament Start G-code" -msgstr "G-code dla początku filamentu" - #: src/libslic3r/PrintConfig.cpp:1011 msgid "Filament type" msgstr "Typ filamentu" @@ -4650,58 +4549,18 @@ msgstr "Typ filamentu" msgid "Filament unload time" msgstr "Czas rozładowania filamentu" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 -msgid "filaments" -msgstr "filamenty" - #: src/slic3r/GUI/ConfigWizard.cpp:752 src/slic3r/GUI/ConfigWizard.cpp:2043 #: src/slic3r/GUI/ConfigWizard.cpp:2912 msgid "Filaments" msgstr "Filamenty" -#: src/libslic3r/miniz_extension.cpp:131 -msgid "file close failed" -msgstr "niepowodzenia zamykania pliku" - -#: src/libslic3r/miniz_extension.cpp:125 -msgid "file create failed" -msgstr "niepowodzenie tworzenia pliku" - -#: src/slic3r/GUI/Plater.cpp:3529 -msgid "File for the replace wasn't selected" -msgstr "Nie wybrano pliku do zamiany" - #: src/slic3r/GUI/MainFrame.cpp:1626 msgid "File Not Found" msgstr "Nie znaleziono pliku" -#: src/libslic3r/miniz_extension.cpp:145 -msgid "file not found" -msgstr "nie znaleziono pliku" - -#: src/libslic3r/miniz_extension.cpp:123 -msgid "file open failed" -msgstr "niepowodzenie otwierania pliku" - -#: src/libslic3r/miniz_extension.cpp:129 -msgid "file read failed" -msgstr "niepowodzenie odczytu pliku" - -#: src/libslic3r/miniz_extension.cpp:133 -msgid "file seek failed" -msgstr "niepowodzenie szukania pliku" - -#: src/libslic3r/miniz_extension.cpp:135 -msgid "file stat failed" -msgstr "niepowodzenie odczytu statystyk pliku" - -#: src/libslic3r/miniz_extension.cpp:95 -msgid "file too large" -msgstr "plik jest zbyt duży" - -#: src/libslic3r/miniz_extension.cpp:127 -msgid "file write failed" -msgstr "niepowodzenie zapisywania do pliku" +#: src/slic3r/GUI/Plater.cpp:3529 +msgid "File for the replace wasn't selected" +msgstr "Nie wybrano pliku do zamiany" #: src/slic3r/GUI/PrintHostDialogs.cpp:252 msgid "Filename" @@ -4779,14 +4638,6 @@ msgstr "Zakończono" msgid "Firmware" msgstr "Firmware" -#: src/slic3r/GUI/FirmwareDialog.cpp:787 -msgid "Firmware flasher" -msgstr "Flasher firmware" - -#: src/slic3r/GUI/FirmwareDialog.cpp:812 -msgid "Firmware image:" -msgstr "Obraz firmware:" - #: src/slic3r/GUI/Tab.cpp:3007 msgid "Firmware Retraction" msgstr "Retrakcja z firmware" @@ -4795,6 +4646,14 @@ msgstr "Retrakcja z firmware" msgid "Firmware Type" msgstr "Typ firmware" +#: src/slic3r/GUI/FirmwareDialog.cpp:787 +msgid "Firmware flasher" +msgstr "Flasher firmware" + +#: src/slic3r/GUI/FirmwareDialog.cpp:812 +msgid "Firmware image:" +msgstr "Obraz firmware:" + #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:116 msgid "First color" msgstr "Pierwszy kolor" @@ -4903,10 +4762,6 @@ msgstr "Przepływ" msgid "Flow rate" msgstr "Przepływ" -#: src/slic3r/GUI/PresetHints.cpp:188 -msgid "flow rate is maximized" -msgstr "przepływ osiąga wartości szczytowe" - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:670 #, boost-format msgid "" @@ -4983,16 +4838,6 @@ msgstr "" msgid "For support enforcers only" msgstr "Tylko dla wymuszania podpór" -#. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4266 -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:142 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -5045,10 +4890,6 @@ msgstr "Znaleziono zarezerwowane słowa kluczowe w" msgid "From" msgstr "Od" -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "from" -msgstr "z" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1949 msgid "From Object List You can't delete the last solid part from object." msgstr "Nie możesz usunąć ostatniej bryły modelu z Listy Modeli." @@ -5065,10 +4906,6 @@ msgstr "Widok przodu" msgid "Full fan speed at layer" msgstr "Pełna prędkość wentylatora na warstwie " -#: src/slic3r/GUI/Tab.cpp:1412 -msgid "full profile name" -msgstr "pełna nazwa profilu" - #: src/slic3r/GUI/MainFrame.cpp:1435 msgid "Fullscreen" msgstr "Pełny ekran" @@ -5083,6 +4920,12 @@ msgstr "" "Czy wiesz, że możesz przełączyć PrusaSlicer do trybu pełnoekranowego? Użyj " "klawisza F11." +#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 +#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 +#: src/libslic3r/PrintConfig.cpp:1286 +msgid "Fuzzy Skin" +msgstr "Fuzzy Skin" + #: resources/data/hints.ini: [hint:Fuzzy skin] msgid "" "Fuzzy skin\n" @@ -5095,12 +4938,6 @@ msgstr "" "ścianach modeli za pomocąfunkcji \"Fuzzy Skin\"? Możesz także użyć " "modyfikatorów, aby zastosować efekt tylko do części modelu." -#: src/slic3r/GUI/GUI_Factories.cpp:130 src/libslic3r/PrintConfig.cpp:1260 -#: src/libslic3r/PrintConfig.cpp:1261 src/libslic3r/PrintConfig.cpp:1276 -#: src/libslic3r/PrintConfig.cpp:1286 -msgid "Fuzzy Skin" -msgstr "Fuzzy Skin" - #: src/slic3r/GUI/Tab.cpp:1500 msgid "Fuzzy skin (experimental)" msgstr "Fuzzy Skin (eksperymentalna)" @@ -5117,10 +4954,6 @@ msgstr "Grubość Fuzzy Skin" msgid "Fuzzy skin type." msgstr "Rodzaj Fuzzy Skin." -#: src/libslic3r/PrintConfig.cpp:1057 -msgid "g" -msgstr "g" - #: src/slic3r/GUI/MainFrame.cpp:1661 msgid "G-code" msgstr "G-code" @@ -5163,13 +4996,13 @@ msgstr "Miniaturki G-code" msgid "G-code viewer" msgstr "Przeglądarka G-code" -#: src/libslic3r/PrintConfig.cpp:1006 -msgid "g/cm³" -msgstr "g/cm³" +#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 +msgid "GNU Affero General Public License, version 3" +msgstr "Ogólna Licencja Publiczna (GPL) GNU Affero, wersja 3" -#: src/libslic3r/PrintConfig.cpp:3288 -msgid "g/ml" -msgstr "g/ml" +#: src/slic3r/GUI/Preferences.cpp:343 +msgid "GUI" +msgstr "GUI" #: src/slic3r/GUI/GUI_Factories.cpp:471 msgid "Gallery" @@ -5221,10 +5054,6 @@ msgstr "Generowanie podpór" msgid "Generate supports for the models" msgstr "Generowanie podpór dla modeli" -#: src/slic3r/GUI/Plater.cpp:4107 -msgid "generated warnings" -msgstr "wygenerowane ostrzeżenia" - #: src/libslic3r/Print.cpp:867 msgid "Generating G-code" msgstr "Generowanie G-code" @@ -5269,10 +5098,6 @@ msgstr "Generowanie bufora wierzchołków" msgid "Generic" msgstr "Źródłowy" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 -msgid "Gizmo cut" -msgstr "Cięcie przy pomocy \"uchwytów\"" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:155 msgid "Gizmo FDM paint-on seam" msgstr "Uchwyt malowania szwu FDM" @@ -5281,14 +5106,6 @@ msgstr "Uchwyt malowania szwu FDM" msgid "Gizmo FDM paint-on supports" msgstr "Uchwyt malowania podpór FDM" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 -msgid "Gizmo move" -msgstr "Przemieszczanie przy pomocy \"uchwytów\"" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 -msgid "Gizmo move: Press to snap by 1mm" -msgstr "Przesuwanie uchwytem: naciśnij, aby przyciągać co 1 mm" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:156 msgid "Gizmo Multi Material painting" msgstr "Uchwyt malowania Multi Material" @@ -5297,6 +5114,26 @@ msgstr "Uchwyt malowania Multi Material" msgid "Gizmo Place face on bed" msgstr "Położenie na płaszczyźnie przy pomocy \"uchwytów\"" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 +msgid "Gizmo SLA hollow" +msgstr "Drążenie SLA z uchwytem" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 +msgid "Gizmo SLA support points" +msgstr "Punkty podpór SLA przy pomocy \"uchwytów\"" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:150 +msgid "Gizmo cut" +msgstr "Cięcie przy pomocy \"uchwytów\"" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 +msgid "Gizmo move" +msgstr "Przemieszczanie przy pomocy \"uchwytów\"" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 +msgid "Gizmo move: Press to snap by 1mm" +msgstr "Przesuwanie uchwytem: naciśnij, aby przyciągać co 1 mm" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:149 msgid "Gizmo rotate" msgstr "Obracanie przy pomocy \"uchwytów\"" @@ -5329,14 +5166,6 @@ msgstr "Skalowanie uchwytem: naciśnij, aby przyciągać co 5%" msgid "Gizmo scale: Scale selection to fit print volume" msgstr "Skalowanie uchwytem: skaluj wybrane do rozmiarów obszaru roboczego" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 -msgid "Gizmo SLA hollow" -msgstr "Drążenie SLA z uchwytem" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 -msgid "Gizmo SLA support points" -msgstr "Punkty podpór SLA przy pomocy \"uchwytów\"" - #: src/slic3r/GUI/GLCanvas3D.cpp:2557 #: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:560 msgid "Gizmo-Move" @@ -5359,10 +5188,6 @@ msgstr "Uchwyt-Skaluj" msgid "Gizmos" msgstr "Uchwyty" -#: src/slic3r/GUI/AboutDialog.cpp:270 src/slic3r/GUI/GUI_App.cpp:268 -msgid "GNU Affero General Public License, version 3" -msgstr "Ogólna Licencja Publiczna (GPL) GNU Affero, wersja 3" - #: src/slic3r/GUI/ConfigWizard.cpp:1486 msgid "" "Good precision is required, so use a caliper and do multiple measurements " @@ -5383,14 +5208,36 @@ msgstr "Grupa" msgid "Group manipulation" msgstr "Manipulacja grupą" -#: src/slic3r/GUI/Preferences.cpp:343 -msgid "GUI" -msgstr "GUI" - #: src/libslic3r/PrintConfig.cpp:1154 msgid "Gyroid" msgstr "Gyroidalny" +#: src/libslic3r/PrintConfig.cpp:352 +msgid "HTTP digest" +msgstr "HTTP digest" + +#: src/slic3r/Utils/Repetier.cpp:246 +#, boost-format +msgid "" +"HTTP status: %1%\n" +"Message body: \"%2%\"" +msgstr "" +"Status HTTP: %1%\n" +"Treść wiadomości: \"%2%\"" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 +#: src/libslic3r/PrintConfig.cpp:307 +msgid "HTTPS CA File" +msgstr "Plik certyfikatu HTTPS CA" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" +"Plik HTTPS CA jest opcjonalny. Jest potrzebny jedynie w sytuacji, gdy " +"używasz HTTPS z certyfikatem samopodpisanym." + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:39 msgid "Head diameter" msgstr "Średnica łącznika" @@ -5561,14 +5408,14 @@ msgstr "Zmiana parametrów drążenia" msgid "Honeycomb" msgstr "Plaster miodu" -#: src/slic3r/GUI/Tab.cpp:1469 -msgid "Horizontal shells" -msgstr "Powłoka pozioma" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:254 msgid "Horizontal Slider" msgstr "Suwak poziomy" +#: src/slic3r/GUI/Tab.cpp:1469 +msgid "Horizontal shells" +msgstr "Powłoka pozioma" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:219 #: src/slic3r/GUI/KBShortcutsDialog.cpp:223 msgid "Horizontal slider - Move active thumb Left" @@ -5633,40 +5480,14 @@ msgstr "Jak stosować limity" msgid "How to apply the Machine Limits" msgstr "Jak stosować limity maszynowe" -#: src/libslic3r/PrintConfig.cpp:352 -msgid "HTTP digest" -msgstr "HTTP digest" - -#: src/slic3r/Utils/Repetier.cpp:246 -#, boost-format -msgid "" -"HTTP status: %1%\n" -"Message body: \"%2%\"" -msgstr "" -"Status HTTP: %1%\n" -"Treść wiadomości: \"%2%\"" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:404 -#: src/libslic3r/PrintConfig.cpp:307 -msgid "HTTPS CA File" -msgstr "Plik certyfikatu HTTPS CA" - -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:364 -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." -msgstr "" -"Plik HTTPS CA jest opcjonalny. Jest potrzebny jedynie w sytuacji, gdy " -"używasz HTTPS z certyfikatem samopodpisanym." +#: src/slic3r/GUI/PrintHostDialogs.cpp:247 +msgid "ID" +msgstr "ID" #: src/slic3r/GUI/Preferences.cpp:694 msgid "Icon size in a respect to the default size" msgstr "Rozmiar ikon w odniesieniu do domyślnego" -#: src/slic3r/GUI/PrintHostDialogs.cpp:247 -msgid "ID" -msgstr "ID" - #: src/libslic3r/PrintConfig.cpp:2511 msgid "" "If checked, supports will be generated automatically based on the overhang " @@ -5702,6 +5523,43 @@ msgstr "" "ustawień w tle. Będą one pobierane do folderu tymczasowego. Opcja " "aktualizacji ustawień będzie oferowana przy starcie aplikacji." +#: src/slic3r/GUI/Preferences.cpp:289 +msgid "If enabled, PrusaSlicer will be open at the position it was closed" +msgstr "" +"Jeśli włączone, PrusaSlicer zostanie uruchomiony z położeniem okna, w którym " +"został zamknięty." + +#: src/slic3r/GUI/Preferences.cpp:384 +msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." +msgstr "Jeśli włączone, PrusaSlicer nie będzie otwierać linków w przeglądarce." + +#: src/slic3r/GUI/Preferences.cpp:410 +msgid "" +"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " +"will be used." +msgstr "" +"Jeśli włączone, zakładki ustawień zostaną umieszczone jako elementy menu. " +"Jeśli wyłączone, widoczny będzie stary interfejs." + +#: src/slic3r/GUI/Preferences.cpp:177 +msgid "" +"If enabled, Slic3r 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 "" +"Włączenie powoduje pobieranie wbudowanych systemowych zestawów ustawień w " +"tle. Te ustawienia są pobierane do oddzielnej lokalizacji tymczasowej. Jeśli " +"pojawi się nowa wersja to opcja jej instalacji pojawi się przy starcie " +"aplikacji." + +#: src/slic3r/GUI/Preferences.cpp:498 +msgid "" +"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." +msgstr "" +"Jeśli włączone, interfejs będzie używać kolorów trybu ciemnego. Jeśli " +"wyłączone, widoczny będzie stary interfejs." + #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:174 msgid "If enabled, a repetition of the next random color will be allowed." msgstr "" @@ -5715,6 +5573,14 @@ msgstr "" "Jeśli ta opcja będzie aktywna, to wszystkie ekstrudery będą czyszczone na " "przedniej krawędzi stołu na początku wydruku." +#: src/slic3r/GUI/Preferences.cpp:150 +msgid "" +"If enabled, allows the Reload from disk command to automatically find and " +"load the files when invoked." +msgstr "" +"Jeśli włączone, pozwala poleceniu Wczytaj ponownie z dysku automatycznie " +"odnaleźć i wczytać pliki." + #: src/slic3r/GUI/ConfigWizard.cpp:1250 msgid "" "If enabled, allows the Reload from disk command to automatically find and " @@ -5727,14 +5593,6 @@ msgstr "" "Jeśli wyłączone, to polecenie będzie otwierać okno dialogowe, w którym " "wskażesz plik źródłowy." -#: src/slic3r/GUI/Preferences.cpp:150 -msgid "" -"If enabled, allows the Reload from disk command to automatically find and " -"load the files when invoked." -msgstr "" -"Jeśli włączone, pozwala poleceniu Wczytaj ponownie z dysku automatycznie " -"odnaleźć i wczytać pliki." - #: src/slic3r/GUI/Preferences.cpp:509 msgid "" "If enabled, application will use the standard Windows system menu,\n" @@ -5766,16 +5624,6 @@ msgstr "" "podglądzie dotyczą tylko górnej warstwy G-code. Jeśli wyłączone, to zmiany " "dokonywane za pomocą suwaka sekwencyjnego w podglądzie dotyczą całego G-code." -#: src/slic3r/GUI/Preferences.cpp:289 -msgid "If enabled, PrusaSlicer will be open at the position it was closed" -msgstr "" -"Jeśli włączone, PrusaSlicer zostanie uruchomiony z położeniem okna, w którym " -"został zamknięty." - -#: src/slic3r/GUI/Preferences.cpp:384 -msgid "If enabled, PrusaSlicer will not open hyperlinks in your browser." -msgstr "Jeśli włączone, PrusaSlicer nie będzie otwierać linków w przeglądarce." - #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:166 msgid "If enabled, random sequence of the selected extruders will be used." msgstr "" @@ -5790,6 +5638,14 @@ msgstr "" msgid "If enabled, reverses the direction of zoom with mouse wheel" msgstr "Jeśli włączone, kierunek kółka myszy zostanie odwrócony" +#: src/slic3r/GUI/Preferences.cpp:260 +msgid "" +"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." +"gcode files." +msgstr "" +"Jeśli włączone, ustawia podgląd G-code w PrusaSlicer jako domyślną aplikację " +"do otwierania plików .gcode" + #: src/slic3r/GUI/Preferences.cpp:159 msgid "If enabled, sets PrusaSlicer as default application to open .3mf files." msgstr "" @@ -5802,34 +5658,6 @@ msgstr "" "Jeśli włączone, ustawia PrusaSlicer jako domyślną aplikację do otwierania " "plików .stl." -#: src/slic3r/GUI/Preferences.cpp:260 -msgid "" -"If enabled, sets PrusaSlicer G-code Viewer as default application to open ." -"gcode files." -msgstr "" -"Jeśli włączone, ustawia podgląd G-code w PrusaSlicer jako domyślną aplikację " -"do otwierania plików .gcode" - -#: src/slic3r/GUI/Preferences.cpp:410 -msgid "" -"If enabled, Settings Tabs will be placed as menu items. If disabled, old UI " -"will be used." -msgstr "" -"Jeśli włączone, zakładki ustawień zostaną umieszczone jako elementy menu. " -"Jeśli wyłączone, widoczny będzie stary interfejs." - -#: src/slic3r/GUI/Preferences.cpp:177 -msgid "" -"If enabled, Slic3r 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 "" -"Włączenie powoduje pobieranie wbudowanych systemowych zestawów ustawień w " -"tle. Te ustawienia są pobierane do oddzielnej lokalizacji tymczasowej. Jeśli " -"pojawi się nowa wersja to opcja jej instalacji pojawi się przy starcie " -"aplikacji." - #: src/slic3r/GUI/Preferences.cpp:270 msgid "" "If enabled, the 3D scene will be rendered in Retina resolution. If you are " @@ -5884,13 +5712,6 @@ msgstr "" "zjedzie w dół, aby kontynuować czyszczenie na wieży. Użytkownik musi upewnić " "się, że nie nastąpi kolizja głowicy z wydrukiem." -#: src/slic3r/GUI/Preferences.cpp:498 -msgid "" -"If enabled, UI will use Dark mode colors. If disabled, old UI will be used." -msgstr "" -"Jeśli włączone, interfejs będzie używać kolorów trybu ciemnego. Jeśli " -"wyłączone, widoczny będzie stary interfejs." - #: src/slic3r/GUI/Preferences.cpp:328 msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" @@ -5999,15 +5820,6 @@ msgstr "" "Jeśli szacowany czas druku warstwy będzie niższy niż ta wartość to prędkość " "ruchów drukujących będzie zmniejszona, aby wydłużyć czas druku." -#: src/libslic3r/PrintConfig.cpp:852 -msgid "" -"If this is enabled, fan will never be disabled and will be kept running at " -"least at its minimum speed. Useful for PLA, harmful for ABS." -msgstr "" -"Ta opcja spowoduje, że wentylator nie wyłączy się podczas druku, tzn. zawsze " -"będzie pracował z przynajmniej minimalną prędkością. Przydatne dla PLA, może " -"szkodzić przy ABS." - #: src/slic3r/GUI/Preferences.cpp:131 msgid "" "If this is enabled, Slic3r will auto-center objects around the print bed " @@ -6032,6 +5844,15 @@ msgstr "" "Włączenie spowoduje, że Slic3r będzie za każdym razem pytał gdzie " "wyeksportować plik zamiast używać katalogu z plikami wejściowymi." +#: src/libslic3r/PrintConfig.cpp:852 +msgid "" +"If this is enabled, fan will never be disabled and will be kept running at " +"least at its minimum speed. Useful for PLA, harmful for ABS." +msgstr "" +"Ta opcja spowoduje, że wentylator nie wyłączy się podczas druku, tzn. zawsze " +"będzie pracował z przynajmniej minimalną prędkością. Przydatne dla PLA, może " +"szkodzić przy ABS." + #: src/slic3r/GUI/Preferences.cpp:214 msgid "" "If this is enabled, when starting PrusaSlicer and another instance of the " @@ -6167,26 +5988,6 @@ msgstr "Import konfiguracji z &projektu" msgid "Import Config from ini/amf/3mf/gcode" msgstr "Importuj konfigurację z ini/amf/3mf/gcode" -#: src/slic3r/GUI/Plater.cpp:5265 -msgid "Import config only" -msgstr "Tylko import konfiguracji" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 -msgid "Import file" -msgstr "Import pliku" - -#: src/slic3r/GUI/Plater.cpp:5264 -msgid "Import geometry only" -msgstr "Tylko import geometrii" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 -msgid "Import model and profile" -msgstr "Import modelu i profilu" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 -msgid "Import model only" -msgstr "Import tylko modelu" - #: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 msgid "Import Object" msgstr "Import Modelu" @@ -6195,14 +5996,6 @@ msgstr "Import Modelu" msgid "Import Objects" msgstr "Importuj Modele" -#: src/slic3r/Utils/FixModelByWin10.cpp:395 -msgid "Import of the repaired 3mf file failed" -msgstr "Niepowodzenie importu naprawionego pliku 3MF" - -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 -msgid "Import profile only" -msgstr "Import tylko profilu" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Import SL1 / SL1S Archive" msgstr "Import archiwum SL1 / SL1S" @@ -6223,6 +6016,38 @@ msgstr "Import STL/OBJ/AM&F/3MF" msgid "Import STL/OBJ/AMF/3MF without config, keep plater" msgstr "Otwórz STL/OBJ/AMF/3MF bez konfiguracji, zachowaj zawartość stołu" +#: src/slic3r/GUI/Plater.cpp:5265 +msgid "Import config only" +msgstr "Tylko import konfiguracji" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:40 +msgid "Import file" +msgstr "Import pliku" + +#: src/slic3r/GUI/Plater.cpp:5264 +msgid "Import geometry only" +msgstr "Tylko import geometrii" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 +msgid "Import model and profile" +msgstr "Import modelu i profilu" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:49 +msgid "Import model only" +msgstr "Import tylko modelu" + +#: src/slic3r/Utils/FixModelByWin10.cpp:395 +msgid "Import of the repaired 3mf file failed" +msgstr "Niepowodzenie importu naprawionego pliku 3MF" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 +msgid "Import profile only" +msgstr "Import tylko profilu" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 +msgid "Importing SLA archive" +msgstr "Importowanie archiwum SLA" + #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:164 msgid "Importing canceled." msgstr "Importowanie anulowane." @@ -6231,18 +6056,6 @@ msgstr "Importowanie anulowane." msgid "Importing done." msgstr "Importowanie zakończone." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:140 -msgid "Importing SLA archive" -msgstr "Importowanie archiwum SLA" - -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -msgid "in" -msgstr "cale" - #: src/libslic3r/GCode.cpp:764 msgid "In the custom G-code were found reserved keywords:" msgstr "W niestandardowym G-code znajdowały się zarezerwowane słowa kluczowe:" @@ -6277,41 +6090,6 @@ msgstr "Zwiększ ilość instancji" msgid "Increase/decrease edit area" msgstr "Zmniejsz/zwiększ obszar edycji" -#. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4259 -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" -"Kliknij ikonę OTWARTEJ KŁÓDKI, aby zresetować wszystkie ustawienia obecnej " -"grupy ustawień do wartości systemowych (lub domyślnych)." - -#. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4255 -msgid "" -"indicates that the settings are the same as the system (or default) values " -"for the current option group" -msgstr "" -"wskazuje na to, że ustawienia są takie same jak systemowe (lub domyślne) " -"wartości dla danej grupy opcji" - -#. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4271 -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 "" -"oznacza, że ustawienia zostały zmodyfikowane i nie odpowiadają tym z " -"ostatnio zapisanego zestawu ustawień dla obecnej grupy opcji.\n" -"Kliknij ikonę STRZAŁKI W TYŁ, aby zresetować wszystkie ustawienia w obecnej " -"grupie opcji do tych z ostatnio zapisanego zestawu ustawień." - #: src/slic3r/GUI/ConfigManipulation.cpp:199 #: src/slic3r/GUI/GUI_Factories.cpp:55 src/slic3r/GUI/GUI_Factories.cpp:128 #: src/slic3r/GUI/Plater.cpp:460 src/slic3r/GUI/Tab.cpp:1506 @@ -6325,10 +6103,6 @@ msgstr "" msgid "Infill" msgstr "Wypełnienie" -#: src/slic3r/GUI/PresetHints.cpp:174 -msgid "infill" -msgstr "wypełnienia" - #: src/libslic3r/PrintConfig.cpp:1467 msgid "Infill before perimeters" msgstr "Wypełnienie przed obrysami" @@ -6374,6 +6148,11 @@ msgstr "Wysokość pierwszej warstwy" msgid "Inner brim only" msgstr "Tylko wewnętrzny brim" +#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 +#: src/slic3r/GUI/Field.cpp:1575 +msgid "Input value is out of range" +msgstr "Wartość poza zakresem" + #: src/slic3r/GUI/Field.cpp:266 #, c-format, boost-format msgid "" @@ -6383,11 +6162,6 @@ msgstr "" "Wprowadzona wartość jest poza zakresem.\n" "Czy na pewno %s to poprawna wartość i chcesz kontynuować?" -#: src/slic3r/GUI/Field.cpp:282 src/slic3r/GUI/Field.cpp:390 -#: src/slic3r/GUI/Field.cpp:1575 -msgid "Input value is out of range" -msgstr "Wartość poza zakresem" - #: resources/data/hints.ini: [hint:Insert Custom G-code] msgid "" "Insert Custom G-code\n" @@ -6461,10 +6235,6 @@ msgstr "Rozstaw wzoru warstw łączących" msgid "Interface shells" msgstr "Powłoki łączące" -#: src/libslic3r/miniz_extension.cpp:143 -msgid "internal error" -msgstr "błąd wewnętrzny" - #: src/slic3r/GUI/GUI_App.cpp:713 #, boost-format msgid "Internal error: %1%" @@ -6475,6 +6245,10 @@ msgstr "Błąd wewnętrzny: %1%." msgid "Internal infill" msgstr "Wypełnienie wewnętrzne" +#: src/slic3r/GUI/ConfigManipulation.cpp:329 +msgid "Invalid Head penetration" +msgstr "Nieprawidłowe przenikanie łączników podpór" + #: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 msgid "Invalid data" msgstr "Nieprawidłowe dane" @@ -6484,18 +6258,6 @@ msgstr "Nieprawidłowe dane" msgid "Invalid file format." msgstr "Nieprawidłowy format pliku." -#: src/libslic3r/miniz_extension.cpp:139 -msgid "invalid filename" -msgstr "nieprawidłowa nazwa" - -#: src/slic3r/GUI/ConfigManipulation.cpp:329 -msgid "Invalid Head penetration" -msgstr "Nieprawidłowe przenikanie łączników podpór" - -#: src/libslic3r/miniz_extension.cpp:107 -msgid "invalid header or archive is corrupted" -msgstr "niewłaściwy nagłówek lub uszkodzone archiwum" - #: src/slic3r/GUI/Field.cpp:397 #, boost-format msgid "" @@ -6511,14 +6273,19 @@ msgstr "" msgid "Invalid numeric input." msgstr "Nieprawidłowa wartość numeryczna." -#: src/libslic3r/miniz_extension.cpp:137 -msgid "invalid parameter" -msgstr "nieprawidłowy parametr" - #: src/slic3r/GUI/ConfigManipulation.cpp:342 msgid "Invalid pinhead diameter" msgstr "Błędna średnica łącznika" +#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 +#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 +#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 +#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 +#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 +#: src/libslic3r/PrintConfig.cpp:1577 +msgid "Ironing" +msgstr "Prasowanie" + #: resources/data/hints.ini: [hint:Ironing] msgid "" "Ironing\n" @@ -6534,34 +6301,14 @@ msgstr "" "materiał. Przeczytaj więcej w dokumentacji. (Wymaga trybu Zaawansowany lub " "Ekspert.)" -#: src/slic3r/GUI/GUI_Factories.cpp:129 src/slic3r/GUI/GUI_Preview.cpp:245 -#: src/slic3r/GUI/Tab.cpp:1516 src/libslic3r/ExtrusionEntity.cpp:324 -#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:1537 -#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1557 -#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575 -#: src/libslic3r/PrintConfig.cpp:1577 -msgid "Ironing" -msgstr "Prasowanie" - #: src/libslic3r/PrintConfig.cpp:1542 src/libslic3r/PrintConfig.cpp:1544 msgid "Ironing Type" msgstr "Rodzaj prasowania" -#: src/slic3r/GUI/GUI_App.cpp:266 -msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." -msgstr "" -"bazuje na projekcie Slic3r autorstwa Alessandro Ranellucciego i społeczności " -"RepRap." - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:588 msgid "Is it safe?" msgstr "Czy jest to bezpieczne?" -#. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 -msgid "is licensed under the" -msgstr "ma licencję na warunkach" - #: src/slic3r/GUI/MainFrame.cpp:1114 msgid "Iso" msgstr "Izometryczny" @@ -6619,15 +6366,6 @@ msgstr "Jitter" msgid "Jump to height" msgstr "Przejdź do wysokości" -#: src/slic3r/GUI/DoubleSlider.cpp:1391 -#, c-format, boost-format -msgid "" -"Jump to height %s\n" -"or Set ruler mode" -msgstr "" -"Przejdź na wysokość %s \n" -"lub ustaw tryb linijki" - #: src/slic3r/GUI/DoubleSlider.cpp:1388 #, c-format, boost-format msgid "" @@ -6639,6 +6377,15 @@ msgstr "" "Ustaw tryb linijki\n" "lub ustaw sekwencję ekstrudera dla całego wydruku" +#: src/slic3r/GUI/DoubleSlider.cpp:1391 +#, c-format, boost-format +msgid "" +"Jump to height %s\n" +"or Set ruler mode" +msgstr "" +"Przejdź na wysokość %s \n" +"lub ustaw tryb linijki" + #: src/slic3r/GUI/DoubleSlider.cpp:1385 src/slic3r/GUI/DoubleSlider.cpp:2254 msgid "Jump to move" msgstr "Przeskocz do ruchu" @@ -6681,9 +6428,25 @@ msgstr "Skróty klawiszowe" msgid "Keyboard shortcuts" msgstr "Skróty klawiszowe" -#: src/libslic3r/PrintConfig.cpp:3281 -msgid "kg" -msgstr "kg" +#: src/slic3r/GUI/Tab.cpp:4253 +msgid "LOCKED LOCK" +msgstr "ZAMKNIĘTA KŁÓDKA" + +#: src/slic3r/GUI/Tab.cpp:4281 +msgid "" +"LOCKED LOCK icon indicates that the settings are the same as the system (or " +"default) values for the current option group" +msgstr "" +"ZAMKNIĘTA KŁÓDKA oznacza, że ustawienia są takie same jak wartości systemowe " +"(lub domyślne) w obecnej grupie ustawień" + +#: src/slic3r/GUI/Tab.cpp:4297 +msgid "" +"LOCKED LOCK icon indicates that the value is the same as the system (or " +"default) value." +msgstr "" +"ZAMKNIĘTA KŁÓDKA oznacza, że wartości są takie same jak systemowe (lub " +"domyślne)." #: src/libslic3r/PrintConfig.cpp:1353 msgid "Label objects" @@ -6737,23 +6500,11 @@ msgstr "Limit wysokości warstw" msgid "Layer range Settings to modify" msgstr "Zakres warstw dla modyfikacji ustawień" -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 -#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 -#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 -#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 -#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 -msgid "layers" -msgstr "warstwy" - #: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4500 #: src/slic3r/GUI/Tab.cpp:4591 msgid "Layers" msgstr "Warstwy" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 -msgid "Layers and perimeters" -msgstr "Warstwy i obrysy" - #: src/slic3r/GUI/GUI_Factories.cpp:54 src/slic3r/GUI/GUI_Factories.cpp:127 #: src/libslic3r/PrintConfig.cpp:264 src/libslic3r/PrintConfig.cpp:381 #: src/libslic3r/PrintConfig.cpp:424 src/libslic3r/PrintConfig.cpp:433 @@ -6767,15 +6518,9 @@ msgstr "Warstwy i obrysy" msgid "Layers and Perimeters" msgstr "Warstwy i Obrysy" -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Bottom" -msgstr "Spód" - -#: src/slic3r/GUI/OptionsGroup.cpp:352 -msgctxt "Layers" -msgid "Top" -msgstr "Góra" +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4589 +msgid "Layers and perimeters" +msgstr "Warstwy i obrysy" #: src/slic3r/GUI/Preferences.cpp:763 msgid "Layout Options" @@ -6790,6 +6535,14 @@ msgstr "Zostaw opcję \"%1%\" włączoną" msgid "Left" msgstr "Lewo" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +msgid "Left Preset Value" +msgstr "Wartość z zestawu ustawień po lewej" + +#: src/slic3r/GUI/MainFrame.cpp:1127 +msgid "Left View" +msgstr "Widok lewy" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 @@ -6806,14 +6559,6 @@ msgstr "Lewy przycisk myszy" msgid "Left mouse button:" msgstr "Lewy przycisk myszy:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 -msgid "Left Preset Value" -msgstr "Wartość z zestawu ustawień po lewej" - -#: src/slic3r/GUI/MainFrame.cpp:1127 -msgid "Left View" -msgstr "Widok lewy" - #: src/slic3r/GUI/GUI_Preview.cpp:1060 msgid "Legend/Estimated printing time" msgstr "Legenda/szacowany czas drukowania" @@ -6839,6 +6584,10 @@ msgstr "" "Umowy licencyjne dla wszystkich części programu (bibliotek) są częścią umowy " "licencyjnej programu" +#: src/libslic3r/PrintConfig.cpp:2153 +msgid "Lift Z" +msgstr "Z-hop" + #: src/libslic3r/PrintConfig.cpp:4358 msgid "" "Lift the object above the bed when it is partially below. Enabled by " @@ -6847,10 +6596,6 @@ msgstr "" "Podnieś model, jeśli jest częściowo obniżony poniżej stołu. Domyślnie " "włączone, użyj --no-ensure-on-bed, aby wyłączyć." -#: src/libslic3r/PrintConfig.cpp:2153 -msgid "Lift Z" -msgstr "Z-hop" - #: src/libslic3r/PrintConfig.cpp:1161 msgid "Lightning" msgstr "Lightning" @@ -6867,18 +6612,42 @@ msgstr "Linia" msgid "Load" msgstr "Załaduj" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 +msgid "Load Config from ini/amf/3mf/gcode and merge" +msgstr "Wczytaj Konfigurację z ini/amf/3mf/gcode i złącz" + +#: src/slic3r/GUI/Plater.cpp:5408 +msgid "Load File" +msgstr "Wczytaj plik" + +#: src/slic3r/GUI/Plater.cpp:5413 +msgid "Load Files" +msgstr "Wczytaj pliki" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Modifier" +msgstr "Wczytaj modyfikator" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 +msgid "Load Part" +msgstr "Wczytaj Element" + +#: src/slic3r/GUI/Plater.cpp:5100 +msgid "Load Project" +msgstr "Wczytaj Projekt" + #: src/slic3r/GUI/MainFrame.cpp:1201 msgid "Load a model" msgstr "Wczytaj model" -#: src/slic3r/GUI/MainFrame.cpp:1205 -msgid "Load an model saved with imperial units" -msgstr "Wczytaj model zapisany w jednostkach imperialnych" - #: src/slic3r/GUI/MainFrame.cpp:1209 msgid "Load an SL1 / Sl1S archive" msgstr "Wczytaj archiwum SL1 / SL1S" +#: src/slic3r/GUI/MainFrame.cpp:1205 +msgid "Load an model saved with imperial units" +msgstr "Wczytaj model zapisany w jednostkach imperialnych" + #: src/libslic3r/PrintConfig.cpp:4454 msgid "" "Load and store settings at the given directory. This is useful for " @@ -6906,10 +6675,6 @@ msgstr "" "W podobny sposób możesz użyć menu \"Plik -> Import -> Import archiwum SL1/" "SL1S\", co pozwala również na odtworzenie modeli 3D z danych wokselowych." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:85 -msgid "Load Config from ini/amf/3mf/gcode and merge" -msgstr "Wczytaj Konfigurację z ini/amf/3mf/gcode i złącz" - #: src/slic3r/GUI/MainFrame.cpp:1217 msgid "Load configuration from project file" msgstr "Wczytaj konfigurację z pliku projektu" @@ -6926,30 +6691,10 @@ msgstr "" msgid "Load exported configuration file" msgstr "Wczytaj wyeksportowany plik konfiguracyjny" -#: src/slic3r/GUI/Plater.cpp:5408 -msgid "Load File" -msgstr "Wczytaj plik" - -#: src/slic3r/GUI/Plater.cpp:5413 -msgid "Load Files" -msgstr "Wczytaj pliki" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Modifier" -msgstr "Wczytaj modyfikator" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1413 -msgid "Load Part" -msgstr "Wczytaj Element" - #: src/slic3r/GUI/MainFrame.cpp:1221 msgid "Load presets from a bundle" msgstr "Wczytaj zestaw ustawień" -#: src/slic3r/GUI/Plater.cpp:5100 -msgid "Load Project" -msgstr "Wczytaj Projekt" - #: src/slic3r/GUI/BedShapeDialog.cpp:203 msgid "Load shape from STL..." msgstr "Wczytaj kształt z STL..." @@ -6958,10 +6703,6 @@ msgstr "Wczytaj kształt z STL..." msgid "Load..." msgstr "Otwórz..." -#: src/slic3r/GUI/WipeTowerDialog.cpp:309 -msgid "loaded" -msgstr "załadowano" - #: src/slic3r/GUI/GUI_ObjectList.cpp:1509 src/slic3r/GUI/Plater.cpp:2379 msgid "Loading" msgstr "Ładowanie" @@ -7025,26 +6766,6 @@ msgstr "Lokalny układ współrzędnych" msgid "Lock supports under new islands" msgstr "Zablokuj podpory pod nowymi wyspami" -#: src/slic3r/GUI/Tab.cpp:4253 -msgid "LOCKED LOCK" -msgstr "ZAMKNIĘTA KŁÓDKA" - -#: src/slic3r/GUI/Tab.cpp:4281 -msgid "" -"LOCKED LOCK icon indicates that the settings are the same as the system (or " -"default) values for the current option group" -msgstr "" -"ZAMKNIĘTA KŁÓDKA oznacza, że ustawienia są takie same jak wartości systemowe " -"(lub domyślne) w obecnej grupie ustawień" - -#: src/slic3r/GUI/Tab.cpp:4297 -msgid "" -"LOCKED LOCK icon indicates that the value is the same as the system (or " -"default) value." -msgstr "" -"ZAMKNIĘTA KŁÓDKA oznacza, że wartości są takie same jak systemowe (lub " -"domyślne)." - #: src/libslic3r/PrintConfig.cpp:4457 msgid "Logging level" msgstr "Poziom logowania" @@ -7078,13 +6799,6 @@ msgstr "" "Limity maszynowe nie zostały ustawione, dlatego szacowany czas druku może " "odbiegać od rzeczywistości." -#: src/slic3r/GUI/Tab.cpp:4224 -msgid "" -"Machine limits will be emitted to G-code and used to estimate print time." -msgstr "" -"Limity maszynowe zostaną przekazane do G-code i użyte do obliczenia czasu " -"drukowania." - #: src/slic3r/GUI/Tab.cpp:4227 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " @@ -7095,6 +6809,13 @@ msgstr "" "obliczenia czasu drukowania, który może okazać się niedokładny, ponieważ " "drukarka może zastosować inne." +#: src/slic3r/GUI/Tab.cpp:4224 +msgid "" +"Machine limits will be emitted to G-code and used to estimate print time." +msgstr "" +"Limity maszynowe zostaną przekazane do G-code i użyte do obliczenia czasu " +"drukowania." + #: src/libslic3r/GCode.cpp:576 msgid "" "Make sure the object is printable. This is usually caused by negligibly " @@ -7116,7 +6837,7 @@ msgstr "Maskowany plik SLA wyeksportowany do %1%" #: src/slic3r/GUI/Tab.cpp:4004 msgid "Match single line" -msgstr "Dopasowanie pojedynczego wiersza" +msgstr "Dopasuj pojedynczy wiersz" #: src/slic3r/GUI/MainFrame.cpp:1582 msgid "Mate&rial Settings Tab" @@ -7126,10 +6847,6 @@ msgstr "Ustawienia mate&riału" msgid "Material" msgstr "Materiał" -#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 -msgid "Material printing profile" -msgstr "Profil materiału używanego do drukowania" - #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 #: src/slic3r/GUI/Tab.hpp:522 @@ -7140,6 +6857,10 @@ msgstr "Ustawienia materiału" msgid "Material Settings Tab" msgstr "Ustawienia materiału" +#: src/slic3r/GUI/Tab.cpp:4546 src/slic3r/GUI/Tab.cpp:4547 +msgid "Material printing profile" +msgstr "Profil materiału używanego do drukowania" + #: src/libslic3r/PrintConfig.cpp:1749 src/libslic3r/PrintConfig.cpp:1758 msgid "Max" msgstr "Max" @@ -7168,10 +6889,6 @@ msgstr "Maksymalna wysokość wydruku" msgid "Max print speed" msgstr "Maksymalna prędkość druku" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 -msgid "max PrusaSlicer version" -msgstr "max wersja PrusaSlicer" - #: src/libslic3r/PrintConfig.cpp:1800 msgid "Max volumetric slope negative" msgstr "Maksymalny negatywny kąt zwisu" @@ -7196,6 +6913,18 @@ msgstr "Minimalny odstęp pomiędzy podporami w sekcjach rzadkiego wypełnienia. msgid "Maximum acceleration E" msgstr "Maksymalne przyspieszenie E" +#: src/libslic3r/PrintConfig.cpp:1661 +msgid "Maximum acceleration X" +msgstr "Maksymalne przyspieszenie X" + +#: src/libslic3r/PrintConfig.cpp:1662 +msgid "Maximum acceleration Y" +msgstr "Maksymalne przyspieszenie Y" + +#: src/libslic3r/PrintConfig.cpp:1663 +msgid "Maximum acceleration Z" +msgstr "Maksymalne przyspieszenie Z" + #: src/libslic3r/PrintConfig.cpp:1740 msgid "Maximum acceleration for travel moves" msgstr "Maksymalne przyspieszenie podczas ruchów jałowych" @@ -7244,18 +6973,6 @@ msgstr "Maksymalne przyspieszenie podczas retrakcji" msgid "Maximum acceleration when retracting (M204 R)" msgstr "Maksymalne przyspieszenie przy retrakcji (M204 R)" -#: src/libslic3r/PrintConfig.cpp:1661 -msgid "Maximum acceleration X" -msgstr "Maksymalne przyspieszenie X" - -#: src/libslic3r/PrintConfig.cpp:1662 -msgid "Maximum acceleration Y" -msgstr "Maksymalne przyspieszenie Y" - -#: src/libslic3r/PrintConfig.cpp:1663 -msgid "Maximum acceleration Z" -msgstr "Maksymalne przyspieszenie Z" - #: src/slic3r/GUI/Tab.cpp:2655 msgid "Maximum accelerations" msgstr "Maksymalne przyspieszenia" @@ -7286,6 +7003,18 @@ msgstr "Maksymalny czas naświetlania" msgid "Maximum feedrate E" msgstr "Maksymalny posuw E" +#: src/libslic3r/PrintConfig.cpp:1644 +msgid "Maximum feedrate X" +msgstr "Maksymalny posuw osi X" + +#: src/libslic3r/PrintConfig.cpp:1645 +msgid "Maximum feedrate Y" +msgstr "Maksymalny posuw Y" + +#: src/libslic3r/PrintConfig.cpp:1646 +msgid "Maximum feedrate Z" +msgstr "Maksymalny posuw Z" + #: src/libslic3r/PrintConfig.cpp:1653 msgid "Maximum feedrate of the E axis" msgstr "Maksymalny posuw (prędkość ruchu) osi E (ekstrudera)" @@ -7302,18 +7031,6 @@ msgstr "Maksymalny posuw (prędkość ruchu) osi Y" msgid "Maximum feedrate of the Z axis" msgstr "Maksymalny posuw (prędkość ruchu) osi Z" -#: src/libslic3r/PrintConfig.cpp:1644 -msgid "Maximum feedrate X" -msgstr "Maksymalny posuw osi X" - -#: src/libslic3r/PrintConfig.cpp:1645 -msgid "Maximum feedrate Y" -msgstr "Maksymalny posuw Y" - -#: src/libslic3r/PrintConfig.cpp:1646 -msgid "Maximum feedrate Z" -msgstr "Maksymalny posuw Z" - #: src/slic3r/GUI/Tab.cpp:2650 msgid "Maximum feedrates" msgstr "Maksymalne prędkości posuwu" @@ -7326,6 +7043,18 @@ msgstr "Maksymalny początkowy czas naświetlania" msgid "Maximum jerk E" msgstr "Maksymalny jerk E" +#: src/libslic3r/PrintConfig.cpp:1678 +msgid "Maximum jerk X" +msgstr "Maksymalny jerk X" + +#: src/libslic3r/PrintConfig.cpp:1679 +msgid "Maximum jerk Y" +msgstr "Maksymalny jerk Y" + +#: src/libslic3r/PrintConfig.cpp:1680 +msgid "Maximum jerk Z" +msgstr "Maksymalny jerk Z" + #: src/libslic3r/PrintConfig.cpp:1687 msgid "Maximum jerk of the E axis" msgstr "Maksymalny jerk dla osi E (ekstrudera)" @@ -7342,18 +7071,6 @@ msgstr "Maksymalny jerk osi Y" msgid "Maximum jerk of the Z axis" msgstr "Maksymalny jerk dla osi Z" -#: src/libslic3r/PrintConfig.cpp:1678 -msgid "Maximum jerk X" -msgstr "Maksymalny jerk X" - -#: src/libslic3r/PrintConfig.cpp:1679 -msgid "Maximum jerk Y" -msgstr "Maksymalny jerk Y" - -#: src/libslic3r/PrintConfig.cpp:1680 -msgid "Maximum jerk Z" -msgstr "Maksymalny jerk Z" - #: src/libslic3r/PrintConfig.cpp:1423 msgid "Maximum length of the infill anchor" msgstr "Maksymalna długość kotwiczenia wypełnienia" @@ -7445,10 +7162,6 @@ msgstr "Min" msgid "Min print speed" msgstr "Minimalna prędkość druku" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 -msgid "min PrusaSlicer version" -msgstr "min wersja PrusaSlicer" - #: src/libslic3r/PrintConfig.cpp:3597 msgid "Minimal distance of the support points" msgstr "Minimalne rozmieszczenie punktów podpór" @@ -7511,6 +7224,10 @@ msgstr "Minimalna prędkość posuwu" msgid "Minimum initial exposure time" msgstr "Minimalny początkowy czas naświetlania" +#: src/slic3r/GUI/Tab.cpp:1475 +msgid "Minimum shell thickness" +msgstr "Minimalna grubość powłoki" + #: resources/data/hints.ini: [hint:Minimum shell thickness] msgid "" "Minimum shell thickness\n" @@ -7523,10 +7240,6 @@ msgstr "" "Minimalną grubość powłoki w milimetrach? Ta cecha jest szczególnie " "przydatna, gdy używasz funkcji zmiennej wysokości warstwy." -#: src/slic3r/GUI/Tab.cpp:1475 -msgid "Minimum shell thickness" -msgstr "Minimalna grubość powłoki" - #: src/libslic3r/PrintConfig.cpp:2374 src/libslic3r/PrintConfig.cpp:2375 msgid "Minimum thickness of a top / bottom shell" msgstr "Minimalna grubość górnej/dolnej powłoki" @@ -7562,6 +7275,10 @@ msgid "" msgstr "" "Minimalna szerokość detali do zachowania podczas kompensacji stopy słonia." +#: src/slic3r/GUI/GUI_Factories.cpp:885 +msgid "Mirror" +msgstr "Lustrzane" + #: resources/data/hints.ini: [hint:Mirror] msgid "" "Mirror\n" @@ -7573,18 +7290,14 @@ msgstr "" "odwróconą wersję? Kliknij prawym przyciskiem myszy na model, wybierz " "\"Lustrzane\", następnie oś, w której ma zostać odbity." -#: src/slic3r/GUI/GUI_Factories.cpp:885 -msgid "Mirror" -msgstr "Lustrzane" +#: src/slic3r/GUI/GLCanvas3D.cpp:1684 +msgid "Mirror Object" +msgstr "Odbicie Lustrzane" #: src/libslic3r/PrintConfig.cpp:3131 msgid "Mirror horizontally" msgstr "Odbij w poziomie" -#: src/slic3r/GUI/GLCanvas3D.cpp:1684 -msgid "Mirror Object" -msgstr "Odbicie Lustrzane" - #: src/slic3r/GUI/GUI_Factories.cpp:885 msgid "Mirror the selected object" msgstr "Odbicie lustrzane wybranego modelu" @@ -7615,133 +7328,10 @@ msgstr "Niepasujący typ serwera wydruku: %s" msgid "Mixed" msgstr "Mieszane" -#: src/libslic3r/PrintConfig.cpp:3274 -msgid "ml" -msgstr "ml" - -#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 -#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 -#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 -#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 -#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 -#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 -#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 -#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 -#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 -#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 -#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 -#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 -#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 -#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 -#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 -#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 -#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 -#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 -#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 -#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 -#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 -#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 -#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 -#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 -#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 -#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 -#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 -#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 -#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 -#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 -#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 -#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 -#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 -#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 -#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 -#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 -#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 -#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 -#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 -#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 -#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 -#: src/libslic3r/PrintConfig.cpp:3767 -msgid "mm" -msgstr "mm" - -#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 -#: src/libslic3r/PrintConfig.cpp:2148 -msgid "mm (zero to disable)" -msgstr "mm (zero, aby wyłączyć)" - -#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 -#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 -#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 -#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 -#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 -#: src/libslic3r/PrintConfig.cpp:2845 -msgid "mm or %" -msgstr "mm lub %" - -#: src/libslic3r/PrintConfig.cpp:385 -msgid "mm or % (zero to disable)" -msgstr "mm lub % (zero, aby wyłączyć)" - -#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 -#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 -#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 -#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 -#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 -#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 -#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 -#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 -#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 -#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 -#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 -msgid "mm/s" -msgstr "mm/s" - -#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 -#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 -#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 -#: src/libslic3r/PrintConfig.cpp:2859 -msgid "mm/s or %" -msgstr "mm/s lub %" - -#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 -#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 -#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 -#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 -#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 -msgid "mm/s²" -msgstr "mm/s²" - -#: src/libslic3r/PrintConfig.cpp:2316 -msgid "mm²" -msgstr "mm²" - -#: src/libslic3r/PrintConfig.cpp:957 -msgid "mm³" -msgstr "mm³" - -#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 -#: src/libslic3r/PrintConfig.cpp:1782 -msgid "mm³/s" -msgstr "mm³/s" - -#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 -msgid "mm³/s²" -msgstr "mm³/s²" - #: src/slic3r/GUI/GUI_App.cpp:2245 msgid "Mode" msgstr "&Tryb" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "model" -msgstr "model" - #: src/slic3r/GUI/BedShapeDialog.cpp:344 msgid "Model" msgstr "Model" @@ -7754,19 +7344,10 @@ msgstr "Anulowano naprawę modelu" msgid "Model repair finished" msgstr "Ukończono naprawę modelu" -#: src/slic3r/GUI/GUI_App.cpp:2239 src/slic3r/GUI/wxExtensions.cpp:710 -msgctxt "Mode" -msgid "Advanced" -msgstr "Zaawansowany" - #: src/slic3r/GUI/Tab.cpp:1319 msgid "Modifications to the current profile will be saved." msgstr "Modyfikacje zostaną zapisane na obecnym profilu." -#: src/slic3r/GUI/GUI_App.cpp:2159 -msgid "modified" -msgstr "zmodyfikowano" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Modifier" msgstr "Modyfikator" @@ -7775,14 +7356,6 @@ msgstr "Modyfikator" msgid "Modifiers" msgstr "Modyfikatory" -#: src/libslic3r/PrintConfig.cpp:3295 -msgid "money/bottle" -msgstr "pieniędzy/butelkę" - -#: src/libslic3r/PrintConfig.cpp:1047 -msgid "money/kg" -msgstr "pieniędzy/kg" - #: src/libslic3r/PrintConfig.cpp:705 msgid "Monotonic" msgstr "Monotoniczny" @@ -7814,6 +7387,10 @@ msgstr "Kółko myszy:" msgid "Move" msgstr "Przesuń" +#: src/slic3r/GUI/GLCanvas3D.cpp:3245 +msgid "Move Object" +msgstr "Przesuń Model" + #: src/slic3r/GUI/KBShortcutsDialog.cpp:234 msgid "Move active thumb Down" msgstr "Przesuń aktywny punkt w dół" @@ -7838,10 +7415,6 @@ msgstr "Przesunięcie płaszczyzny przecinania" msgid "Move drainage hole" msgstr "Przesuń otwór odpływowy" -#: src/slic3r/GUI/GLCanvas3D.cpp:3245 -msgid "Move Object" -msgstr "Przesuń Model" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 msgid "Move point" msgstr "Przesuń punkt" @@ -7931,6 +7504,14 @@ msgstr "Pomnóż ilość kopii przez tę wartość." msgid "N/A" msgstr "N/D" +#: src/slic3r/GUI/RammingChart.cpp:29 +msgid "NO RAMMING AT ALL" +msgstr "BRAK WYCISKANIA" + +#: src/slic3r/GUI/GUI_Preview.cpp:728 +msgid "NOTE:" +msgstr "UWAGA:" + #: src/slic3r/GUI/GUI_ObjectList.cpp:297 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:139 msgid "Name" @@ -7962,6 +7543,10 @@ msgstr "Nazwy zestawów ustawień odnoszących się do drukarki fizycznej" msgid "Nearest" msgstr "Najbliższy" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 +msgid "Negative Volume" +msgstr "Odejmowanie kształtu" + #: resources/data/hints.ini: [hint:Negative volume] msgid "" "Negative volume\n" @@ -7976,14 +7561,18 @@ msgstr "" "skalowania otwory bezpośrednio w PrusaSlicer. Przeczytaj więcej w " "dokumentacji. (Wymaga trybu \"Zaawansowany\" lub \"Ekspert\")." -#: src/slic3r/GUI/GUI_ObjectList.cpp:3780 -msgid "Negative Volume" -msgstr "Odejmowanie kształtu" - #: src/slic3r/GUI/BonjourDialog.cpp:55 msgid "Network lookup" msgstr "Podgląd sieci" +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +msgid "New Project" +msgstr "Nowy Projekt" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +msgid "New Value" +msgstr "Nowa wartość" + #: src/slic3r/GUI/Preferences.cpp:744 msgid "New layout, access via settings button in the top menu" msgstr "Nowy układ z dostępem przez przycisk ustawień w górnym menu" @@ -7997,10 +7586,6 @@ msgstr "Dostępna jest nowa wersja przedpremierowa %1% ." msgid "New printer preset selected" msgstr "Wybrano nowy zestaw ustawień drukarki" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 -msgid "New Project" -msgstr "Nowy Projekt" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:77 msgid "New project, clear plater" msgstr "Nowy projekt, wyczyść stół" @@ -8010,10 +7595,6 @@ msgstr "Nowy projekt, wyczyść stół" msgid "New release version %1% is available." msgstr "Dostępna jest nowa wersja stabilna %1%." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 -msgid "New Value" -msgstr "Nowa wartość" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 #, c-format, boost-format msgid "New version of %s is available" @@ -8065,10 +7646,6 @@ msgstr "" msgid "No previously sliced file." msgstr "Brak poprzednio pociętych plików." -#: src/slic3r/GUI/RammingChart.cpp:29 -msgid "NO RAMMING AT ALL" -msgstr "BRAK WYCISKANIA" - #: src/libslic3r/PrintConfig.cpp:2471 msgid "No sparse layers (EXPERIMENTAL)" msgstr "Brak warstw bez czyszczenia (EKSPERYMENTALNE)" @@ -8093,18 +7670,10 @@ msgstr "Brak" msgid "Normal" msgstr "Normalny" -#: src/slic3r/GUI/Plater.cpp:1428 -msgid "normal mode" -msgstr "tryb normalny" - #: src/slic3r/GUI/GCodeViewer.cpp:3754 msgid "Normal mode" msgstr "Tryb normalny" -#: src/libslic3r/miniz_extension.cpp:105 -msgid "not a ZIP archive" -msgstr "nie jest archiwum ZIP" - #: src/slic3r/GUI/BedShapeDialog.cpp:317 src/slic3r/GUI/BedShapeDialog.cpp:388 msgid "Not found:" msgstr "Nie znaleziono:" @@ -8148,10 +7717,6 @@ msgstr[3] "" "Weź pod uwagę, że te drukarki zostaną usunięte przy usuwaniu wybranego " "zestawu ustawień." -#: src/slic3r/GUI/GUI_Preview.cpp:728 -msgid "NOTE:" -msgstr "UWAGA:" - #: src/slic3r/GUI/Tab.cpp:2249 msgid "" "Note: All parameters from this group are moved to the Physical Printer " @@ -8194,14 +7759,14 @@ msgstr "Uwaga: wymagany jest OctoPrint w wersji 1.1.0 lub wyższej." msgid "Note: Repetier version at least 0.90.0 is required." msgstr "Uwaga: Wymagana jest wersja Repetiera 0.90.0 lub wyższa." -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1197 -msgid "Note: some shortcuts work in (non)editing mode only." -msgstr "Uwaga: niektóre skróty działają tylko poza trybem edycji." - #: src/slic3r/GUI/SavePresetDialog.cpp:137 msgid "Note: This preset will be replaced after saving" msgstr "Uwaga: ten zestaw ustawień zostanie zastąpiony po zapisaniu" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1197 +msgid "Note: some shortcuts work in (non)editing mode only." +msgstr "Uwaga: niektóre skróty działają tylko poza trybem edycji." + #: src/slic3r/GUI/Tab.cpp:1716 src/slic3r/GUI/Tab.cpp:1717 #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 @@ -8220,14 +7785,14 @@ msgstr "Uwaga" msgid "Notify about new releases" msgstr "Powiadamiaj o nowych wydaniach" -#: src/slic3r/GUI/ConfigWizard.cpp:262 -msgid "nozzle" -msgstr "dysza" - #: src/slic3r/GUI/Tab.cpp:1984 msgid "Nozzle" msgstr "Dysza" +#: src/slic3r/GUI/ConfigWizard.cpp:1475 +msgid "Nozzle Diameter:" +msgstr "Średnica dyszy:" + #: src/slic3r/GUI/ConfigWizard.cpp:1547 msgid "Nozzle and Bed Temperatures" msgstr "Temperatury dyszy oraz stołu" @@ -8237,10 +7802,6 @@ msgstr "Temperatury dyszy oraz stołu" msgid "Nozzle diameter" msgstr "Średnica dyszy" -#: src/slic3r/GUI/ConfigWizard.cpp:1475 -msgid "Nozzle Diameter:" -msgstr "Średnica dyszy:" - #: src/libslic3r/PrintConfig.cpp:2793 msgid "Nozzle temperature" msgstr "Temperatura dyszy" @@ -8331,13 +7892,9 @@ msgstr "" msgid "Number of tool changes" msgstr "Ilość zmian narzędzi" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "object" -msgid_plural "objects" -msgstr[0] "obiekt" -msgstr[1] "obiekty" -msgstr[2] "obiekty" -msgstr[3] "obiekty" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 +msgid "Object Settings to modify" +msgstr "Ustawienia modelu do modyfikacji" #: src/slic3r/GUI/Tab.cpp:4709 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" @@ -8364,10 +7921,6 @@ msgstr "Model lub instancja" msgid "Object reordered" msgstr "Model przeorganizowany" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2477 -msgid "Object Settings to modify" -msgstr "Ustawienia modelu do modyfikacji" - #: src/slic3r/GUI/Plater.cpp:2536 #, c-format, boost-format msgid "" @@ -8404,10 +7957,6 @@ msgstr "" "czyszczącej i aby skrócić czas wydruku. W rezultacie kolor tego modelu " "będzie niejednolity." -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "objects" -msgstr "modele" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:201 msgid "Objects List" msgstr "Lista obiektów" @@ -8420,15 +7969,6 @@ msgstr "Spirala ośmiokątna" msgid "OctoPrint version" msgstr "Wersja OctoPrint" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 -msgid "of a current Object" -msgstr "obecnego Modelu" - -#: src/slic3r/GUI/PrintHostDialogs.cpp:251 -msgctxt "OfFile" -msgid "Size" -msgstr "OfFile||Rozmiar" - #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:32 msgid "Offset" msgstr "Offset" @@ -8441,14 +7981,14 @@ msgstr "" "Odległość brimu od drukowanego obiektu. Przesunięcie jest stosowane po " "kompensacji stopy słonia." -#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 -msgid "Old regular layout with the tab bar" -msgstr "Poprzedni układ z paskiem kart" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 msgid "Old Value" msgstr "Poprzednia wartość" +#: src/slic3r/GUI/Preferences.cpp:743 src/slic3r/GUI/Preferences.cpp:754 +msgid "Old regular layout with the tab bar" +msgstr "Poprzedni układ z paskiem kart" + #: src/slic3r/GUI/Preferences.cpp:210 msgid "" "On OSX there is always only one instance of app running by default. However " @@ -8532,14 +8072,6 @@ msgstr "Z-hop tylko poniżej" msgid "Only retract when crossing perimeters" msgstr "Retrakcja tylko przy przechodzeniu nad obrysami" -#: src/slic3r/GUI/ConfigWizard.cpp:778 -msgid "" -"Only the following installed printers are compatible with the selected " -"filaments" -msgstr "" -"Tylko następujące zainstalowane drukarki są kompatybilne z wybranymi " -"filamentami" - #: src/slic3r/GUI/ConfigWizard.cpp:779 msgid "" "Only the following installed printers are compatible with the selected SLA " @@ -8548,6 +8080,14 @@ msgstr "" "Tylko następujące zainstalowane drukarki są kompatybilne z wybranymi " "materiałami SLA" +#: src/slic3r/GUI/ConfigWizard.cpp:778 +msgid "" +"Only the following installed printers are compatible with the selected " +"filaments" +msgstr "" +"Tylko następujące zainstalowane drukarki są kompatybilne z wybranymi " +"filamentami" + #: src/slic3r/GUI/Tab.cpp:1630 msgid "Ooze prevention" msgstr "Zapobieganie wyciekom (ooze)" @@ -8562,6 +8102,38 @@ msgstr "" msgid "Open &PrusaSlicer" msgstr "Otwórz &PrusaSlicer" +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 +msgid "Open CA certificate file" +msgstr "Otwórz plik certyfikatu CA" + +#: src/slic3r/GUI/HintNotification.cpp:1000 +msgid "Open Documentation in web browser." +msgstr "Otwórz dokumentację w przeglądarce internetowej." + +#: src/slic3r/GUI/NotificationManager.cpp:664 +msgid "Open Folder." +msgstr "Otwórz folder." + +#: src/slic3r/Utils/Process.cpp:157 +msgid "Open G-code file:" +msgstr "Otwórz plik G-code:" + +#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 +msgid "Open G-code viewer" +msgstr "Otwórz przeglądarkę G-code" + +#: src/slic3r/GUI/MainFrame.cpp:1413 +msgid "Open New Instance" +msgstr "Otwórz nową instancję" + +#: src/slic3r/GUI/HintNotification.cpp:908 +msgid "Open Preferences." +msgstr "Otwórz Preferencje." + +#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 +msgid "Open PrusaSlicer" +msgstr "Otwórz PrusaSlicer " + #: src/slic3r/GUI/KBShortcutsDialog.cpp:205 src/slic3r/GUI/MainFrame.cpp:1518 msgid "Open a G-code file" msgstr "Otwórz plik G-code" @@ -8579,35 +8151,15 @@ msgstr "Otwórz plik projektu" msgid "Open as project" msgstr "Otwórz jako projekt" -#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:375 -msgid "Open CA certificate file" -msgstr "Otwórz plik certyfikatu CA" - #: src/slic3r/GUI/UpdateDialogs.cpp:59 src/slic3r/GUI/UpdateDialogs.cpp:133 #: src/slic3r/GUI/UpdateDialogs.cpp:191 msgid "Open changelog page" msgstr "Otwórz stronę z listami zmian" -#: src/slic3r/GUI/HintNotification.cpp:1000 -msgid "Open Documentation in web browser." -msgstr "Otwórz dokumentację w przeglądarce internetowej." - #: src/slic3r/GUI/UpdateDialogs.cpp:65 msgid "Open download page" msgstr "Otwórz stronę pobierania" -#: src/slic3r/GUI/NotificationManager.cpp:664 -msgid "Open Folder." -msgstr "Otwórz folder." - -#: src/slic3r/Utils/Process.cpp:157 -msgid "Open G-code file:" -msgstr "Otwórz plik G-code:" - -#: src/slic3r/GUI/MainFrame.cpp:78 src/slic3r/GUI/MainFrame.cpp:1301 -msgid "Open G-code viewer" -msgstr "Otwórz przeglądarkę G-code" - #: src/slic3r/GUI/GUI_App.cpp:3067 src/slic3r/GUI/GUI_App.cpp:3090 msgid "Open hyperlink in default browser?" msgstr "Otworzyć hiperłącze w domyślnej przeglądarce?" @@ -8620,35 +8172,23 @@ msgstr "Otwórz nową przeglądarkę G-code" msgid "Open new instance" msgstr "Otwórz nową instancję" -#: src/slic3r/GUI/MainFrame.cpp:1413 -msgid "Open New Instance" -msgstr "Otwórz nową instancję" - -#: src/slic3r/GUI/HintNotification.cpp:908 -msgid "Open Preferences." -msgstr "Otwórz Preferencje." - #: src/slic3r/GUI/KBShortcutsDialog.cpp:78 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater" msgstr "Otwórz projekt STL/OBJ/AMF/3MF z konfiguracją, wyczyść stół" -#: src/slic3r/GUI/MainFrame.cpp:89 src/slic3r/GUI/MainFrame.cpp:1534 -msgid "Open PrusaSlicer" -msgstr "Otwórz PrusaSlicer " - #: src/slic3r/GUI/MainFrame.cpp:1079 #, c-format, boost-format msgid "Open the %s website in your browser" msgstr "Otwórz stronę %s w przeglądarce" -#: src/slic3r/GUI/MainFrame.cpp:1397 -msgid "Open the dialog to modify shape gallery" -msgstr "Otwórz okno dialogowe, aby zmodyfikować galerię kształtów" - #: src/slic3r/GUI/MainFrame.cpp:1070 msgid "Open the Prusa3D drivers download page in your browser" msgstr "Otwórz stronę Prusa3D ze sterownikami w przeglądarce" +#: src/slic3r/GUI/MainFrame.cpp:1397 +msgid "Open the dialog to modify shape gallery" +msgstr "Otwórz okno dialogowe, aby zmodyfikować galerię kształtów" + #: src/slic3r/GUI/MainFrame.cpp:1072 msgid "Open the software releases page in your browser" msgstr "Otwórz stronę z wersjami oprogramowania w przeglądarce" @@ -8674,6 +8214,10 @@ msgstr "" msgid "Operation already cancelling. Please wait few seconds." msgstr "Operacja została już anulowana. Proszę poczekać kilka sekund." +#: src/slic3r/GUI/Plater.cpp:1678 +msgid "Optimize Rotation" +msgstr "Optymalizuj obrót" + #: src/slic3r/GUI/Jobs/RotoptimizeJob.hpp:23 msgid "Optimize object rotation for best surface quality." msgstr "Optymalizuje orientację modelu dla najlepszej jakości powierzchni." @@ -8694,10 +8238,6 @@ msgstr "" msgid "Optimize orientation" msgstr "Optymalizuj orientację" -#: src/slic3r/GUI/Plater.cpp:1678 -msgid "Optimize Rotation" -msgstr "Optymalizuj obrót" - #: src/libslic3r/PrintConfig.cpp:373 msgid "" "Optimize travel moves in order to minimize the crossing of perimeters. This " @@ -8722,10 +8262,6 @@ msgstr "Opcje materiału podporowego i tratwy (raft)" msgid "Options:" msgstr "Opcje:" -#: src/slic3r/GUI/DoubleSlider.cpp:1431 -msgid "or press \"+\" key" -msgstr "lub naciśnij klawisz \"+\"" - #: src/slic3r/GUI/Preferences.cpp:399 msgid "Order object volumes by types" msgstr "Porządkowanie modyfikatorów obiektów według typów" @@ -8746,14 +8282,14 @@ msgstr "Punkt zerowy" msgid "Other" msgstr "Inne" -#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 -msgid "Other layers" -msgstr "Inne warstwy" - #: src/slic3r/GUI/ConfigWizard.cpp:1322 msgid "Other Vendors" msgstr "Inni dostawcy" +#: src/libslic3r/PrintConfig.cpp:392 src/libslic3r/PrintConfig.cpp:2789 +msgid "Other layers" +msgstr "Inne warstwy" + #: src/libslic3r/PrintConfig.cpp:515 msgid "Outer and inner brim" msgstr "Zewnętrzny i wewnętrzny brim" @@ -8762,22 +8298,22 @@ msgstr "Zewnętrzny i wewnętrzny brim" msgid "Outer brim only" msgstr "Tylko zewnętrzny brim" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 -msgid "Output file" -msgstr "Plik wyjściowy" - #: src/libslic3r/PrintConfig.cpp:4436 msgid "Output File" msgstr "Plik Wyjściowy" -#: src/libslic3r/PrintConfig.cpp:1902 -msgid "Output filename format" -msgstr "Format pliku wyjściowego" - #: src/libslic3r/PrintConfig.cpp:4305 msgid "Output Model Info" msgstr "Informacje o Modelu wyjściowym" +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4667 +msgid "Output file" +msgstr "Plik wyjściowy" + +#: src/libslic3r/PrintConfig.cpp:1902 +msgid "Output filename format" +msgstr "Format pliku wyjściowego" + #: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4666 msgid "Output options" msgstr "Opcje wyjściowe" @@ -8888,6 +8424,10 @@ msgstr "" "zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara, " "naciskając odpowiednio Page Up lub Page Down?" +#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 +msgid "Paint-on seam" +msgstr "Malowanie szwu" + #: resources/data/hints.ini: [hint:Paint-on seam] msgid "" "Paint-on seam\n" @@ -8901,9 +8441,10 @@ msgstr "" "Wypróbuj funkcję malowania szwu. (Wymaga trybu Zaawansowany lub " "Ekspert)." -#: src/slic3r/GUI/ObjectDataViewModel.cpp:50 -msgid "Paint-on seam" -msgstr "Malowanie szwu" +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 +msgid "Paint-on supports" +msgstr "Malowanie podpór" #: resources/data/hints.ini: [hint:Paint-on supports] msgid "" @@ -8917,11 +8458,6 @@ msgstr "" "których podpory powinny być wymuszone lub zablokowane? Wypróbuj funkcję " "malowania podpór. (Wymaga trybu Zaawansowany lub Ekspert)." -#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:49 -msgid "Paint-on supports" -msgstr "Malowanie podpór" - #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:674 #, boost-format msgid "Painted using: Extruder %1%" @@ -8955,10 +8491,6 @@ msgstr "" msgid "Paints only one facet." msgstr "Maluje tylko jedną powierzchnię." -#: src/slic3r/GUI/Field.cpp:193 -msgid "parameter name" -msgstr "nazwa parametru" - #: src/slic3r/GUI/Field.cpp:269 src/slic3r/GUI/Field.cpp:343 msgid "Parameter validation" msgstr "Weryfikacja parametru" @@ -8979,14 +8511,14 @@ msgstr "" msgid "Part" msgstr "Część" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 -msgid "Part manipulation" -msgstr "Manipulacja częścią" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2481 msgid "Part Settings to modify" msgstr "Ustawienia części do modyfikacji" +#: src/slic3r/GUI/GUI_ObjectList.cpp:2492 +msgid "Part manipulation" +msgstr "Manipulacja częścią" + #: src/libslic3r/PrintConfig.cpp:324 msgid "Password" msgstr "Hasło" @@ -8995,6 +8527,10 @@ msgstr "Hasło" msgid "Paste" msgstr "Wklej" +#: src/slic3r/GUI/Plater.cpp:6640 +msgid "Paste From Clipboard" +msgstr "Wklej Ze Schowka" + #: src/slic3r/GUI/MainFrame.cpp:1346 msgid "Paste clipboard" msgstr "Wklej zawartość schowka" @@ -9003,10 +8539,6 @@ msgstr "Wklej zawartość schowka" msgid "Paste from clipboard" msgstr "Wklej ze schowka" -#: src/slic3r/GUI/Plater.cpp:6640 -msgid "Paste From Clipboard" -msgstr "Wklej Ze Schowka" - #: src/libslic3r/PrintConfig.cpp:2697 msgid "Pattern" msgstr "Wzór" @@ -9038,16 +8570,16 @@ msgstr "Wzór podpór." msgid "Pause" msgstr "Pauza" -#: src/slic3r/GUI/DoubleSlider.cpp:1469 -#, boost-format -msgid "Pause print (\"%1%\")" -msgstr "Wstrzymaj wydruk (\"%1%\")" - #: src/slic3r/GUI/Tab.cpp:2471 src/libslic3r/GCode.cpp:714 #: src/libslic3r/PrintConfig.cpp:2441 msgid "Pause Print G-code" msgstr "G-code dla pauzy drukowania" +#: src/slic3r/GUI/DoubleSlider.cpp:1469 +#, boost-format +msgid "Pause print (\"%1%\")" +msgstr "Wstrzymaj wydruk (\"%1%\")" + #: src/libslic3r/PrintConfig.cpp:1558 msgid "Percent of a flow rate relative to object's normal layer height." msgstr "" @@ -9082,6 +8614,11 @@ msgstr "" "Kalkulacja prędkości względem dokładności. Niższe wartości mogą powodować " "artefakty." +#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 +msgid "Performing desktop integration failed - Could not find executable." +msgstr "" +"Integracji z pulpitem nie powiodła się - nie znaleziono pliku wykonywalnego." + #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:232 msgid "" "Performing desktop integration failed - boost::filesystem::canonical did not " @@ -9099,11 +8636,6 @@ msgstr "" "Gcodeviewer. Plik pulpitu PrusaSlicer został prawdopodobnie utworzony " "pomyślnie." -#: src/slic3r/GUI/DesktopIntegrationDialog.cpp:243 -msgid "Performing desktop integration failed - Could not find executable." -msgstr "" -"Integracji z pulpitem nie powiodła się - nie znaleziono pliku wykonywalnego." - #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:378 msgid "" "Performing desktop integration failed because the application directory was " @@ -9121,10 +8653,6 @@ msgstr "Obrys" msgid "Perimeter extruder" msgstr "Ekstruder dla obrysów" -#: src/slic3r/GUI/PresetHints.cpp:171 -msgid "perimeters" -msgstr "obrysy" - #: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1955 #: src/libslic3r/PrintConfig.cpp:1969 src/libslic3r/PrintConfig.cpp:1979 msgid "Perimeters" @@ -9200,6 +8728,10 @@ msgstr "Szerokość łącznika" msgid "Place bearings in slots and resume printing" msgstr "Umieść łożyska w gniazdach i wznów drukowanie" +#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 +msgid "Place on face" +msgstr "Połóż na płaszczyźnie" + #: resources/data/hints.ini: [hint:Place on face] msgid "" "Place on face\n" @@ -9212,10 +8744,6 @@ msgstr "" "powierzchni leżała na stole drukarki? Wybierz funkcję Połóż na " "płaszczyźnie lub naciśnij klawisz F." -#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 -msgid "Place on face" -msgstr "Połóż na płaszczyźnie" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:181 src/slic3r/GUI/MainFrame.cpp:284 #: src/slic3r/GUI/MainFrame.cpp:333 src/slic3r/GUI/MainFrame.cpp:445 #: src/slic3r/GUI/MainFrame.cpp:448 src/slic3r/GUI/MainFrame.cpp:470 @@ -9257,10 +8785,6 @@ msgstr "Pozycja" msgid "Position (for multi-extruder printers)" msgstr "Pozycja (dla drukarek z kilkoma ekstruderami)" -#: src/libslic3r/PrintConfig.cpp:2215 -msgid "Position of perimeters starting points." -msgstr "Pozycja startowa druku obrysów." - #: src/libslic3r/PrintConfig.cpp:2968 msgid "Position X" msgstr "Pozycja X" @@ -9269,6 +8793,10 @@ msgstr "Pozycja X" msgid "Position Y" msgstr "Pozycja Y" +#: src/libslic3r/PrintConfig.cpp:2215 +msgid "Position of perimeters starting points." +msgstr "Pozycja startowa druku obrysów." + #: src/slic3r/GUI/Tab.cpp:1763 msgid "Post processing scripts shall modify G-code file in place." msgstr "Skrypty do post-processingu powinny modyfikować G-code na miejscu." @@ -9367,11 +8895,6 @@ msgstr "" msgid "Preset with name \"%1%\" already exists." msgstr "Zestaw ustawień o nazwie \"%1%\" już istnieje." -#: src/slic3r/GUI/SavePresetDialog.cpp:221 -msgctxt "PresetName" -msgid "Copy" -msgstr "Kopia" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 msgid "" "Presets are different.\n" @@ -9434,10 +8957,6 @@ msgstr "Poprzednio pocięty plik (" msgid "Prime all printing extruders" msgstr "Wyczyść wszystkie używane ekstrudery" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 -msgid "print" -msgstr "druk" - #: src/slic3r/GUI/GCodeViewer.cpp:3506 src/slic3r/GUI/GCodeViewer.cpp:3541 msgid "Print" msgstr "Druk" @@ -9446,14 +8965,6 @@ msgstr "Druk" msgid "Print &Host Upload Queue" msgstr "Kolej&ka zadań serwera druku" -#: src/libslic3r/PrintConfig.cpp:753 -msgid "" -"Print contour perimeters from the outermost one to the innermost one instead " -"of the default inverse order." -msgstr "" -"Drukuj obrysy od zewnątrz do wewnątrz zamiast domyślnego ustawienia węwnątrz-" -"zewnątrz." - #: src/slic3r/GUI/ConfigWizard.cpp:1457 msgid "Print Diameters" msgstr "Średnice" @@ -9462,6 +8973,23 @@ msgstr "Średnice" msgid "Print Host upload" msgstr "Przesyłanie do serwera druku" +#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 +#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +msgid "Print Settings" +msgstr "Ustawienia Druku" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 +msgid "Print Settings Tab" +msgstr "Ustawienia druku" + +#: src/libslic3r/PrintConfig.cpp:753 +msgid "" +"Print contour perimeters from the outermost one to the innermost one instead " +"of the default inverse order." +msgstr "" +"Drukuj obrysy od zewnątrz do wewnątrz zamiast domyślnego ustawienia węwnątrz-" +"zewnątrz." + #: src/slic3r/GUI/KBShortcutsDialog.cpp:114 #: src/slic3r/GUI/PrintHostDialogs.cpp:217 msgid "Print host upload queue" @@ -9475,20 +9003,11 @@ msgstr "Tryb drukowania" msgid "Print pauses" msgstr "Pauzuje wydruk" -#: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 -msgid "Print Settings" -msgstr "Ustawienia Druku" - #: src/slic3r/GUI/GCodeViewer.cpp:3693 src/slic3r/GUI/GCodeViewer.cpp:3715 #: src/slic3r/GUI/GUI.cpp:337 src/slic3r/GUI/Plater.cpp:817 msgid "Print settings" msgstr "Ustawienia druku" -#: src/slic3r/GUI/GLCanvas3D.cpp:3767 src/slic3r/GUI/GLCanvas3D.cpp:4588 -msgid "Print Settings Tab" -msgstr "Ustawienia druku" - #: src/libslic3r/PrintConfig.cpp:3774 msgid "Print speed" msgstr "Prędkość druku" @@ -9523,9 +9042,14 @@ msgstr "" msgid "Printer" msgstr "Drukarka" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 -msgid "printer" -msgstr "drukarka" +#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 +#: src/slic3r/GUI/Tab.hpp:490 +msgid "Printer Settings" +msgstr "Ustawienia Drukarki" + +#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 +msgid "Printer Settings Tab" +msgstr "Ustawienia drukarki" #: src/libslic3r/PrintConfig.cpp:3215 src/libslic3r/PrintConfig.cpp:3216 msgid "Printer absolute correction" @@ -9535,10 +9059,6 @@ msgstr "Korekcje bezwzględne drukarki" msgid "Printer gamma correction" msgstr "Korekcja gamma drukarki" -#: src/slic3r/GUI/Tab.cpp:1375 -msgid "printer model" -msgstr "model drukarki" - #: src/libslic3r/PrintConfig.cpp:2011 msgid "Printer notes" msgstr "Notatki o drukarce" @@ -9547,6 +9067,18 @@ msgstr "Notatki o drukarce" msgid "Printer preset names" msgstr "Nazwy zestawów ustawień drukarek" +#: src/libslic3r/PrintConfig.cpp:3192 +msgid "Printer scaling X axis correction" +msgstr "Korekcja skalowania przez drukarkę w osi X" + +#: src/libslic3r/PrintConfig.cpp:3200 +msgid "Printer scaling Y axis correction" +msgstr "Korekcja skalowania przez drukarkę w osi Y" + +#: src/libslic3r/PrintConfig.cpp:3208 +msgid "Printer scaling Z axis correction" +msgstr "Korekcja skalowania przez drukarkę w osi Z" + #: src/libslic3r/PrintConfig.cpp:3183 src/libslic3r/PrintConfig.cpp:3184 #: src/libslic3r/PrintConfig.cpp:3185 msgid "Printer scaling correction" @@ -9564,27 +9096,6 @@ msgstr "Korekcja skalowania przez drukarkę w osi Y " msgid "Printer scaling correction in Z axis" msgstr "Korekcja skalowania przez drukarkę w osi Z" -#: src/libslic3r/PrintConfig.cpp:3192 -msgid "Printer scaling X axis correction" -msgstr "Korekcja skalowania przez drukarkę w osi X" - -#: src/libslic3r/PrintConfig.cpp:3200 -msgid "Printer scaling Y axis correction" -msgstr "Korekcja skalowania przez drukarkę w osi Y" - -#: src/libslic3r/PrintConfig.cpp:3208 -msgid "Printer scaling Z axis correction" -msgstr "Korekcja skalowania przez drukarkę w osi Z" - -#: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 -msgid "Printer Settings" -msgstr "Ustawienia Drukarki" - -#: src/slic3r/GUI/GLCanvas3D.cpp:3769 src/slic3r/GUI/GLCanvas3D.cpp:4590 -msgid "Printer Settings Tab" -msgstr "Ustawienia drukarki" - #: src/libslic3r/PrintConfig.cpp:223 src/libslic3r/PrintConfig.cpp:224 msgid "Printer technology" msgstr "Technologia druku" @@ -9676,6 +9187,10 @@ msgstr "Drukarki Prusa w technologii FFF" msgid "Prusa MSLA Technology Printers" msgstr "Drukarki Prusa w technologii MSLA" +#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 +msgid "PrusaSlicer GUI initialization failed" +msgstr "Niepowodzenie inicjalizacji PrusaSlicer GUI" + #: src/slic3r/GUI/GUI_App.cpp:1330 #, boost-format msgid "" @@ -9708,10 +9223,6 @@ msgstr "PrusaSlicer wykrył systemowy magazyn certyfikatów SSL w: %1%" msgid "PrusaSlicer error" msgstr "Błąd PrusaSlicer" -#: src/slic3r/GUI/GUI_Init.cpp:57 src/slic3r/GUI/GUI_Init.cpp:60 -msgid "PrusaSlicer GUI initialization failed" -msgstr "Niepowodzenie inicjalizacji PrusaSlicer GUI" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:84 #, boost-format msgid "PrusaSlicer has encountered a fatal error: \"%1%\"" @@ -10054,6 +9565,16 @@ msgstr "Zwykły" msgid "Regular expression" msgstr "Wyrażenie regularne" +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" +"Względne adresowanie ekstrudera wymaga zresetowania jego pozycji na każdej " +"warstwie, aby uniknąć utraty dokładności zmiennoprzecinkowej. Dodaj \"G92 " +"E0\" do layer_gcode." + #: src/slic3r/GUI/Preferences.cpp:435 msgid "Release only" msgstr "Tylko wydania stabilne" @@ -10062,6 +9583,11 @@ msgstr "Tylko wydania stabilne" msgid "Reload all from disk" msgstr "Wczytaj ponownie wszystko z dysku" +#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 +#: src/slic3r/GUI/Plater.cpp:3548 +msgid "Reload from disk" +msgstr "Wczytaj ponownie z dysku" + #: resources/data/hints.ini: [hint:Reload from disk] msgid "" "Reload from disk\n" @@ -10075,11 +9601,6 @@ msgstr "" "widoku 3D i wybierz \"Wczytaj ponownie z dysku\". Przeczytaj więcej w " "dokumentacji." -#: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 -msgid "Reload from disk" -msgstr "Wczytaj ponownie z dysku" - #: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 msgid "Reload from:" msgstr "Wczytaj z:" @@ -10117,15 +9638,19 @@ msgstr "Zapamiętaj mój wybór" msgid "Remember output directory" msgstr "Zapamiętaj katalog wyjściowy" -#: src/slic3r/GUI/Tab.cpp:3685 -msgid "remove" -msgstr "usuń" - #: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/BedShapeDialog.cpp:362 #: src/slic3r/GUI/Tab.cpp:3734 msgid "Remove" msgstr "Usuń" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 +msgid "Remove Instance of the selected object" +msgstr "Usuń instancję zaznaczonego modelu" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 +msgid "Remove Multi Material painting" +msgstr "Usuń malowanie Multi Material" + #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:38 msgid "Remove all holes" msgstr "Usuń wszystkie otwory" @@ -10151,18 +9676,10 @@ msgstr "Usuń ekstruder z sekwencji" msgid "Remove instance" msgstr "Usuń instancję" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 -msgid "Remove Instance of the selected object" -msgstr "Usuń instancję zaznaczonego modelu" - #: src/slic3r/GUI/GUI_ObjectLayers.cpp:160 msgid "Remove layer range" msgstr "Usuń zakres warstw" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1844 -msgid "Remove Multi Material painting" -msgstr "Usuń malowanie Multi Material" - #: src/slic3r/GUI/GUI_Factories.cpp:1087 msgid "Remove one instance of the selected object" msgstr "Usuń jedną instancję zaznaczonego modelu" @@ -10293,14 +9810,14 @@ msgstr "Naprawianie modelu przez usługę Netfabb" msgid "Repairing was canceled" msgstr "Naprawianie zostało anulowane" -#: src/slic3r/GUI/MainFrame.cpp:1285 -msgid "Repeat last quick slice" -msgstr "Powtórz ostatnie szybkie cięcie" - #: src/slic3r/GUI/MainFrame.cpp:1285 msgid "Repeat Last Quick Slice" msgstr "Powtórz Ostatnie Szybkie Cięcie" +#: src/slic3r/GUI/MainFrame.cpp:1285 +msgid "Repeat last quick slice" +msgstr "Powtórz ostatnie szybkie cięcie" + #: src/slic3r/GUI/Plater.cpp:3432 msgid "Replace from:" msgstr "Zamiana z:" @@ -10334,21 +9851,6 @@ msgstr "Zgło&szenie problemu" msgid "Report an issue on %s" msgstr "Zgłoś problem z %s" -#: src/slic3r/Utils/PresetUpdater.cpp:815 -#, c-format, boost-format -msgid "requires max. %s" -msgstr "wymaga max %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:812 -#, c-format, boost-format -msgid "requires min. %s" -msgstr "wymaga min. %s" - -#: src/slic3r/Utils/PresetUpdater.cpp:808 -#, c-format, boost-format -msgid "requires min. %s and max. %s" -msgstr "wymaga min. %s i max. %s" - #: src/slic3r/GUI/FirmwareDialog.cpp:820 msgid "Rescan" msgstr "Skanuj ponownie" @@ -10357,6 +9859,14 @@ msgstr "Skanuj ponownie" msgid "Reset" msgstr "Reset" +#: src/slic3r/GUI/Plater.cpp:3003 +msgid "Reset Project" +msgstr "Resetuj Projekt" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 +msgid "Reset Rotation" +msgstr "Resetuj Obrót" + #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1225 msgid "Reset clipping plane" msgstr "Reset płaszczyzny przecinania" @@ -10369,18 +9879,10 @@ msgstr "Reset płaszczyzny przecinania" msgid "Reset direction" msgstr "Reset kierunku" -#: src/slic3r/GUI/Plater.cpp:3003 -msgid "Reset Project" -msgstr "Resetuj Projekt" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363 msgid "Reset rotation" msgstr "Resetuj obrót" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 -msgid "Reset Rotation" -msgstr "Resetuj Obrót" - #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:398 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:400 msgid "Reset scale" @@ -10392,14 +9894,14 @@ msgstr "Resetuj skalę" msgid "Reset selection" msgstr "Reset zaznaczenia" -#: src/slic3r/GUI/GLCanvas3D.cpp:237 -msgid "Reset to base" -msgstr "Resetuj do bazowego ust" - #: src/slic3r/GUI/Tab.cpp:2825 msgid "Reset to Filament Color" msgstr "Zresetuj do koloru filamentu" +#: src/slic3r/GUI/GLCanvas3D.cpp:237 +msgid "Reset to base" +msgstr "Resetuj do bazowego ust" + #: src/slic3r/GUI/GUI_App.cpp:2331 msgid "Restart application" msgstr "Uruchom ponownie aplikację" @@ -10421,12 +9923,6 @@ msgstr "Retrakcja przy zmianie warstwy" msgid "Retraction" msgstr "Retrakcja" -#: src/libslic3r/PrintConfig.cpp:2115 -msgid "" -"Retraction is not triggered when travel moves are shorter than this length." -msgstr "" -"Retrakcja nie zostanie wykonana przy ruchu jałowym krótszym niż ta wartość." - #: src/libslic3r/PrintConfig.cpp:2136 msgid "Retraction Length" msgstr "Długość retrakcji" @@ -10439,6 +9935,12 @@ msgstr "Długość Retrakcji (zmiana narzędzia)" msgid "Retraction Speed" msgstr "Prędkość retrakcji" +#: src/libslic3r/PrintConfig.cpp:2115 +msgid "" +"Retraction is not triggered when travel moves are shorter than this length." +msgstr "" +"Retrakcja nie zostanie wykonana przy ruchu jałowym krótszym niż ta wartość." + #: src/slic3r/GUI/Tab.cpp:2818 msgid "" "Retraction when tool is disabled (advanced settings for multi-extruder " @@ -10475,6 +9977,14 @@ msgstr "Przejrzyj zamienniki i dostosuj je w razie potrzeby." msgid "Right" msgstr "Prawo" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +msgid "Right Preset Value" +msgstr "Wartość z zestawu ustawień po prawej" + +#: src/slic3r/GUI/MainFrame.cpp:1129 +msgid "Right View" +msgstr "Widok prawy" + #: src/slic3r/GUI/GUI_ObjectList.cpp:488 msgid "Right button click the icon to change the object printable property" msgstr "" @@ -10504,14 +10014,6 @@ msgstr "Prawy przycisk myszy" msgid "Right mouse button:" msgstr "Prawy przycisk myszy:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 -msgid "Right Preset Value" -msgstr "Wartość z zestawu ustawień po prawej" - -#: src/slic3r/GUI/MainFrame.cpp:1129 -msgid "Right View" -msgstr "Widok prawy" - #: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:466 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:543 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562 @@ -10579,16 +10081,6 @@ msgstr "Uruchom %s" msgid "Running post-processing scripts" msgstr "Wykonywanie skryptów przetwarzania końcowego (post-processing)" -#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 -#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 -#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 -#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 -#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 -#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 -#: src/libslic3r/PrintConfig.cpp:3349 -msgid "s" -msgstr "" - #: src/slic3r/GUI/MainFrame.cpp:1231 src/slic3r/GUI/MainFrame.cpp:1580 msgid "S&end G-code" msgstr "Wyślij G-cod&e" @@ -10597,6 +10089,60 @@ msgstr "Wyślij G-cod&e" msgid "S&end to print" msgstr "W&yślij do druku" +#: src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Material Profiles Selection" +msgstr "Wybór profili materiałów SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 +msgid "SLA Materials" +msgstr "Materiały SLA" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 +msgid "SLA Support Points" +msgstr "Punkty podpór SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:2102 +msgid "SLA Technology Printers" +msgstr "Drukarki SLA" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 +msgid "SLA gizmo keyboard shortcuts" +msgstr "Skróty klawiszowe \"uchwytów\" SLA" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +msgid "SLA material" +msgstr "Materiał SLA" + +#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 +msgid "SLA material type" +msgstr "Rodzaj materiału SLA" + +#: src/slic3r/GUI/ConfigWizard.cpp:752 +msgid "SLA materials" +msgstr "Materiały SLA" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +msgid "SLA print" +msgstr "Druk SLA" + +#: src/libslic3r/PrintConfig.cpp:3382 +msgid "SLA print material notes" +msgstr "Notatki dla materiału SLA" + +#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 +msgid "SLA print settings" +msgstr "Ustawienia druku SLA" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6369 +msgid "SLA supports outside the print area were detected." +msgstr "Wykryto podpory SLA poza obszarem roboczym." + +#: src/slic3r/GUI/MainFrame.cpp:1661 +msgid "SVG" +msgstr "SVG" + #. TRN To be shown in Print Settings "Bottom contact Z distance". Have to be as short as possible #. TRN To be shown in Print Settings "Bottom interface layers". Have to be as short as possible #: src/libslic3r/PrintConfig.cpp:2576 src/libslic3r/PrintConfig.cpp:2661 @@ -10617,6 +10163,22 @@ msgstr "Zapisz %s jako:" msgid "Save %s file as:" msgstr "Zapisz plik %s jako:" +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save G-code file as:" +msgstr "Zapisz plik G-code jako:" + +#: src/slic3r/GUI/MainFrame.cpp:1736 +msgid "Save OBJ file (less prone to coordinate errors than STL) as:" +msgstr "Zapisz plik OBJ (mniej podatny na błędy współrzędnych niż STL) jako:" + +#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 +msgid "Save Project &as" +msgstr "Z&apisz projekt jako" + +#: src/slic3r/GUI/Plater.cpp:5707 +msgid "Save SL1 / SL1S file as:" +msgstr "Zapisz plik SL1 / SL1S jako:" + #: src/libslic3r/PrintConfig.cpp:4310 msgid "Save config file" msgstr "Zapisz plik konfiguracyjny" @@ -10647,14 +10209,6 @@ msgstr "Zapisz obecny projekt jako" msgid "Save file as:" msgstr "Zapisz plik jako:" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save G-code file as:" -msgstr "Zapisz plik G-code jako:" - -#: src/slic3r/GUI/MainFrame.cpp:1736 -msgid "Save OBJ file (less prone to coordinate errors than STL) as:" -msgstr "Zapisz plik OBJ (mniej podatny na błędy współrzędnych niż STL) jako:" - #: src/slic3r/GUI/SavePresetDialog.cpp:191 #: src/slic3r/GUI/SavePresetDialog.cpp:197 msgid "Save preset" @@ -10668,10 +10222,6 @@ msgstr "Zapisz paczkę ustawień jako:" msgid "Save project" msgstr "Zapisz projekt" -#: src/slic3r/GUI/MainFrame.cpp:1191 src/slic3r/GUI/MainFrame.cpp:1193 -msgid "Save Project &as" -msgstr "Z&apisz projekt jako" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:79 msgid "Save project (3mf)" msgstr "Zapisz Projekt (3mf)" @@ -10680,10 +10230,6 @@ msgstr "Zapisz Projekt (3mf)" msgid "Save project as (3mf)" msgstr "Zapisz Projekt jako (3mf)" -#: src/slic3r/GUI/Plater.cpp:5707 -msgid "Save SL1 / SL1S file as:" -msgstr "Zapisz plik SL1 / SL1S jako:" - #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:898 msgid "Save support points?" msgstr "Zachować punkty podpór?" @@ -10715,6 +10261,10 @@ msgstr "Niepowodzenie zapisywania siatki jako 3MF." msgid "Scale" msgstr "Skaluj" +#: src/slic3r/GUI/Selection.cpp:950 +msgid "Scale To Fit" +msgstr "Skaluj, aby zmieścić" + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:523 msgid "Scale factors" msgstr "Współczynnik skalowania" @@ -10727,10 +10277,6 @@ msgstr "Skaluj wybrany model, aby zmieścił się w przestrzeni roboczej" msgid "Scale to Fit" msgstr "Skaluj, aby dopasować" -#: src/slic3r/GUI/Selection.cpp:950 -msgid "Scale To Fit" -msgstr "Skaluj, aby zmieścić" - #: src/libslic3r/PrintConfig.cpp:4405 msgid "Scale to fit the given volume." msgstr "Skaluj, aby wypełnić zadaną objętość." @@ -10818,13 +10364,39 @@ msgstr "Drugi kolor" msgid "See Download page." msgstr "Zobacz stronę pobierania." +#: src/slic3r/GUI/GUI_App.cpp:1219 +msgid "See Releases page." +msgstr "Zobacz stronę z wydaniami (\"Releases\")." + #: src/slic3r/GUI/NotificationManager.hpp:753 msgid "See more." msgstr "Zobacz więcej." -#: src/slic3r/GUI/GUI_App.cpp:1219 -msgid "See Releases page." -msgstr "Zobacz stronę z wydaniami (\"Releases\")." +#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 +msgid "Select Filament Settings Tab" +msgstr "Wybierz ustawienia filamentu" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 +msgid "Select Plater Tab" +msgstr "Wybierz Zakładkę Podglądu Stołu" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 +msgid "Select Print Settings Tab" +msgstr "Wybierz ustawienia druku" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 +msgid "Select Printer Settings Tab" +msgstr "Wybierz ustawienia drukarki" + +#: src/slic3r/GUI/DoubleSlider.cpp:2532 +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/FirmwareDialog.cpp:813 msgid "Select a file" @@ -10862,26 +10434,10 @@ msgstr "Wybierz konfigurację do wczytania:" msgid "Select coordinate space, in which the transformation will be performed." msgstr "Wybierz płaszczyznę, w której ma nastąpić przekształcenie." -#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 -msgid "Select Filament Settings Tab" -msgstr "Wybierz ustawienia filamentu" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 -msgid "Select Plater Tab" -msgstr "Wybierz Zakładkę Podglądu Stołu" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 msgid "Select presets to compare" msgstr "Wybierz zestawy ustawień do porównania" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 -msgid "Select Print Settings Tab" -msgstr "Wybierz ustawienia druku" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 -msgid "Select Printer Settings Tab" -msgstr "Wybierz ustawienia drukarki" - #: src/slic3r/GUI/GalleryDialog.cpp:76 msgid "Select shape from the gallery" msgstr "Wybierz kształt z galerii" @@ -10890,6 +10446,10 @@ msgstr "Wybierz kształt z galerii" msgid "Select showing settings" msgstr "Wybierz widok ustawień" +#: src/slic3r/GUI/MainFrame.cpp:1726 +msgid "Select the STL file to repair:" +msgstr "Wybierz plik STL do naprawy:" + #: src/slic3r/GUI/GUI_App.cpp:2010 msgid "Select the language" msgstr "Wybierz język" @@ -10906,10 +10466,6 @@ msgstr "Wybierz profile druku, z którymi kompatybilny jest ten profil." msgid "Select the printers this profile is compatible with." msgstr "Wybierz drukarki kompatybilne z tym profilem." -#: src/slic3r/GUI/MainFrame.cpp:1726 -msgid "Select the STL file to repair:" -msgstr "Wybierz plik STL do naprawy:" - #: src/slic3r/GUI/Preferences.cpp:709 msgid "Select toolbar icon size in respect to the default one." msgstr "Wybierz rozmiar ikon w odniesieniu do domyślnego." @@ -10926,16 +10482,6 @@ msgstr "Wybierz rodzaj wymaganej podkładki" msgid "Select what kind of support do you need" msgstr "Wybierz rodzaj potrzebnych podpór" -#: src/slic3r/GUI/DoubleSlider.cpp:2532 -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:168 msgid "Selection-Add" msgstr "Zaznaczenie-Dodaj" @@ -10944,14 +10490,6 @@ msgstr "Zaznaczenie-Dodaj" msgid "Selection-Add All" msgstr "Zaznaczenie-Dodaj wszystko" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 -msgid "Selection-Add from list" -msgstr "Zaznaczenie-Dodaj z listy" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6446 -msgid "Selection-Add from rectangle" -msgstr "Zaznaczenie-Dodaj z prostokąta" - #: src/slic3r/GUI/Selection.cpp:278 msgid "Selection-Add Instance" msgstr "Zaznaczenie-Dodaj instancję" @@ -10960,6 +10498,14 @@ msgstr "Zaznaczenie-Dodaj instancję" msgid "Selection-Add Object" msgstr "Zaznaczenie-Dodaj Model" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3503 +msgid "Selection-Add from list" +msgstr "Zaznaczenie-Dodaj z listy" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6446 +msgid "Selection-Add from rectangle" +msgstr "Zaznaczenie-Dodaj z prostokąta" + #: src/slic3r/GUI/Selection.cpp:209 msgid "Selection-Remove" msgstr "Zaznaczenie-Usuń" @@ -10968,14 +10514,6 @@ msgstr "Zaznaczenie-Usuń" msgid "Selection-Remove All" msgstr "Zaznaczenie-Usuń Wszystko" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 -msgid "Selection-Remove from list" -msgstr "Zaznaczenie-Usunięcie z listy" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6461 -msgid "Selection-Remove from rectangle" -msgstr "Zaznaczenie-Usuń z prostokąta" - #: src/slic3r/GUI/Selection.cpp:297 msgid "Selection-Remove Instance" msgstr "Zaznaczenie-Usuń kopię" @@ -10984,18 +10522,26 @@ msgstr "Zaznaczenie-Usuń kopię" msgid "Selection-Remove Object" msgstr "Zaznaczenie-Usuń model" +#: src/slic3r/GUI/GUI_ObjectList.cpp:3491 +msgid "Selection-Remove from list" +msgstr "Zaznaczenie-Usunięcie z listy" + +#: src/slic3r/GUI/GLCanvas3D.cpp:6461 +msgid "Selection-Remove from rectangle" +msgstr "Zaznaczenie-Usuń z prostokąta" + #: src/slic3r/GUI/MainFrame.cpp:1320 msgid "Selects all objects" msgstr "Zaznacza wszystkie modele" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 -msgid "Send G-code" -msgstr "Wyślij G-code" - #: src/slic3r/GUI/PrintHostDialogs.cpp:40 msgid "Send G-Code to printer host" msgstr "Wyślij G-code do serwera druku" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +msgid "Send G-code" +msgstr "Wyślij G-code" + #: src/slic3r/GUI/SendSystemInfoDialog.cpp:550 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:618 msgid "Send system info" @@ -11045,6 +10591,46 @@ msgstr "Nazwa usługi" msgid "Set" msgstr "Ustaw" +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 +msgid "Set Mirror" +msgstr "Ustaw Odbicie" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 +msgid "Set Orientation" +msgstr "Ustaw Orientację" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 +msgid "Set Position" +msgstr "Ustaw Pozycję" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Printable" +msgstr "Zaznacz do drukowania" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Printable Instance" +msgstr "Włącz drukowanie instancji" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Printable group" +msgstr "Oznacz grupę jako \"Do druku\"" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 +msgid "Set Scale" +msgstr "Ustaw Skalę" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +msgid "Set Unprintable" +msgstr "Zaznacz do ignorowania przy drukowaniu" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +msgid "Set Unprintable Instance" +msgstr "Ignoruj drukowanie instancji" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 +msgid "Set Unprintable group" +msgstr "Ustaw grupę jako \"Nie do druku\"" + #: src/slic3r/GUI/GUI_Factories.cpp:636 src/slic3r/GUI/GUI_Factories.cpp:648 msgid "Set as a Separated Object" msgstr "Ustaw jako osobny model" @@ -11093,9 +10679,9 @@ msgstr "Ustaw lewy punkt jako aktywny" msgid "Set lower thumb as active" msgstr "Ustaw dolny punkt jako aktywny" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:284 -msgid "Set Mirror" -msgstr "Ustaw Odbicie" +#: src/slic3r/GUI/GUI_Factories.cpp:1090 +msgid "Set number of instances" +msgstr "Ustaw liczbę instancji" #: resources/data/hints.ini: [hint:Set number of instances] msgid "" @@ -11107,35 +10693,11 @@ msgstr "" "Czy wiesz, że możesz kliknąć prawym przyciskiem myszy na model i ustawić " "dokładną liczbę instancji, zamiast kopiować go kilka razy?" -#: src/slic3r/GUI/GUI_Factories.cpp:1090 -msgid "Set number of instances" -msgstr "Ustaw liczbę instancji" - #: src/slic3r/GUI/Plater.cpp:5573 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Ustaw ilość instancji na %d" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:852 -msgid "Set Orientation" -msgstr "Ustaw Orientację" - -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:820 -msgid "Set Position" -msgstr "Ustaw Pozycję" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Printable" -msgstr "Zaznacz do drukowania" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Printable group" -msgstr "Oznacz grupę jako \"Do druku\"" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Printable Instance" -msgstr "Włącz drukowanie instancji" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:249 msgid "Set right thumb as active" msgstr "Ustaw prawy punkt jako aktywny" @@ -11144,10 +10706,6 @@ msgstr "Ustaw prawy punkt jako aktywny" msgid "Set ruler mode" msgstr "Ustaw tryb linijki" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:931 -msgid "Set Scale" -msgstr "Ustaw Skalę" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:196 msgid "Set selected items as Printable/Unprintable" msgstr "Ustaw wybrane elementy jako do druku lub nie" @@ -11313,18 +10871,6 @@ msgstr "" "ekstruder, aby nie uderzyć w obiekt znajdujący się bezpośrednio pod prętami " "osi X." -#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 -msgid "Set Unprintable" -msgstr "Zaznacz do ignorowania przy drukowaniu" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4407 -msgid "Set Unprintable group" -msgstr "Ustaw grupę jako \"Nie do druku\"" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 -msgid "Set Unprintable Instance" -msgstr "Ignoruj drukowanie instancji" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:235 msgid "Set upper thumb as active" msgstr "Ustaw górny punkt jako aktywny" @@ -11348,6 +10894,10 @@ msgstr "Ustawienia" msgid "Settings for height range" msgstr "Ustawienie zakresu wysokości" +#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 +msgid "Settings in non-modal window" +msgstr "Ustawienia w oknie niemodalnym" + #: resources/data/hints.ini: [hint:Settings in non-modal window] msgid "" "Settings in non-modal window\n" @@ -11361,10 +10911,6 @@ msgstr "" "drugim. Przejdź do Preferencje i wybierz \"Ustawienia w oknie " "niemodalnym\"." -#: src/slic3r/GUI/Preferences.cpp:745 src/slic3r/GUI/Preferences.cpp:755 -msgid "Settings in non-modal window" -msgstr "Ustawienia w oknie niemodalnym" - #: src/slic3r/GUI/ConfigManipulation.cpp:167 msgid "Shall I adjust those settings for supports?" msgstr "Czy chcesz zmienić te ustawienia dla podpór?" @@ -11446,6 +10992,10 @@ msgstr "Pokaż folder Konfigura&cyjny" msgid "Show &Labels" msgstr "Pokaż &etykiety" +#: src/slic3r/GUI/MainFrame.cpp:1097 +msgid "Show Tip of the Day" +msgstr "Pokaż \"Poradę dnia\"" + #: src/slic3r/GUI/MainFrame.cpp:1092 src/slic3r/GUI/MainFrame.cpp:1095 msgid "Show about dialog" msgstr "Pokaż okienko" @@ -11534,14 +11084,14 @@ msgstr "Pokaż podgląd cięcia 3D" msgid "Show the filament settings" msgstr "Pokaż ustawienia filamentu" -#: src/libslic3r/PrintConfig.cpp:4296 -msgid "Show the full list of print/G-code configuration options." -msgstr "Pokaż pełną listę opcji konfiguracji druku/G-code." - #: src/libslic3r/PrintConfig.cpp:4301 msgid "Show the full list of SLA print configuration options." msgstr "Pokaż pełną listę opcji konfiguracji druku SLA." +#: src/libslic3r/PrintConfig.cpp:4296 +msgid "Show the full list of print/G-code configuration options." +msgstr "Pokaż pełną listę opcji konfiguracji druku/G-code." + #: src/slic3r/GUI/MainFrame.cpp:1100 msgid "Show the list of the keyboard shortcuts" msgstr "Pokaż listę skrótów klawiszowych" @@ -11562,10 +11112,6 @@ msgstr "Pokaż ustawienia drukarki" msgid "Show this help." msgstr "Pokaż tą wskazówkę pomocy." -#: src/slic3r/GUI/MainFrame.cpp:1097 -msgid "Show Tip of the Day" -msgstr "Pokaż \"Poradę dnia\"" - #: src/slic3r/GUI/MainFrame.cpp:1087 msgid "Show user configuration folder (datadir)" msgstr "Pokaż folder z konfiguracjami użytkownika (datadir)" @@ -11604,14 +11150,14 @@ msgstr "Ukryj/pokaż etykiety modelu/instancji" msgid "Simple" msgstr "Prosty" -#: src/slic3r/GUI/ConfigWizard.cpp:1279 -msgid "Simple mode" -msgstr "Tryb Prosty" - #: src/slic3r/GUI/GUI_App.cpp:2237 msgid "Simple View Mode" msgstr "Tryb Widoku Prostego" +#: src/slic3r/GUI/ConfigWizard.cpp:1279 +msgid "Simple mode" +msgstr "Tryb Prosty" + #: src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp:156 msgid "Simplification is currently only allowed when a single part is selected" msgstr "Upraszanie jest obecnie możliwe tylko dla jednego wybranego modelu." @@ -11642,10 +11188,6 @@ msgstr "" msgid "Simplify model" msgstr "Uprość model" -#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 -msgid "Single extruder MM setup" -msgstr "Ustawienia MM dla jednego ekstrudera" - #: src/libslic3r/PrintConfig.cpp:2459 msgid "Single Extruder Multi Material" msgstr "Multi Material z jednym ekstruderem" @@ -11662,6 +11204,10 @@ msgstr "" "Czy chcesz zmienić średnicę dyszy dla wszystkich ekstruderów na wartość z " "pierwszego?" +#: src/slic3r/GUI/Tab.cpp:2724 src/slic3r/GUI/Tab.cpp:2733 +msgid "Single extruder MM setup" +msgstr "Ustawienia MM dla jednego ekstrudera" + #: src/slic3r/GUI/Tab.cpp:2734 msgid "Single extruder multimaterial parameters" msgstr "Parametry multimaterial przy jednym ekstruderze" @@ -11692,6 +11238,10 @@ msgstr "Rozmiar X i Y stołu prostokątnego." msgid "Skirt" msgstr "Skirt" +#: src/libslic3r/PrintConfig.cpp:2282 +msgid "Skirt Loops" +msgstr "Liczba obrysów skirt" + #: src/slic3r/GUI/GUI_Factories.cpp:136 src/slic3r/GUI/Tab.cpp:1536 #: src/libslic3r/PrintConfig.cpp:494 src/libslic3r/PrintConfig.cpp:505 #: src/libslic3r/PrintConfig.cpp:521 @@ -11702,65 +11252,11 @@ msgstr "Skirt i brim" msgid "Skirt height" msgstr "Wysokość skirt" -#: src/libslic3r/PrintConfig.cpp:2282 -msgid "Skirt Loops" -msgstr "Liczba obrysów skirt" - #: src/slic3r/GUI/GUI_Preview.cpp:248 src/libslic3r/ExtrusionEntity.cpp:327 #: src/libslic3r/ExtrusionEntity.cpp:358 msgid "Skirt/Brim" msgstr "Skirt/brim" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 -msgid "SLA gizmo keyboard shortcuts" -msgstr "Skróty klawiszowe \"uchwytów\" SLA" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 -msgid "SLA material" -msgstr "Materiał SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Material Profiles Selection" -msgstr "Wybór profili materiałów SLA" - -#: src/libslic3r/PrintConfig.cpp:3253 src/libslic3r/PrintConfig.cpp:3254 -msgid "SLA material type" -msgstr "Rodzaj materiału SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:2043 src/slic3r/GUI/ConfigWizard.cpp:2915 -msgid "SLA Materials" -msgstr "Materiały SLA" - -#: src/slic3r/GUI/ConfigWizard.cpp:752 -msgid "SLA materials" -msgstr "Materiały SLA" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 -msgid "SLA print" -msgstr "Druk SLA" - -#: src/libslic3r/PrintConfig.cpp:3382 -msgid "SLA print material notes" -msgstr "Notatki dla materiału SLA" - -#: src/slic3r/GUI/GUI.cpp:338 src/slic3r/GUI/Plater.cpp:819 -msgid "SLA print settings" -msgstr "Ustawienia druku SLA" - -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:876 -msgid "SLA Support Points" -msgstr "Punkty podpór SLA" - -#: src/slic3r/GUI/GLCanvas3D.cpp:6369 -msgid "SLA supports outside the print area were detected." -msgstr "Wykryto podpory SLA poza obszarem roboczym." - -#: src/slic3r/GUI/ConfigWizard.cpp:2102 -msgid "SLA Technology Printers" -msgstr "Drukarki SLA" - #: src/slic3r/GUI/GUI_Factories.cpp:461 msgid "Slab" msgstr "Tafla" @@ -11855,6 +11351,14 @@ msgstr "Pocięty model \"%1%\" wygląda jak logo lub znak" msgid "Slicing" msgstr "Cięcie" +#: src/slic3r/GUI/MainFrame.cpp:1710 +msgid "Slicing Done!" +msgstr "Cięcie zakończone!" + +#: src/libslic3r/PrintConfig.cpp:2489 +msgid "Slicing Mode" +msgstr "Tryb cięcia" + #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:162 #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:204 msgid "Slicing complete" @@ -11864,10 +11368,6 @@ msgstr "Cięcie zakończone" msgid "Slicing done" msgstr "Cięcie zakończone" -#: src/slic3r/GUI/MainFrame.cpp:1710 -msgid "Slicing Done!" -msgstr "Cięcie zakończone!" - #: src/slic3r/GUI/NotificationManager.cpp:1113 msgid "Slicing finished." msgstr "Cięcie zakończone." @@ -11879,10 +11379,6 @@ msgstr "" "Cięcie zostało zatrzymane z powodu błędu wewnętrznego: nieciągły indeks " "cięcia." -#: src/libslic3r/PrintConfig.cpp:2489 -msgid "Slicing Mode" -msgstr "Tryb cięcia" - #: src/libslic3r/SLAPrintSteps.cpp:47 msgid "Slicing model" msgstr "Cięcie modelu" @@ -11941,10 +11437,6 @@ msgstr "Przylegające" msgid "Software &Releases" msgstr "Wersje oprog&ramowania" -#: src/slic3r/GUI/PresetHints.cpp:176 -msgid "solid infill" -msgstr "zwarte wypełnienie" - #: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:322 #: src/libslic3r/ExtrusionEntity.cpp:348 src/libslic3r/PrintConfig.cpp:2342 #: src/libslic3r/PrintConfig.cpp:2354 @@ -11959,6 +11451,10 @@ msgstr "Zwarte wypełnienie co" msgid "Solid infill extruder" msgstr "Ekstruder do zwartego wypełnienia" +#: src/libslic3r/PrintConfig.cpp:2313 +msgid "Solid infill threshold area" +msgstr "Min. powierzchnia zwartego wypełnienia" + #: resources/data/hints.ini: [hint:Solid infill threshold area] msgid "" "Solid infill threshold area\n" @@ -11971,10 +11467,6 @@ msgstr "" "automatycznie wypełniane zwartym wypełnieniem? Ustaw parametr Min. " "powierzchnia zwartego wypełnienia. (Tylko w trybie Eksperta)." -#: src/libslic3r/PrintConfig.cpp:2313 -msgid "Solid infill threshold area" -msgstr "Min. powierzchnia zwartego wypełnienia" - #: src/slic3r/GUI/Tab.cpp:1470 src/libslic3r/PrintConfig.cpp:2367 msgid "Solid layers" msgstr "Zwarte warstwy" @@ -11988,17 +11480,6 @@ msgid "Soluble material is most likely used for a soluble support." msgstr "" "Materiał rozpuszczalny jest używany zazwyczaj do rozpuszczalnych podpór." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 -msgid "" -"Some fields are too long to fit. Right mouse click reveals the full text." -msgstr "" -"Niektóre opisy są zbyt długie, aby mogły się zmieścić. Kliknij prawym " -"przyciskiem, aby pokazać cały tekst." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some filaments were uninstalled." -msgstr "Niektóre filamenty zostały odinstalowane." - #: src/libslic3r/PrintConfig.cpp:1321 msgid "" "Some G/M-code commands, including temperature control and others, are not " @@ -12011,6 +11492,25 @@ msgstr "" "kompatybilny plik wyjściowy. Wariant \"no extrusion\" wyłączy generowanie " "jakichkolwiek wartości ekstruzji." +#: src/slic3r/GUI/ConfigWizard.cpp:2696 +msgid "Some Printers were uninstalled." +msgstr "Niektóre drukarki zostały odinstalowane." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some SLA materials were uninstalled." +msgstr "Niektóre materiały SLA zostały odinstalowane." + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +msgid "" +"Some fields are too long to fit. Right mouse click reveals the full text." +msgstr "" +"Niektóre opisy są zbyt długie, aby mogły się zmieścić. Kliknij prawym " +"przyciskiem, aby pokazać cały tekst." + +#: src/slic3r/GUI/ConfigWizard.cpp:2729 +msgid "Some filaments were uninstalled." +msgstr "Niektóre filamenty zostały odinstalowane." + #: src/slic3r/GUI/GLCanvas3D.cpp:6370 msgid "Some objects are not visible during editing." msgstr "Niektóre obiekty nie są widoczne podczas edycji." @@ -12060,14 +11560,6 @@ msgstr "" "Niektóre drukarki mogą mieć trudności z drukiem ze zmienną wysokością " "warstwy. Domyślnie włączone." -#: src/slic3r/GUI/ConfigWizard.cpp:2696 -msgid "Some Printers were uninstalled." -msgstr "Niektóre drukarki zostały odinstalowane." - -#: src/slic3r/GUI/ConfigWizard.cpp:2729 -msgid "Some SLA materials were uninstalled." -msgstr "Niektóre materiały SLA zostały odinstalowane." - #: src/slic3r/GUI/GLCanvas3D.cpp:4041 msgid "Spacing" msgstr "Odstęp" @@ -12230,14 +11722,14 @@ msgstr "Prędkość:" msgid "Sphere" msgstr "Kula" -#: src/libslic3r/PrintConfig.cpp:2381 -msgid "Spiral vase" -msgstr "Tryb wazy" - #: src/slic3r/GUI/ConfigManipulation.cpp:91 msgid "Spiral Vase" msgstr "Tryb wazy" +#: src/libslic3r/PrintConfig.cpp:2381 +msgid "Spiral vase" +msgstr "Tryb wazy" + #: src/slic3r/GUI/GUI_Factories.cpp:944 src/slic3r/GUI/GUI_Factories.cpp:954 #: src/slic3r/GUI/GUI_Factories.cpp:975 src/libslic3r/PrintConfig.cpp:4400 msgid "Split" @@ -12259,22 +11751,22 @@ msgstr "Podziel wybrany model na osobne modele" msgid "Split the selected object into individual parts" msgstr "Podziel wybrany obiekt na osobne części" -#: src/slic3r/GUI/GLCanvas3D.cpp:4565 -msgid "Split to objects" -msgstr "Podziel na osobne modele" - #: src/slic3r/GUI/Plater.cpp:3095 msgid "Split to Objects" msgstr "Podziel na modele" -#: src/slic3r/GUI/GLCanvas3D.cpp:4575 -msgid "Split to parts" -msgstr "Podziel na części" - #: src/slic3r/GUI/GUI_ObjectList.cpp:2008 msgid "Split to Parts" msgstr "Podziel na części" +#: src/slic3r/GUI/GLCanvas3D.cpp:4565 +msgid "Split to objects" +msgstr "Podziel na osobne modele" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4575 +msgid "Split to parts" +msgstr "Podziel na części" + #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:66 #: src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp:132 msgid "Split triangles" @@ -12300,6 +11792,12 @@ msgstr "Standard" msgid "Stars" msgstr "Gwiazdki" +#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 +#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 +#: src/libslic3r/PrintConfig.cpp:2415 +msgid "Start G-code" +msgstr "G-code startowy" + #: src/slic3r/GUI/MainFrame.cpp:1142 msgid "Start a new project" msgstr "Rozpocznij nowy projekt" @@ -12308,12 +11806,6 @@ msgstr "Rozpocznij nowy projekt" msgid "Start at height" msgstr "Zakres od" -#: src/slic3r/GUI/Tab.cpp:2082 src/slic3r/GUI/Tab.cpp:2402 -#: src/libslic3r/GCode.cpp:707 src/libslic3r/PrintConfig.cpp:2400 -#: src/libslic3r/PrintConfig.cpp:2415 -msgid "Start G-code" -msgstr "G-code startowy" - #: src/slic3r/GUI/MainFrame.cpp:1293 msgid "Start new slicing process" msgstr "Uruchom nowy proces cięcia" @@ -12370,10 +11862,6 @@ msgstr "Stan:" msgid "Stealth" msgstr "Stealth" -#: src/slic3r/GUI/Plater.cpp:1435 -msgid "stealth mode" -msgstr "tryb stealth" - #: src/slic3r/GUI/GCodeViewer.cpp:3755 msgid "Stealth mode" msgstr "Tryb stealth" @@ -12413,22 +11901,6 @@ msgstr "" "Wysunięto pomyślnie. Urządzenie %s(%s) można teraz bezpiecznie odłączyć od " "komputera." -#: src/slic3r/GUI/PresetHints.cpp:181 -msgid "support" -msgstr "podpora" - -#: src/libslic3r/PrintConfig.cpp:3517 -msgid "Support base diameter" -msgstr "Średnica stopy podpory" - -#: src/libslic3r/PrintConfig.cpp:3527 -msgid "Support base height" -msgstr "Wysokość stopy podpory" - -#: src/libslic3r/PrintConfig.cpp:3536 -msgid "Support base safety distance" -msgstr "Bezpieczna odległość stopy podpory" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3780 msgid "Support Blocker" msgstr "Blokada podpór" @@ -12445,14 +11917,22 @@ msgstr "Wymuszenie podpór" msgid "Support Generator" msgstr "Generator podpór" +#: src/libslic3r/PrintConfig.cpp:3517 +msgid "Support base diameter" +msgstr "Średnica stopy podpory" + +#: src/libslic3r/PrintConfig.cpp:3527 +msgid "Support base height" +msgstr "Wysokość stopy podpory" + +#: src/libslic3r/PrintConfig.cpp:3536 +msgid "Support base safety distance" +msgstr "Bezpieczna odległość stopy podpory" + #: src/slic3r/GUI/Tab.cpp:4599 msgid "Support head" msgstr "Łącznik podpory" -#: src/slic3r/GUI/PresetHints.cpp:183 -msgid "support interface" -msgstr "warstwa łącząca podpory z modelem" - #: src/slic3r/GUI/GUI_Factories.cpp:56 src/slic3r/GUI/GUI_Factories.cpp:131 #: src/slic3r/GUI/GUI_Preview.cpp:249 src/slic3r/GUI/Tab.cpp:1550 #: src/slic3r/GUI/Tab.cpp:1552 src/libslic3r/ExtrusionEntity.cpp:328 @@ -12536,10 +12016,6 @@ msgstr "Edycja punktów podpór" msgid "Supports" msgstr "Podpory" -#: src/slic3r/GUI/Plater.cpp:1317 -msgid "supports and pad" -msgstr "podpory i podkładka" - #: src/libslic3r/PrintConfig.cpp:1596 msgid "Supports remaining times" msgstr "Obsługa pozostałego czasu druku" @@ -12572,10 +12048,6 @@ msgstr "" msgid "Suppress to open hyperlink in browser" msgstr "Nie otwieraj linków w przeglądarce" -#: src/slic3r/GUI/MainFrame.cpp:1661 -msgid "SVG" -msgstr "SVG" - #: src/slic3r/GUI/Mouse3DController.cpp:508 msgid "Swap Y/Z axes" msgstr "Zamień osie Y/Z" @@ -12597,10 +12069,6 @@ msgstr "Zmień kod na zmianę koloru (%1%) dla:" msgid "Switch to 3D" msgstr "Przełącz na 3D" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 -msgid "Switch to editing mode" -msgstr "Tryb edycji" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:113 msgid "Switch to Preview" msgstr "Przełącz na Podgląd cięcia" @@ -12609,6 +12077,10 @@ msgstr "Przełącz na Podgląd cięcia" msgid "Switch to Settings" msgstr "Przełącz na ustawienia" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1228 +msgid "Switch to editing mode" +msgstr "Tryb edycji" + #: src/slic3r/GUI/wxExtensions.cpp:644 #, c-format, boost-format msgid "Switch to the %s mode" @@ -12647,10 +12119,6 @@ msgstr "" "Włączenie trybu prostego spowoduje odrzucenie zmian wprowadzonych w trybie " "zaawansowanym! Czy chcesz kontynować?" -#: src/slic3r/GUI/Tab.cpp:1413 -msgid "symbolic profile name" -msgstr "skrócona nazwa profilu" - #: src/libslic3r/PrintConfig.cpp:2761 msgid "" "Synchronize support layers with the object print layers. This is useful with " @@ -12667,14 +12135,14 @@ msgstr "Synchronizuj z warstwami modelu" msgid "System &Info" msgstr "&Informacje systemowe" -#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 -msgid "System info sent successfully. Thank you." -msgstr "Informacje systemowe wysłano pomyślnie. Dziękuję." - #: src/slic3r/GUI/SysInfoDialog.cpp:84 msgid "System Information" msgstr "Informacje o systemie" +#: src/slic3r/GUI/SendSystemInfoDialog.cpp:703 +msgid "System info sent successfully. Thank you." +msgstr "Informacje systemowe wysłano pomyślnie. Dziękuję." + #: src/slic3r/GUI/PresetComboBoxes.cpp:249 #: src/slic3r/GUI/PresetComboBoxes.cpp:287 #: src/slic3r/GUI/PresetComboBoxes.cpp:794 @@ -12759,6 +12227,145 @@ msgstr "" "Jeśli urządzenie jest podłączone, to naciśnij przycisk Reset obok złącza " "USB ..." +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 +msgid "" +"The SLA archive doesn't contain any presets. Please activate some SLA " +"printer preset first before importing that SLA archive." +msgstr "" +"Archiwum SLA nie zawiera żadnych ustawień. Przed zaimportowaniem tego " +"archiwum SLA należy najpierw aktywować zestaw ustawień drukarki SLA." + +#: src/slic3r/GUI/ConfigManipulation.cpp:82 +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 "" +"Wymagania trybu wazy:\n" +"- jeden obrys\n" +"- brak górnych warstw\n" +"- 0% wypełnienia\n" +"- brak materiału podporowego\n" +"- wyłączone ustawienie \"Zagwarantuj grubość ścianki\"\n" +"- wyłączone wykrywanie cienkich ścian" + +#: src/libslic3r/Print.cpp:469 +msgid "" +"The Spiral Vase option can only be used when printing single material " +"objects." +msgstr "Tryb Wazy może być używany jedynie podczas druku z jednego materiału." + +#: src/libslic3r/Print.cpp:494 +msgid "" +"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." +msgstr "" +"Wieża czyszcząca obecnie nie obsługuje wolumetrycznego parametru E " +"(use_volumetric_e=0)." + +#: src/slic3r/GUI/ConfigManipulation.cpp:121 +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 "" +"Wieża czyszcząca obsługuje podpory nierozpuszczalne jedynie, gdy są " +"drukowane tym samym ekstruderem - bez wywoływania zmiany narzędzia (zarówno " +"support_material_extruder i support_material_interface_extruder muszą być " +"ustawione na 0)." + +#: src/libslic3r/Print.cpp:598 +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)." +msgstr "" +"Wieża Czyszcząca obsługuje podpory nierozpuszczalne jedynie, gdy są " +"drukowane tym samym ekstruderem - bez wywoływania zmiany narzędzia (zarówno " +"support_material_extruder i support_material_interface_extruder muszą być " +"ustawione na 0)." + +#: src/libslic3r/Print.cpp:496 +msgid "" +"The Wipe Tower is currently not supported for multimaterial sequential " +"prints." +msgstr "" +"Wieża czyszcząca jest obecnie niedostępna dla wielomateriałowego druku " +"sekwencyjnego." + +#: src/libslic3r/Print.cpp:488 +msgid "" +"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." +msgstr "" +"Wieża czyszcząca jest obecnie wspierana tylko dla G-code w stylu Marlin, " +"RepRap/Sprinter, RepRapFirmware oraz Repetier." + +#: src/libslic3r/Print.cpp:490 +msgid "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." +msgstr "" +"Wieża Czyszcząca jest obecnie dostępna tylko przy relatywnym adresowaniu " +"ekstrudera (use_relative_e_distances=1)." + +#: src/libslic3r/Print.cpp:519 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"over an equal number of raft layers" +msgstr "" +"Wieża Czyszcząca jest dostępna dla wielu modeli tylko gdy są drukowane na " +"takiej samej ilości warstw tratwy (raft)" + +#: src/libslic3r/Print.cpp:522 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are printed " +"with the same support_material_contact_distance" +msgstr "" +"Wieża czyszcząca jest dostępna dla wielu modeli pod warunkiem, że ustawienie " +"support_material_contact_distance jest jednakowe dla każdego z nich" + +#: src/libslic3r/Print.cpp:524 +msgid "" +"The Wipe Tower is only supported for multiple objects if they are sliced " +"equally." +msgstr "" +"Wieża Czyszcząca jest dostępna dla kilku modeli tylko jeśli są cięte z taką " +"samą wysokością warstwy." + +#: src/libslic3r/Print.cpp:517 +msgid "" +"The Wipe Tower is only supported for multiple objects if they have equal " +"layer heights" +msgstr "" +"Wieża czyszcząca jest dostępna dla wielu modeli pod warunkiem, że mają one " +"równą wysokość warstwy" + +#: src/slic3r/GUI/Tab.cpp:3005 +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 "" +"Opcja czyszczenia dyszy nie jest dostępna z funkcją retrakcji w firmware " +"(Firmware Retraction).\n" +"\n" +"Wyłączyć ją, aby włączyć Firmware Retraction?" + +#: src/libslic3r/Print.cpp:537 +msgid "" +"The Wipe tower is only supported if all objects have the same variable layer " +"height" +msgstr "" +"Wieża czyszcząca jest dostępna dla wielu modeli pod warunkiem, że mają one " +"taką samą wysokość warstwy" + #: src/slic3r/GUI/GUI_App.cpp:957 #, boost-format msgid "" @@ -12933,18 +12540,18 @@ msgstr "" "zniwelować efekt stopy słonia (Elephant Foot - gdy pierwsza warstwa " "\"rozjeżdża\" się na boki)." -#: src/slic3r/GUI/Plater.cpp:5717 -msgid "The following characters are not allowed by a FAT file system:" -msgstr "Następujące znaki są niedozwolone w systemie plików FAT:" - -#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 -msgid "the following characters are not allowed:" -msgstr "następujące znaki nie są dozwolone:" - #: src/slic3r/GUI/ConfigWizard.cpp:2459 msgid "The following FFF printer models have no filament selected:" msgstr "Następujące modele drukarek FFF nie mają przypisanych filamentów:" +#: src/slic3r/GUI/ConfigWizard.cpp:2477 +msgid "The following SLA printer models have no materials selected:" +msgstr "Następujące modele drukarek SLA nie mają przypisanych materiałów:" + +#: src/slic3r/GUI/Plater.cpp:5717 +msgid "The following characters are not allowed by a FAT file system:" +msgstr "Następujące znaki są niedozwolone w systemie plików FAT:" + #: src/slic3r/GUI/Tab.cpp:1842 #, c-format, boost-format msgid "" @@ -13009,14 +12616,6 @@ msgid "" "The following shortcuts are applicable when the specified gizmo is active" msgstr "Następujące skróty mają zastosowanie, gdy aktywy jest określony uchwyt" -#: src/slic3r/GUI/ConfigWizard.cpp:2477 -msgid "The following SLA printer models have no materials selected:" -msgstr "Następujące modele drukarek SLA nie mają przypisanych materiałów:" - -#: src/slic3r/GUI/SavePresetDialog.cpp:110 -msgid "the following suffix is not allowed:" -msgstr "następujący sufiks nie jest dozwolony:" - #: src/slic3r/GUI/GUI.cpp:327 msgid "The following values were substituted:" msgstr "Następujące wartości zostały zamienione:" @@ -13359,6 +12958,14 @@ msgstr "" "Wybrany obiekt nie jest już dostępny.\n" "Czy chcesz usunąć go z listy niedawno używanych projektów?" +#: src/slic3r/GUI/DoubleSlider.cpp:1408 +msgid "" +"The sequential print is on.\n" +"It's impossible to apply any custom G-code for objects printing sequentually." +msgstr "" +"Druk sekwencyjny jest włączony.\n" +"Dodawanie własnego G-code jest niemożliwe podczas drukowania sekwencyjnego." + #: src/slic3r/GUI/DoubleSlider.cpp:1440 msgid "" "The sequential print is on.\n" @@ -13371,14 +12978,6 @@ msgstr "" "sekwencyjnie.\n" "Ten kod nie będzie przetwarzany podczas generowania pliku G-code." -#: src/slic3r/GUI/DoubleSlider.cpp:1408 -msgid "" -"The sequential print is on.\n" -"It's impossible to apply any custom G-code for objects printing sequentually." -msgstr "" -"Druk sekwencyjny jest włączony.\n" -"Dodawanie własnego G-code jest niemożliwe podczas drukowania sekwencyjnego." - #: src/slic3r/GUI/ConfigWizard.cpp:1287 msgid "The size of the object can be specified in inches" msgstr "Rozmiar modelu może być wyrażony w calach" @@ -13387,14 +12986,6 @@ msgstr "Rozmiar modelu może być wyrażony w calach" msgid "The size of the object is zero" msgstr "Rozmiar obiektu wynosi zero" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:158 -msgid "" -"The SLA archive doesn't contain any presets. Please activate some SLA " -"printer preset first before importing that SLA archive." -msgstr "" -"Archiwum SLA nie zawiera żadnych ustawień. Przed zaimportowaniem tego " -"archiwum SLA należy najpierw aktywować zestaw ustawień drukarki SLA." - #: src/libslic3r/PrintConfig.cpp:3671 msgid "" "The slope of the pad wall relative to the bed plane. 90 degrees means " @@ -13416,30 +13007,6 @@ msgstr "" msgid "The speed for retractions (it only applies to the extruder motor)." msgstr "Prędkość retrakcji (stosowana tylko dla silnika ekstrudera)." -#: src/slic3r/GUI/ConfigManipulation.cpp:82 -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 "" -"Wymagania trybu wazy:\n" -"- jeden obrys\n" -"- brak górnych warstw\n" -"- 0% wypełnienia\n" -"- brak materiału podporowego\n" -"- wyłączone ustawienie \"Zagwarantuj grubość ścianki\"\n" -"- wyłączone wykrywanie cienkich ścian" - -#: src/libslic3r/Print.cpp:469 -msgid "" -"The Spiral Vase option can only be used when printing single material " -"objects." -msgstr "Tryb Wazy może być używany jedynie podczas druku z jednego materiału." - #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:630 msgid "The supplied name is empty. It can't be saved." msgstr "Podana nazwa jest pusta. Nie można zapisać." @@ -13493,105 +13060,6 @@ msgstr "" "support_material_contact_distance będzie używany zarówno dla górnej i dolnej " "odległości w osi Z." -#: src/slic3r/GUI/Tab.cpp:3005 -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 "" -"Opcja czyszczenia dyszy nie jest dostępna z funkcją retrakcji w firmware " -"(Firmware Retraction).\n" -"\n" -"Wyłączyć ją, aby włączyć Firmware Retraction?" - -#: src/libslic3r/Print.cpp:494 -msgid "" -"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." -msgstr "" -"Wieża czyszcząca obecnie nie obsługuje wolumetrycznego parametru E " -"(use_volumetric_e=0)." - -#: src/slic3r/GUI/ConfigManipulation.cpp:121 -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 "" -"Wieża czyszcząca obsługuje podpory nierozpuszczalne jedynie, gdy są " -"drukowane tym samym ekstruderem - bez wywoływania zmiany narzędzia (zarówno " -"support_material_extruder i support_material_interface_extruder muszą być " -"ustawione na 0)." - -#: src/libslic3r/Print.cpp:598 -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)." -msgstr "" -"Wieża Czyszcząca obsługuje podpory nierozpuszczalne jedynie, gdy są " -"drukowane tym samym ekstruderem - bez wywoływania zmiany narzędzia (zarówno " -"support_material_extruder i support_material_interface_extruder muszą być " -"ustawione na 0)." - -#: src/libslic3r/Print.cpp:496 -msgid "" -"The Wipe Tower is currently not supported for multimaterial sequential " -"prints." -msgstr "" -"Wieża czyszcząca jest obecnie niedostępna dla wielomateriałowego druku " -"sekwencyjnego." - -#: src/libslic3r/Print.cpp:488 -msgid "" -"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " -"RepRapFirmware and Repetier G-code flavors." -msgstr "" -"Wieża czyszcząca jest obecnie wspierana tylko dla G-code w stylu Marlin, " -"RepRap/Sprinter, RepRapFirmware oraz Repetier." - -#: src/libslic3r/Print.cpp:490 -msgid "" -"The Wipe Tower is currently only supported with the relative extruder " -"addressing (use_relative_e_distances=1)." -msgstr "" -"Wieża Czyszcząca jest obecnie dostępna tylko przy relatywnym adresowaniu " -"ekstrudera (use_relative_e_distances=1)." - -#: src/libslic3r/Print.cpp:519 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"over an equal number of raft layers" -msgstr "" -"Wieża Czyszcząca jest dostępna dla wielu modeli tylko gdy są drukowane na " -"takiej samej ilości warstw tratwy (raft)" - -#: src/libslic3r/Print.cpp:522 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are printed " -"with the same support_material_contact_distance" -msgstr "" -"Wieża czyszcząca jest dostępna dla wielu modeli pod warunkiem, że ustawienie " -"support_material_contact_distance jest jednakowe dla każdego z nich" - -#: src/libslic3r/Print.cpp:524 -msgid "" -"The Wipe Tower is only supported for multiple objects if they are sliced " -"equally." -msgstr "" -"Wieża Czyszcząca jest dostępna dla kilku modeli tylko jeśli są cięte z taką " -"samą wysokością warstwy." - -#: src/libslic3r/Print.cpp:517 -msgid "" -"The Wipe Tower is only supported for multiple objects if they have equal " -"layer heights" -msgstr "" -"Wieża czyszcząca jest dostępna dla wielu modeli pod warunkiem, że mają one " -"równą wysokość warstwy" - #: src/libslic3r/Print.cpp:482 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " @@ -13600,14 +13068,6 @@ msgstr "" "Wieża Czyszcząca jest dostępna tylko, gdy wszystkie ekstrudery mają taką " "samą średnicę dyszy i używają filamentów i takiej samej średnicy." -#: src/libslic3r/Print.cpp:537 -msgid "" -"The Wipe tower is only supported if all objects have the same variable layer " -"height" -msgstr "" -"Wieża czyszcząca jest dostępna dla wielu modeli pod warunkiem, że mają one " -"taką samą wysokość warstwy" - #: src/slic3r/GUI/Plater.cpp:4096 msgid "There are active warnings concerning sliced models:" msgstr "Istnieją aktywne ostrzeżenia dotyczące ciętych modeli:" @@ -13659,6 +13119,18 @@ msgstr "Grube mosty" msgid "This %s version: %s" msgstr "%s wersja: %s" +#: src/libslic3r/PrintConfig.cpp:2433 +msgid "This G-code will be used as a code for the color change" +msgstr "Ten G-code zostanie użyty przy zmianie koloru" + +#: src/libslic3r/PrintConfig.cpp:2442 +msgid "This G-code will be used as a code for the pause print" +msgstr "Ten G-code zostanie użyty przy pauzie wydruku" + +#: src/libslic3r/PrintConfig.cpp:2451 +msgid "This G-code will be used as a custom code" +msgstr "Ten G-code zostanie użyty jako niestandardowy" + #: src/slic3r/GUI/DoubleSlider.cpp:2087 src/slic3r/GUI/Tab.cpp:1322 msgid "" "This action is not revertible.\n" @@ -13926,18 +13398,6 @@ msgstr "" "kropli filamentu wokół końcówki dyszy przy ekstruderach, które mają " "tendencję do wyciekania filamentu." -#: src/libslic3r/PrintConfig.cpp:2433 -msgid "This G-code will be used as a code for the color change" -msgstr "Ten G-code zostanie użyty przy zmianie koloru" - -#: src/libslic3r/PrintConfig.cpp:2442 -msgid "This G-code will be used as a code for the pause print" -msgstr "Ten G-code zostanie użyty przy pauzie wydruku" - -#: src/libslic3r/PrintConfig.cpp:2451 -msgid "This G-code will be used as a custom code" -msgstr "Ten G-code zostanie użyty jako niestandardowy" - #: src/slic3r/GUI/Tab.cpp:1351 msgid "This is a default preset." msgstr "To jest domyślny zestaw ustawień." @@ -14365,10 +13825,6 @@ msgstr "" "potrzebować więcej czasu na skurcz termiczny wracając do nominalnego " "rozmiaru." -#: src/slic3r/GUI/GCodeViewer.cpp:3190 -msgid "to" -msgstr "do" - #: src/slic3r/GUI/Tab.cpp:1365 msgid "To do that please specify a new name for the preset." msgstr "Aby to zrobić, ustaw nową nazwę zestawu ustawień." @@ -14403,10 +13859,6 @@ msgstr "" msgid "Toggle %c axis mirroring" msgstr "Włącz odbicie w osi %c" -#: src/libslic3r/miniz_extension.cpp:93 -msgid "too many files" -msgstr "zbyt wiele plików" - #: src/libslic3r/SLAPrintSteps.cpp:426 msgid "Too many overlapping holes." msgstr "Zbyt wiele nakładających się otworów." @@ -14460,6 +13912,10 @@ msgstr "" "Porada dot. grubości dolnej / górnej powłoki: niedostępne z powodu " "nieprawidłowej wysokości warstwy." +#: src/slic3r/GUI/MainFrame.cpp:1118 +msgid "Top View" +msgstr "Widok z góry" + #: src/libslic3r/PrintConfig.cpp:2548 msgid "Top contact Z distance" msgstr "Odstęp góry w osi Z" @@ -14481,10 +13937,6 @@ msgstr "Góra jest otwarta." msgid "Top shell is %1% mm thick for layer height %2% mm." msgstr "Górna powłoka ma %1% mm grubości dla warstwy o wysokości %2% mm." -#: src/slic3r/GUI/PresetHints.cpp:178 -msgid "top solid infill" -msgstr "zwarte wypełnienie na szczycie" - #: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:323 #: src/libslic3r/ExtrusionEntity.cpp:350 src/libslic3r/PrintConfig.cpp:2839 #: src/libslic3r/PrintConfig.cpp:2852 @@ -14495,10 +13947,6 @@ msgstr "Zwarte wypełnienie górne" msgid "Top solid layers" msgstr "Zwarte warstwy górne" -#: src/slic3r/GUI/MainFrame.cpp:1118 -msgid "Top View" -msgstr "Widok z góry" - #: src/libslic3r/PrintConfig.cpp:1550 msgid "Topmost surface only" msgstr "Tylko najwyżej położona warstwa" @@ -14579,6 +14027,32 @@ msgstr "Rodzaj drukarki." msgid "Type:" msgstr "Typ:" +#: src/slic3r/GUI/Tab.cpp:4257 +msgid "UNLOCKED LOCK" +msgstr "OTWARTA KŁÓDKA" + +#: src/slic3r/GUI/Tab.cpp:4283 +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 "" +"OTWARTA KŁÓDKA oznacza, że niektóre ustawienia zostały zmodyfikowane i nie " +"odpowiadają wartościom systemowym (lub domyślnym) w obecnej grupie opcji.\n" +"Kliknij, aby zresetować wszystkie ustawienia obecnej grupy ustawień do " +"wartości systemowych (lub domyślnych)." + +#: src/slic3r/GUI/Tab.cpp:4298 +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 "" +"OTWARTA KŁÓDKA oznacza, że niektóre wartości zostały zmodyfikowane i nie " +"odpowiadają systemowym (lub domyślnym).\n" +"Kliknij ikonę, aby zresetować do wartości systemowej (lub domyślnej)." + #: src/libslic3r/SLAPrintSteps.cpp:441 msgid "Unable to drill the current configuration of holes into the model." msgstr "Nie ma możliwości wywiercenia otworów w modelu w obecnej konfiguracji." @@ -14622,10 +14096,6 @@ msgstr "Niezdefiniowana grupa" msgid "Undefined" msgstr "Nie zdefiniowano" -#: src/libslic3r/miniz_extension.cpp:91 -msgid "undefined error" -msgstr "nieznany błąd" - #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:294 msgid "Underflow" msgstr "Niedomiar" @@ -14649,6 +14119,10 @@ msgstr[3] "Cofnij %1$d akcji" msgid "Undo / Redo is processing" msgstr "Trwa cofanie / powtarzanie czynności" +#: src/slic3r/GUI/GLCanvas3D.cpp:3916 +msgid "Undo History" +msgstr "Historia Cofnięć" + #: src/slic3r/GUI/NotificationManager.hpp:772 msgid "Undo desktop integration failed." msgstr "Cofnij nieudaną integrację z pulpitem." @@ -14657,10 +14131,6 @@ msgstr "Cofnij nieudaną integrację z pulpitem." msgid "Undo desktop integration was successful." msgstr "Cofnij udaną integrację z pulpitem." -#: src/slic3r/GUI/GLCanvas3D.cpp:3916 -msgid "Undo History" -msgstr "Historia Cofnięć" - #: resources/data/hints.ini: [hint:Undo/redo history] msgid "" "Undo/redo history\n" @@ -14672,10 +14142,6 @@ msgstr "" "powtarzania, aby zobaczyć historię zmian, mając możliwość cofnięcia lub " "powtórzenia kilku czynności na raz?" -#: src/libslic3r/miniz_extension.cpp:115 -msgid "unexpected decompressed size" -msgstr "nieoczekiwany rozmiar po rozpakowaniu" - #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:28 #: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:317 msgid "Unknown" @@ -14692,10 +14158,6 @@ msgstr "Wystąpił nieznany błąd" msgid "Unknown error occured during exporting G-code." msgstr "Wystąpił nieznany błąd podczas eksportowania G-code." -#: src/slic3r/GUI/WipeTowerDialog.cpp:308 -msgid "unloaded" -msgstr "rozładowano" - #: src/libslic3r/PrintConfig.cpp:908 msgid "Unloading speed" msgstr "Prędkość rozładowania" @@ -14704,32 +14166,6 @@ msgstr "Prędkość rozładowania" msgid "Unloading speed at the start" msgstr "Początkowa prędkość rozładowania" -#: src/slic3r/GUI/Tab.cpp:4257 -msgid "UNLOCKED LOCK" -msgstr "OTWARTA KŁÓDKA" - -#: src/slic3r/GUI/Tab.cpp:4283 -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 "" -"OTWARTA KŁÓDKA oznacza, że niektóre ustawienia zostały zmodyfikowane i nie " -"odpowiadają wartościom systemowym (lub domyślnym) w obecnej grupie opcji.\n" -"Kliknij, aby zresetować wszystkie ustawienia obecnej grupy ustawień do " -"wartości systemowych (lub domyślnych)." - -#: src/slic3r/GUI/Tab.cpp:4298 -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 "" -"OTWARTA KŁÓDKA oznacza, że niektóre wartości zostały zmodyfikowane i nie " -"odpowiadają systemowym (lub domyślnym).\n" -"Kliknij ikonę, aby zresetować do wartości systemowej (lub domyślnej)." - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 msgid "Unsaved Changes" msgstr "Niezapisane zmiany" @@ -14738,26 +14174,6 @@ msgstr "Niezapisane zmiany" msgid "Unselect gizmo or clear selection" msgstr "Odznacz uchwyt lub wyczyść zaznaczenie" -#: src/libslic3r/miniz_extension.cpp:119 -msgid "unsupported central directory size" -msgstr "nieobsługiwany rozmiar katalogu centralnego" - -#: src/libslic3r/miniz_extension.cpp:99 -msgid "unsupported encryption" -msgstr "nieobsługiwane szyfrowanie" - -#: src/libslic3r/miniz_extension.cpp:101 -msgid "unsupported feature" -msgstr "nieobsługiwana funkcja" - -#: src/libslic3r/miniz_extension.cpp:97 -msgid "unsupported method" -msgstr "nieobsługiwana metoda" - -#: src/libslic3r/miniz_extension.cpp:109 -msgid "unsupported multidisk archive" -msgstr "nieobsługiwane archiwum wielodyskowe" - #: src/slic3r/GUI/OpenGLManager.cpp:265 msgid "Unsupported OpenGL version" msgstr "Nieobsługiwana wersja OpenGL" @@ -14771,10 +14187,6 @@ msgstr "Niewłaściwy wybór" msgid "Untitled" msgstr "Bez tytułu" -#: src/slic3r/GUI/GCodeViewer.cpp:3176 -msgid "up to" -msgstr "do" - #: src/slic3r/GUI/UpdateDialogs.cpp:37 msgid "Update available" msgstr "Dostępna jest aktualizacja" @@ -14846,6 +14258,10 @@ msgstr "" "Użyj funkcji \"Zamknij otwory\", aby zamknąć wszystkie otwory w powłokach " "modeli." +#: src/slic3r/GUI/Preferences.cpp:268 +msgid "Use Retina resolution for the 3D scene" +msgstr "Użyj rozdzielczości Retina dla generowania podglądu 3D" + #: src/slic3r/GUI/DoubleSlider.cpp:1615 src/slic3r/GUI/GUI_Factories.cpp:787 msgid "Use another extruder" msgstr "Użyj innego ekstrudera" @@ -14898,10 +14314,6 @@ msgstr "Użyj widoku perspektywicznego" msgid "Use relative E distances" msgstr "Użyj względnych wartości E (ekstruzji)" -#: src/slic3r/GUI/Preferences.cpp:268 -msgid "Use Retina resolution for the 3D scene" -msgstr "Użyj rozdzielczości Retina dla generowania podglądu 3D" - #: src/slic3r/GUI/Preferences.cpp:507 msgid "Use system menu for application" msgstr "Użyj systemowego menu w aplikacji" @@ -14926,15 +14338,6 @@ msgstr "" msgid "Use volumetric E" msgstr "Użyj wolumetrycznej wartości E" -#: src/slic3r/GUI/DoubleSlider.cpp:1634 -msgid "used" -msgstr "używany" - -#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 -#: src/slic3r/GUI/GCodeViewer.cpp:3562 -msgid "Used filament" -msgstr "Użyty filament" - #: src/slic3r/GUI/Plater.cpp:296 src/slic3r/GUI/Plater.cpp:1376 msgid "Used Filament (g)" msgstr "Użyty filament (g)" @@ -14963,6 +14366,11 @@ msgstr "Używany materiał (ml)" msgid "Used Material (unit)" msgstr "Używany materiał (jednostka)" +#: src/slic3r/GUI/GCodeViewer.cpp:3290 src/slic3r/GUI/GCodeViewer.cpp:3301 +#: src/slic3r/GUI/GCodeViewer.cpp:3562 +msgid "Used filament" +msgstr "Użyty filament" + #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:25 src/libslic3r/PrintConfig.cpp:317 msgid "User" msgstr "Użytkownik" @@ -14973,10 +14381,6 @@ msgstr "Użytkownik" msgid "User presets" msgstr "Zestawy użytkownika" -#: src/libslic3r/miniz_extension.cpp:149 -msgid "validation failed" -msgstr "niepowodzenie weryfikacji" - #: src/slic3r/GUI/ButtonsDescription.cpp:57 msgid "Value is the same as the system value" msgstr "Wartość jest taka sama jak systemowa" @@ -14997,6 +14401,11 @@ msgstr "Wartości w tej kolumnie dotyczą trybu Normal" msgid "Values in this column are for Stealth mode" msgstr "Wartości w tej kolumnie dotyczą trybu Stealth" +#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 +msgid "Variable layer height" +msgstr "Zmienna wysokość warstwy" + #: resources/data/hints.ini: [hint:Variable layer height] msgid "" "Variable layer height\n" @@ -15009,11 +14418,6 @@ msgstr "" "warstw wraz z płynnym przejściem między nimi? Spróbuj opcji Zmienna " "wysokość warstwy. (Niedostępna dla drukarek SLA.)" -#: src/slic3r/GUI/GLCanvas3D.cpp:225 src/slic3r/GUI/GLCanvas3D.cpp:4627 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:53 -msgid "Variable layer height" -msgstr "Zmienna wysokość warstwy" - #: src/slic3r/GUI/GLCanvas3D.cpp:1273 msgid "Variable layer height - Adaptive" msgstr "Zmienna wysokość warstwy - Adaptacyjna" @@ -15030,14 +14434,6 @@ msgstr "Zmienna wysokość warstwy - Reset" msgid "Variable layer height - Smooth all" msgstr "Zmienna wysokość warstwy - Wygładź wszystko" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 -msgid "variants" -msgstr "warianty" - -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 -msgid "vendor" -msgstr "dostawca" - #: src/slic3r/GUI/ConfigWizard.cpp:642 msgid "Vendor:" msgstr "Producent:" @@ -15051,18 +14447,14 @@ msgstr "G-code rozszerzony" msgid "Version" msgstr "Wersja" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 -msgid "version" -msgstr "wersja" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 +msgid "Vertical Slider" +msgstr "Suwak pionowy" #: src/slic3r/GUI/Tab.cpp:1457 msgid "Vertical shells" msgstr "Powłoka pionowa" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:243 -msgid "Vertical Slider" -msgstr "Suwak pionowy" - #: src/slic3r/GUI/KBShortcutsDialog.cpp:218 #: src/slic3r/GUI/KBShortcutsDialog.cpp:222 msgid "Vertical slider - Move active thumb Down" @@ -15140,6 +14532,38 @@ msgstr "Natężenie przepływu (mm³/s)" msgid "Volumetric speed" msgstr "Natężenie przepływu" +#: src/slic3r/GUI/NotificationManager.cpp:1459 +#: src/slic3r/GUI/NotificationManager.cpp:1486 +#: src/slic3r/GUI/NotificationManager.cpp:1494 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +msgid "WARNING:" +msgstr "OSTRZEŻENIE:" + +#: src/slic3r/GUI/Tab.cpp:4264 +msgid "WHITE BULLET" +msgstr "BIAŁA KROPKA" + +#: src/slic3r/GUI/Tab.cpp:4286 +msgid "WHITE BULLET icon indicates a non system (or non default) preset." +msgstr "" +"BIAŁA KROPKA oznacza niesystemowy (lub inny niż domyślny) zestaw ustawień." + +#: src/slic3r/GUI/Tab.cpp:4289 +msgid "" +"WHITE BULLET icon indicates that the settings are the same as in the last " +"saved preset for the current option group." +msgstr "" +"BIAŁA KROPKA oznacza, że ustawienia są takie same jak w ostatnio zapisanym " +"zestawie ustawień dla obecnej grupy opcji." + +#: src/slic3r/GUI/Tab.cpp:4304 +msgid "" +"WHITE BULLET icon indicates that the value is the same as in the last saved " +"preset." +msgstr "" +"BIAŁA KROPKA oznacza, że wartość jest taka sama jak w ostatnio zapisanym " +"zestawie ustawień." + #: src/libslic3r/PrintConfig.cpp:3740 msgid "Wall thickness" msgstr "Grubość ścianki" @@ -15152,13 +14576,6 @@ msgstr "Grubość ścianki" msgid "Warning" msgstr "Ostrzeżenie" -#: src/slic3r/GUI/NotificationManager.cpp:1459 -#: src/slic3r/GUI/NotificationManager.cpp:1486 -#: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 -msgid "WARNING:" -msgstr "OSTRZEŻENIE:" - #: src/slic3r/GUI/SendSystemInfoDialog.cpp:590 #, boost-format msgid "" @@ -15215,10 +14632,6 @@ msgstr "" "aplikacji spowoduje wyświetlenie monitu w pytaniem o wybranie akcji do " "podjęcia przy wczytaniu pliku" -#: src/slic3r/GUI/PresetHints.cpp:192 -msgid "when printing" -msgstr "podczas druku" - #: src/libslic3r/PrintConfig.cpp:530 msgid "" "When printing multi-material objects, this settings will make Slic3r to clip " @@ -15311,31 +14724,6 @@ msgstr "" "Jeśli retrakcja jest korygowana po ruchu jałowym, ekstruder przepchnie taką " "dodatkową ilość filamentu. Ta opcja jest rzadko potrzebna." -#: src/slic3r/GUI/Tab.cpp:4264 -msgid "WHITE BULLET" -msgstr "BIAŁA KROPKA" - -#: src/slic3r/GUI/Tab.cpp:4286 -msgid "WHITE BULLET icon indicates a non system (or non default) preset." -msgstr "" -"BIAŁA KROPKA oznacza niesystemowy (lub inny niż domyślny) zestaw ustawień." - -#: src/slic3r/GUI/Tab.cpp:4289 -msgid "" -"WHITE BULLET icon indicates that the settings are the same as in the last " -"saved preset for the current option group." -msgstr "" -"BIAŁA KROPKA oznacza, że ustawienia są takie same jak w ostatnio zapisanym " -"zestawie ustawień dla obecnej grupy opcji." - -#: src/slic3r/GUI/Tab.cpp:4304 -msgid "" -"WHITE BULLET icon indicates that the value is the same as in the last saved " -"preset." -msgstr "" -"BIAŁA KROPKA oznacza, że wartość jest taka sama jak w ostatnio zapisanym " -"zestawie ustawień." - #: src/slic3r/GUI/Tab.cpp:3999 msgid "Whole word" msgstr "Całe słowo" @@ -15377,6 +14765,11 @@ msgstr "" msgid "Wipe" msgstr "Czyszczenie" +#: src/slic3r/GUI/ConfigManipulation.cpp:126 +#: src/slic3r/GUI/ConfigManipulation.cpp:146 +msgid "Wipe Tower" +msgstr "Wieża czyszcząca" + #: src/libslic3r/PrintConfig.cpp:3013 msgid "Wipe into this object" msgstr "Czyszczenie na tym modelu" @@ -15395,15 +14788,6 @@ msgstr "Opcje czyszczenia" msgid "Wipe tower" msgstr "Wieża czyszcząca" -#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 -msgid "wipe tower" -msgstr "wieża czyszcząca" - -#: src/slic3r/GUI/ConfigManipulation.cpp:126 -#: src/slic3r/GUI/ConfigManipulation.cpp:146 -msgid "Wipe Tower" -msgstr "Wieża czyszcząca" - #: src/slic3r/GUI/WipeTowerDialog.cpp:173 msgid "Wipe tower - Purging volume adjustment" msgstr "Wieża czyszcząca - dostosowanie objętości czyszczenia" @@ -15428,10 +14812,6 @@ msgstr "Obrót wieży czyszczącej względem osi X." msgid "Wipe while retracting" msgstr "Czyszczenie przy retrakcji" -#: src/slic3r/GUI/PresetHints.cpp:193 -msgid "with a volumetric rate" -msgstr "ze współczynnikiem objętościowym" - #: src/libslic3r/PrintConfig.cpp:2122 msgid "" "With bowden extruders, it may be wise to do some amount of quick retract " @@ -15482,10 +14862,6 @@ msgstr "" "\n" "Zaktualizowane paczki konfiguracyjne:" -#: src/libslic3r/miniz_extension.cpp:151 -msgid "write calledback failed" -msgstr "błąd write calledback" - #: src/libslic3r/PrintConfig.cpp:4306 msgid "Write information about the model to the console." msgstr "Zapis informacji o modelu do konsoli." @@ -15498,6 +14874,10 @@ msgstr "Nieprawidłowe hasło" msgid "X coordinate of the left front corner of a wipe tower" msgstr "Koordynata X wieży czyszczącej od przedniego lewego narożnika" +#: src/libslic3r/PrintConfig.cpp:3027 +msgid "XY Size Compensation" +msgstr "Korekta wymiarów XY" + #: src/libslic3r/PrintConfig.cpp:2517 msgid "XY separation between an object and its support" msgstr "Odstęp materiału podporowego od modelu w osiach XY" @@ -15511,10 +14891,6 @@ msgstr "" "procentową (np. 15%) to zostanie obliczona z szerokości ekstruzji obrysów " "zewnętrznych." -#: src/libslic3r/PrintConfig.cpp:3027 -msgid "XY Size Compensation" -msgstr "Korekta wymiarów XY" - #: src/libslic3r/PrintConfig.cpp:2976 msgid "Y coordinate of the left front corner of a wipe tower" msgstr "Koordynata wieży czyszczącej w osi Y od przedniego lewego narożnika" @@ -15576,6 +14952,10 @@ msgid "" msgstr "" "Tutaj możesz umieścić notatki, które zostaną dodane do nagłówka pliku G-code." +#: src/libslic3r/PrintConfig.cpp:3383 +msgid "You can put your notes regarding the SLA print material here." +msgstr "Tutaj możesz umieścić notatki dotyczące materiału druku SLA." + #: src/libslic3r/PrintConfig.cpp:874 msgid "You can put your notes regarding the filament here." msgstr "Tutaj możesz umieścić notatki dotyczące filamentu." @@ -15584,10 +14964,6 @@ msgstr "Tutaj możesz umieścić notatki dotyczące filamentu." msgid "You can put your notes regarding the printer here." msgstr "Tutaj możesz umieścić notatki dotyczące drukarki." -#: src/libslic3r/PrintConfig.cpp:3383 -msgid "You can put your notes regarding the SLA print material here." -msgstr "Tutaj możesz umieścić notatki dotyczące materiału druku SLA." - #: src/libslic3r/PrintConfig.cpp:637 msgid "" "You can set this to a positive value to disable fan at all during the first " @@ -15818,6 +15194,626 @@ msgstr "" "Ustaw zbliżenie na wybrany model\n" "lub wszystkie na stole, jeśli żaden nie został wybrany" +#: src/slic3r/GUI/GCodeViewer.cpp:3182 +msgid "above" +msgstr "ponad" + +#: src/slic3r/GUI/DoubleSlider.cpp:1603 src/slic3r/GUI/GUI_Factories.cpp:779 +msgid "active" +msgstr "aktywny" + +#: src/libslic3r/miniz_extension.cpp:121 +msgid "allocation failed" +msgstr "niepowodzenie alokacji" + +#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:2294 +msgid "approximate seconds" +msgstr "szacowane sekundy" + +#: src/libslic3r/miniz_extension.cpp:147 +msgid "archive is too large" +msgstr "archiwum jest zbyt duże" + +#: src/slic3r/GUI/MainFrame.cpp:655 +msgid "based on Slic3r" +msgstr "bazuje na projekcie Slic3r" + +#: src/libslic3r/miniz_extension.cpp:141 +msgid "buffer too small" +msgstr "niewystarczający bufor" + +#: src/slic3r/GUI/PresetHints.cpp:191 +msgid "by the print profile maximum" +msgstr "maksimum zależny od profilu wydruku" + +#: src/libslic3r/miniz_extension.cpp:113 +msgid "compression failed" +msgstr "niepowodzenie kompresji" + +#: src/slic3r/GUI/DoubleSlider.cpp:1458 +msgid "continue" +msgstr "kontynuuj" + +#: src/libslic3r/miniz_extension.cpp:111 +msgid "decompression failed or archive is corrupted" +msgstr "niepowodzenie rozpakowywania lub uszkodzone archiwum" + +#: src/slic3r/GUI/ExtraRenderers.cpp:316 src/slic3r/GUI/GUI_ObjectList.cpp:538 +#: src/slic3r/GUI/GUI_ObjectList.cpp:550 src/slic3r/GUI/GUI_ObjectList.cpp:979 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1966 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:250 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:352 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:376 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:607 src/libslic3r/PrintConfig.cpp:774 +msgid "default" +msgstr "domyślnie" + +#: src/slic3r/GUI/Tab.cpp:1400 +msgid "default SLA material profile" +msgstr "domyślny profil materiału SLA" + +#: src/slic3r/GUI/Tab.cpp:1404 +msgid "default SLA print profile" +msgstr "domyślny profil druku SLA" + +#: src/slic3r/GUI/GCodeViewer.cpp:3388 +msgid "default color" +msgstr "domyślny kolor" + +#: src/slic3r/GUI/Tab.cpp:1386 +msgid "default filament profile" +msgstr "domyślny profil filamentu" + +#: src/slic3r/GUI/Tab.cpp:1383 +msgid "default print profile" +msgstr "domyślny profil druku" + +#: src/slic3r/GUI/Field.cpp:190 +msgid "default value" +msgstr "wartość domyślna" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "delete" +msgstr "usuń" + +#: src/slic3r/GUI/Plater.cpp:3652 +msgid "differs from the original file" +msgstr "różni się od oryginalnego pliku" + +#: src/slic3r/GUI/Plater.cpp:5202 +msgid "does not contain valid gcode." +msgstr "nie zawiera prawidłowego g-code." + +#: src/slic3r/GUI/PresetHints.cpp:59 +#, boost-format +msgid "except for the first %1% layers." +msgstr "za wyjątkiem pierwszych %1% warstw." + +#: src/slic3r/GUI/PresetHints.cpp:61 +msgid "except for the first layer." +msgstr "za wyjątkiem pierwszej warstwy." + +#: src/slic3r/GUI/PresetHints.cpp:170 +msgid "external perimeters" +msgstr "obrysów zewnętrznych" + +#: src/libslic3r/miniz_extension.cpp:103 +msgid "failed finding central directory" +msgstr "nie odnaleziono katalogu centralnego" + +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +msgid "filament" +msgstr "filament" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:65 +msgid "filaments" +msgstr "filamenty" + +#: src/libslic3r/miniz_extension.cpp:131 +msgid "file close failed" +msgstr "niepowodzenia zamykania pliku" + +#: src/libslic3r/miniz_extension.cpp:125 +msgid "file create failed" +msgstr "niepowodzenie tworzenia pliku" + +#: src/libslic3r/miniz_extension.cpp:145 +msgid "file not found" +msgstr "nie znaleziono pliku" + +#: src/libslic3r/miniz_extension.cpp:123 +msgid "file open failed" +msgstr "niepowodzenie otwierania pliku" + +#: src/libslic3r/miniz_extension.cpp:129 +msgid "file read failed" +msgstr "niepowodzenie odczytu pliku" + +#: src/libslic3r/miniz_extension.cpp:133 +msgid "file seek failed" +msgstr "niepowodzenie szukania pliku" + +#: src/libslic3r/miniz_extension.cpp:135 +msgid "file stat failed" +msgstr "niepowodzenie odczytu statystyk pliku" + +#: src/libslic3r/miniz_extension.cpp:95 +msgid "file too large" +msgstr "plik jest zbyt duży" + +#: src/libslic3r/miniz_extension.cpp:127 +msgid "file write failed" +msgstr "niepowodzenie zapisywania do pliku" + +#: src/slic3r/GUI/PresetHints.cpp:188 +msgid "flow rate is maximized" +msgstr "przepływ osiąga wartości szczytowe" + +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:4266 +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/GCodeViewer.cpp:3190 +msgid "from" +msgstr "z" + +#: src/slic3r/GUI/Tab.cpp:1412 +msgid "full profile name" +msgstr "pełna nazwa profilu" + +#: src/libslic3r/PrintConfig.cpp:1057 +msgid "g" +msgstr "g" + +#: src/libslic3r/PrintConfig.cpp:1006 +msgid "g/cm³" +msgstr "g/cm³" + +#: src/libslic3r/PrintConfig.cpp:3288 +msgid "g/ml" +msgstr "g/ml" + +#: src/slic3r/GUI/Plater.cpp:4107 +msgid "generated warnings" +msgstr "wygenerowane ostrzeżenia" + +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +msgid "in" +msgstr "cale" + +#. TRN Description for "UNLOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4259 +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" +"Kliknij ikonę OTWARTEJ KŁÓDKI, aby zresetować wszystkie ustawienia obecnej " +"grupy ustawień do wartości systemowych (lub domyślnych)." + +#. TRN Description for "LOCKED LOCK" +#: src/slic3r/GUI/Tab.cpp:4255 +msgid "" +"indicates that the settings are the same as the system (or default) values " +"for the current option group" +msgstr "" +"wskazuje na to, że ustawienia są takie same jak systemowe (lub domyślne) " +"wartości dla danej grupy opcji" + +#. TRN Description for "BACK ARROW" +#: src/slic3r/GUI/Tab.cpp:4271 +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 "" +"oznacza, że ustawienia zostały zmodyfikowane i nie odpowiadają tym z " +"ostatnio zapisanego zestawu ustawień dla obecnej grupy opcji.\n" +"Kliknij ikonę STRZAŁKI W TYŁ, aby zresetować wszystkie ustawienia w obecnej " +"grupie opcji do tych z ostatnio zapisanego zestawu ustawień." + +#: src/slic3r/GUI/PresetHints.cpp:174 +msgid "infill" +msgstr "wypełnienia" + +#: src/libslic3r/miniz_extension.cpp:143 +msgid "internal error" +msgstr "błąd wewnętrzny" + +#: src/libslic3r/miniz_extension.cpp:139 +msgid "invalid filename" +msgstr "nieprawidłowa nazwa" + +#: src/libslic3r/miniz_extension.cpp:107 +msgid "invalid header or archive is corrupted" +msgstr "niewłaściwy nagłówek lub uszkodzone archiwum" + +#: src/libslic3r/miniz_extension.cpp:137 +msgid "invalid parameter" +msgstr "nieprawidłowy parametr" + +#: src/slic3r/GUI/GUI_App.cpp:266 +msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." +msgstr "" +"bazuje na projekcie Slic3r autorstwa Alessandro Ranellucciego i społeczności " +"RepRap." + +#. TRN "Slic3r _is licensed under the_ License" +#: src/slic3r/GUI/AboutDialog.cpp:269 src/slic3r/GUI/GUI_App.cpp:268 +msgid "is licensed under the" +msgstr "ma licencję na warunkach" + +#: src/libslic3r/PrintConfig.cpp:3281 +msgid "kg" +msgstr "kg" + +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:60 +#: src/libslic3r/PrintConfig.cpp:639 src/libslic3r/PrintConfig.cpp:1388 +#: src/libslic3r/PrintConfig.cpp:2085 src/libslic3r/PrintConfig.cpp:2260 +#: src/libslic3r/PrintConfig.cpp:2336 src/libslic3r/PrintConfig.cpp:2589 +#: src/libslic3r/PrintConfig.cpp:2637 src/libslic3r/PrintConfig.cpp:2656 +msgid "layers" +msgstr "warstwy" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:309 +msgid "loaded" +msgstr "załadowano" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78 +msgid "max PrusaSlicer version" +msgstr "max wersja PrusaSlicer" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:76 +msgid "min PrusaSlicer version" +msgstr "min wersja PrusaSlicer" + +#: src/libslic3r/PrintConfig.cpp:3274 +msgid "ml" +msgstr "ml" + +#: src/slic3r/GUI/BedShapeDialog.cpp:64 src/slic3r/GUI/ConfigWizard.cpp:262 +#: src/slic3r/GUI/ConfigWizard.cpp:1476 src/slic3r/GUI/ConfigWizard.cpp:1490 +#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:100 +#: src/slic3r/GUI/GCodeViewer.cpp:3176 src/slic3r/GUI/GCodeViewer.cpp:3182 +#: src/slic3r/GUI/GCodeViewer.cpp:3190 src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:188 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:145 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:320 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:478 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:134 +#: src/slic3r/GUI/WipeTowerDialog.cpp:116 src/libslic3r/PrintConfig.cpp:250 +#: src/libslic3r/PrintConfig.cpp:267 src/libslic3r/PrintConfig.cpp:274 +#: src/libslic3r/PrintConfig.cpp:437 src/libslic3r/PrintConfig.cpp:497 +#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:598 +#: src/libslic3r/PrintConfig.cpp:606 src/libslic3r/PrintConfig.cpp:656 +#: src/libslic3r/PrintConfig.cpp:787 src/libslic3r/PrintConfig.cpp:798 +#: src/libslic3r/PrintConfig.cpp:816 src/libslic3r/PrintConfig.cpp:997 +#: src/libslic3r/PrintConfig.cpp:1212 src/libslic3r/PrintConfig.cpp:1279 +#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1569 +#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1824 +#: src/libslic3r/PrintConfig.cpp:1842 src/libslic3r/PrintConfig.cpp:1860 +#: src/libslic3r/PrintConfig.cpp:1923 src/libslic3r/PrintConfig.cpp:1933 +#: src/libslic3r/PrintConfig.cpp:2047 src/libslic3r/PrintConfig.cpp:2056 +#: src/libslic3r/PrintConfig.cpp:2075 src/libslic3r/PrintConfig.cpp:2096 +#: src/libslic3r/PrintConfig.cpp:2108 src/libslic3r/PrintConfig.cpp:2116 +#: src/libslic3r/PrintConfig.cpp:2157 src/libslic3r/PrintConfig.cpp:2165 +#: src/libslic3r/PrintConfig.cpp:2175 src/libslic3r/PrintConfig.cpp:2183 +#: src/libslic3r/PrintConfig.cpp:2191 src/libslic3r/PrintConfig.cpp:2253 +#: src/libslic3r/PrintConfig.cpp:2483 src/libslic3r/PrintConfig.cpp:2553 +#: src/libslic3r/PrintConfig.cpp:2570 src/libslic3r/PrintConfig.cpp:2671 +#: src/libslic3r/PrintConfig.cpp:2680 src/libslic3r/PrintConfig.cpp:2730 +#: src/libslic3r/PrintConfig.cpp:2882 src/libslic3r/PrintConfig.cpp:2970 +#: src/libslic3r/PrintConfig.cpp:2977 src/libslic3r/PrintConfig.cpp:2984 +#: src/libslic3r/PrintConfig.cpp:2998 src/libslic3r/PrintConfig.cpp:3022 +#: src/libslic3r/PrintConfig.cpp:3032 src/libslic3r/PrintConfig.cpp:3042 +#: src/libslic3r/PrintConfig.cpp:3226 src/libslic3r/PrintConfig.cpp:3267 +#: src/libslic3r/PrintConfig.cpp:3427 src/libslic3r/PrintConfig.cpp:3436 +#: src/libslic3r/PrintConfig.cpp:3445 src/libslic3r/PrintConfig.cpp:3455 +#: src/libslic3r/PrintConfig.cpp:3520 src/libslic3r/PrintConfig.cpp:3530 +#: src/libslic3r/PrintConfig.cpp:3542 src/libslic3r/PrintConfig.cpp:3562 +#: src/libslic3r/PrintConfig.cpp:3572 src/libslic3r/PrintConfig.cpp:3582 +#: src/libslic3r/PrintConfig.cpp:3600 src/libslic3r/PrintConfig.cpp:3615 +#: src/libslic3r/PrintConfig.cpp:3629 src/libslic3r/PrintConfig.cpp:3640 +#: src/libslic3r/PrintConfig.cpp:3653 src/libslic3r/PrintConfig.cpp:3698 +#: src/libslic3r/PrintConfig.cpp:3708 src/libslic3r/PrintConfig.cpp:3717 +#: src/libslic3r/PrintConfig.cpp:3727 src/libslic3r/PrintConfig.cpp:3743 +#: src/libslic3r/PrintConfig.cpp:3767 +msgid "mm" +msgstr "mm" + +#: src/libslic3r/PrintConfig.cpp:1528 src/libslic3r/PrintConfig.cpp:2139 +#: src/libslic3r/PrintConfig.cpp:2148 +msgid "mm (zero to disable)" +msgstr "mm (zero, aby wyłączyć)" + +#: src/libslic3r/PrintConfig.cpp:732 src/libslic3r/PrintConfig.cpp:843 +#: src/libslic3r/PrintConfig.cpp:1200 src/libslic3r/PrintConfig.cpp:1403 +#: src/libslic3r/PrintConfig.cpp:1460 src/libslic3r/PrintConfig.cpp:1487 +#: src/libslic3r/PrintConfig.cpp:1961 src/libslic3r/PrintConfig.cpp:2347 +#: src/libslic3r/PrintConfig.cpp:2521 src/libslic3r/PrintConfig.cpp:2610 +#: src/libslic3r/PrintConfig.cpp:2845 +msgid "mm or %" +msgstr "mm lub %" + +#: src/libslic3r/PrintConfig.cpp:385 +msgid "mm or % (zero to disable)" +msgstr "mm lub % (zero, aby wyłączyć)" + +#: src/libslic3r/PrintConfig.cpp:486 src/libslic3r/PrintConfig.cpp:894 +#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:911 +#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:946 +#: src/libslic3r/PrintConfig.cpp:965 src/libslic3r/PrintConfig.cpp:1306 +#: src/libslic3r/PrintConfig.cpp:1496 src/libslic3r/PrintConfig.cpp:1578 +#: src/libslic3r/PrintConfig.cpp:1654 src/libslic3r/PrintConfig.cpp:1688 +#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1710 +#: src/libslic3r/PrintConfig.cpp:1773 src/libslic3r/PrintConfig.cpp:1832 +#: src/libslic3r/PrintConfig.cpp:1972 src/libslic3r/PrintConfig.cpp:2199 +#: src/libslic3r/PrintConfig.cpp:2208 src/libslic3r/PrintConfig.cpp:2739 +#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 +msgid "mm/s" +msgstr "mm/s" + +#: src/libslic3r/PrintConfig.cpp:744 src/libslic3r/PrintConfig.cpp:1222 +#: src/libslic3r/PrintConfig.cpp:1233 src/libslic3r/PrintConfig.cpp:2306 +#: src/libslic3r/PrintConfig.cpp:2359 src/libslic3r/PrintConfig.cpp:2690 +#: src/libslic3r/PrintConfig.cpp:2859 +msgid "mm/s or %" +msgstr "mm/s lub %" + +#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:616 +#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1178 +#: src/libslic3r/PrintConfig.cpp:1378 src/libslic3r/PrintConfig.cpp:1671 +#: src/libslic3r/PrintConfig.cpp:1722 src/libslic3r/PrintConfig.cpp:1733 +#: src/libslic3r/PrintConfig.cpp:1743 src/libslic3r/PrintConfig.cpp:1941 +msgid "mm/s²" +msgstr "mm/s²" + +#: src/libslic3r/PrintConfig.cpp:2316 +msgid "mm²" +msgstr "mm²" + +#: src/libslic3r/PrintConfig.cpp:957 +msgid "mm³" +msgstr "mm³" + +#: src/slic3r/GUI/RammingChart.cpp:95 src/libslic3r/PrintConfig.cpp:886 +#: src/libslic3r/PrintConfig.cpp:1782 +msgid "mm³/s" +msgstr "mm³/s" + +#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1805 +msgid "mm³/s²" +msgstr "mm³/s²" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "model" +msgstr "model" + +#: src/slic3r/GUI/GUI_App.cpp:2159 +msgid "modified" +msgstr "zmodyfikowano" + +#: src/libslic3r/PrintConfig.cpp:3295 +msgid "money/bottle" +msgstr "pieniędzy/butelkę" + +#: src/libslic3r/PrintConfig.cpp:1047 +msgid "money/kg" +msgstr "pieniędzy/kg" + +#: src/slic3r/GUI/Plater.cpp:1428 +msgid "normal mode" +msgstr "tryb normalny" + +#: src/libslic3r/miniz_extension.cpp:105 +msgid "not a ZIP archive" +msgstr "nie jest archiwum ZIP" + +#: src/slic3r/GUI/ConfigWizard.cpp:262 +msgid "nozzle" +msgstr "dysza" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "object" +msgid_plural "objects" +msgstr[0] "obiekt" +msgstr[1] "obiekty" +msgstr[2] "obiekty" +msgstr[3] "obiekty" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "objects" +msgstr "modele" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3648 +msgid "of a current Object" +msgstr "obecnego Modelu" + +#: src/slic3r/GUI/DoubleSlider.cpp:1431 +msgid "or press \"+\" key" +msgstr "lub naciśnij klawisz \"+\"" + +#: src/slic3r/GUI/Field.cpp:193 +msgid "parameter name" +msgstr "nazwa parametru" + +#: src/slic3r/GUI/PresetHints.cpp:171 +msgid "perimeters" +msgstr "obrysy" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +msgid "print" +msgstr "druk" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +msgid "printer" +msgstr "drukarka" + +#: src/slic3r/GUI/Tab.cpp:1375 +msgid "printer model" +msgstr "model drukarki" + +#: src/slic3r/GUI/Tab.cpp:3685 +msgid "remove" +msgstr "usuń" + +#: src/slic3r/Utils/PresetUpdater.cpp:815 +#, c-format, boost-format +msgid "requires max. %s" +msgstr "wymaga max %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:812 +#, c-format, boost-format +msgid "requires min. %s" +msgstr "wymaga min. %s" + +#: src/slic3r/Utils/PresetUpdater.cpp:808 +#, c-format, boost-format +msgid "requires min. %s and max. %s" +msgstr "wymaga min. %s i max. %s" + +#: src/slic3r/GUI/RammingChart.cpp:90 src/slic3r/GUI/WipeTowerDialog.cpp:114 +#: src/libslic3r/PrintConfig.cpp:929 src/libslic3r/PrintConfig.cpp:973 +#: src/libslic3r/PrintConfig.cpp:988 src/libslic3r/PrintConfig.cpp:3160 +#: src/libslic3r/PrintConfig.cpp:3169 src/libslic3r/PrintConfig.cpp:3310 +#: src/libslic3r/PrintConfig.cpp:3318 src/libslic3r/PrintConfig.cpp:3326 +#: src/libslic3r/PrintConfig.cpp:3333 src/libslic3r/PrintConfig.cpp:3341 +#: src/libslic3r/PrintConfig.cpp:3349 +msgid "s" +msgstr "s" + +#: src/slic3r/GUI/PresetHints.cpp:176 +msgid "solid infill" +msgstr "zwarte wypełnienie" + +#: src/slic3r/GUI/Plater.cpp:1435 +msgid "stealth mode" +msgstr "tryb stealth" + +#: src/slic3r/GUI/PresetHints.cpp:181 +msgid "support" +msgstr "podpora" + +#: src/slic3r/GUI/PresetHints.cpp:183 +msgid "support interface" +msgstr "warstwa łącząca podpory z modelem" + +#: src/slic3r/GUI/Plater.cpp:1317 +msgid "supports and pad" +msgstr "podpory i podkładka" + +#: src/slic3r/GUI/Tab.cpp:1413 +msgid "symbolic profile name" +msgstr "skrócona nazwa profilu" + +#: src/slic3r/GUI/Plater.cpp:142 src/slic3r/GUI/SavePresetDialog.cpp:102 +msgid "the following characters are not allowed:" +msgstr "następujące znaki nie są dozwolone:" + +#: src/slic3r/GUI/SavePresetDialog.cpp:110 +msgid "the following suffix is not allowed:" +msgstr "następujący sufiks nie jest dozwolony:" + +#: src/slic3r/GUI/GCodeViewer.cpp:3190 +msgid "to" +msgstr "do" + +#: src/libslic3r/miniz_extension.cpp:93 +msgid "too many files" +msgstr "zbyt wiele plików" + +#: src/slic3r/GUI/PresetHints.cpp:178 +msgid "top solid infill" +msgstr "zwarte wypełnienie na szczycie" + +#: src/libslic3r/miniz_extension.cpp:91 +msgid "undefined error" +msgstr "nieznany błąd" + +#: src/libslic3r/miniz_extension.cpp:115 +msgid "unexpected decompressed size" +msgstr "nieoczekiwany rozmiar po rozpakowaniu" + +#: src/slic3r/GUI/WipeTowerDialog.cpp:308 +msgid "unloaded" +msgstr "rozładowano" + +#: src/libslic3r/miniz_extension.cpp:119 +msgid "unsupported central directory size" +msgstr "nieobsługiwany rozmiar katalogu centralnego" + +#: src/libslic3r/miniz_extension.cpp:99 +msgid "unsupported encryption" +msgstr "nieobsługiwane szyfrowanie" + +#: src/libslic3r/miniz_extension.cpp:101 +msgid "unsupported feature" +msgstr "nieobsługiwana funkcja" + +#: src/libslic3r/miniz_extension.cpp:97 +msgid "unsupported method" +msgstr "nieobsługiwana metoda" + +#: src/libslic3r/miniz_extension.cpp:109 +msgid "unsupported multidisk archive" +msgstr "nieobsługiwane archiwum wielodyskowe" + +#: src/slic3r/GUI/GCodeViewer.cpp:3176 +msgid "up to" +msgstr "do" + +#: src/slic3r/GUI/DoubleSlider.cpp:1634 +msgid "used" +msgstr "używany" + +#: src/libslic3r/miniz_extension.cpp:149 +msgid "validation failed" +msgstr "niepowodzenie weryfikacji" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:81 +msgid "variants" +msgstr "warianty" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 src/slic3r/GUI/Tab.cpp:1370 +msgid "vendor" +msgstr "dostawca" + +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 +msgid "version" +msgstr "wersja" + +#: src/slic3r/GUI/PresetHints.cpp:192 +msgid "when printing" +msgstr "podczas druku" + +#: src/slic3r/GUI/Plater.cpp:1359 src/slic3r/GUI/Plater.cpp:1412 +msgid "wipe tower" +msgstr "wieża czyszcząca" + +#: src/slic3r/GUI/PresetHints.cpp:193 +msgid "with a volumetric rate" +msgstr "ze współczynnikiem objętościowym" + +#: src/libslic3r/miniz_extension.cpp:151 +msgid "write calledback failed" +msgstr "błąd write calledback" + #: src/libslic3r/PrintConfig.cpp:456 src/libslic3r/PrintConfig.cpp:1075 #: src/libslic3r/PrintConfig.cpp:2232 src/libslic3r/PrintConfig.cpp:2242 #: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2774 @@ -16981,6 +16977,10 @@ msgstr "" msgid "Adding book %s" msgstr "Dodawanie książki %s" +#: ../src/common/preferencescmn.cpp:43 +msgid "Advanced" +msgstr "Zaawansowane" + #: ../src/richtext/richtextliststylepage.cpp:435 msgid "After a paragraph:" msgstr "Za paragrafem:" @@ -17252,6 +17252,10 @@ msgstr "Obramowanie" msgid "Borders" msgstr "Ramki" +#: ../src/richtext/richtextsizepage.cpp:288 ../src/common/stockitem.cpp:144 +msgid "Bottom" +msgstr "Dolny" + #: ../src/generic/prntdlgg.cpp:893 msgid "Bottom margin (mm):" msgstr "Dolny margines (mm):" @@ -18065,6 +18069,10 @@ msgstr "Skopiowano do schowka:\"%s\"" msgid "Copies:" msgstr "Kopie:" +#: ../src/common/stockitem.cpp:150 ../src/stc/stc_i18n.cpp:18 +msgid "Copy" +msgstr "Kopiuj" + #: ../src/common/stockitem.cpp:258 msgid "Copy selection" msgstr "Kopiuj wybór" diff --git a/resources/localization/pt_BR/PrusaSlicer_pt_BR.po b/resources/localization/pt_BR/PrusaSlicer_pt_BR.po index 609b788be..b793b59e5 100644 --- a/resources/localization/pt_BR/PrusaSlicer_pt_BR.po +++ b/resources/localization/pt_BR/PrusaSlicer_pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: 2021-01-06 10:53+0100\n" "Last-Translator: Oleksandra Iushchenko \n" "Language-Team: \n" @@ -596,7 +596,7 @@ msgstr "Ativar" msgid "PrusaSlicer version" msgstr "Versão do PrusaSlicer" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "impressão" @@ -604,17 +604,17 @@ msgstr "impressão" msgid "filaments" msgstr "filamentos" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "Impressão de SLA" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "Material de SLA" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "impressora" @@ -673,7 +673,7 @@ msgstr "Todos padrão" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "Todos" @@ -761,7 +761,7 @@ msgstr "" msgid "All installed printers are compatible with the selected %1%." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "filamento" @@ -852,7 +852,7 @@ msgstr "" "atualização seja aplicada." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "Recarregar a partir do disco" @@ -1155,7 +1155,7 @@ msgstr "&Final" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "Cancelar" @@ -1219,7 +1219,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "" @@ -1701,8 +1701,8 @@ msgid "parameter name" msgstr "nome do parâmetro" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "N/D" @@ -1910,7 +1910,7 @@ msgstr "" msgid "Add selected shape(s) to the bed" msgstr "" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "Adicionar" @@ -2112,7 +2112,7 @@ msgid "Wipe" msgstr "Limpar" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "Opções de saída" @@ -2381,7 +2381,7 @@ msgid "Add..." msgstr "Adicionar..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "Deletar todos" @@ -3286,7 +3286,7 @@ msgstr "Erro crítico" msgid "Internal error: %1%" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " @@ -3296,7 +3296,7 @@ msgstr "" "Tente excluir manualmente o arquivo para recuperar do erro. Seus perfis de " "usuário não serão afetados." -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." @@ -3304,12 +3304,12 @@ msgstr "" "Erro de análise PrusaGCodeViewer, ele provavelmente está corrompido. Tente " "excluir manualmente o arquivo para recuperar do erro." -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3321,7 +3321,7 @@ msgid "" "configuration." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3330,19 +3330,19 @@ msgid "" "Shall this configuration be imported?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3352,7 +3352,7 @@ msgid "" "Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" @@ -3361,46 +3361,46 @@ msgstr "" "%s\n" "Você tem certeza que deseja continuar?" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "Lembrar minha escolha" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "Carregando configuração" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "Ver página de lançamentos." -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "Preparando abas de configuração" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3413,24 +3413,24 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" "Você tem a seguinte predefinição com opções salvas para o \"Print Host upload" "\"" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" @@ -3441,7 +3441,7 @@ msgstr "" "Agora essa informação vai ser exposta em configurações das impressoras " "físicas." -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" @@ -3452,169 +3452,169 @@ msgstr "" "Nota: Esse nome pode ser alterado depois a partir das configurações de " "impressoras físicas" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "Informação" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "Recriando" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "Carregando presets" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "Carregamento de um modelo de vista" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "Escolha um arquivo (3MF/AMF):" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Escolha um ou mais arquivos (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "Escolha um arquivo (GCODE/.GCO/.G/.ngc/NGC):" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "Alteração de um idioma do aplicativo" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "Selecione o idioma" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "Idioma" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "modificado" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "Executar %s" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "&Captura das config" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "Inspecionar / ativar capturas de config" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "Capturar &config" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "Capturar uma config" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "Verificar atualizações nas aplicações" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "&Preferências" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "Preferências de aplicação" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "Simples" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "Modo simples de visualização" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "Avançado" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "Modo avançado de visualização" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "Especialista" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "Modo especialista de visualização" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "Modo" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "%s Modo de visualização" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "&Linguagem" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "Atualizar o firmware para uma impressora baseada em Arduino" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "Nome da captura" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "Falha ao ativar a captura de configuração." -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "Seleção de linguagem" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3622,95 +3622,95 @@ msgstr "" "Alterar a linguagem fará com que o aplicativo reinicie.\n" "Você irá perder conteúdo na bandeja." -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "Você quer prosseguir?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "&Configuração" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "Os uploads ainda estão em andamento" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "Pará-los e continuar assim mesmo?" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "Uploads em andamento" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "" "É impossível imprimir objetos com múltiplas partes com a tecnologia SLA." -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "Verifique a lista de objetos antes de alterar a predefinição." -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "Selecione um arquivo gcode:" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "Suprimir para abrir o hiperlink no navegador" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to changes your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "PrusaSlicer: Não me pergunte de novo" @@ -3816,7 +3816,7 @@ msgstr "Saia e aba" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3826,7 +3826,7 @@ msgid "Advanced" msgstr "Avançado" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3840,8 +3840,8 @@ msgid "Supports" msgstr "Suportes" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3851,8 +3851,8 @@ msgstr "Suportes" msgid "Pad" msgstr "Bloco" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -3955,7 +3955,7 @@ msgstr "Exportar como STL" msgid "Reload the selected volumes from disk" msgstr "Recarregue os volumes selecionados do disco" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "" @@ -3981,19 +3981,19 @@ msgstr "Escalar para volume de impressão" msgid "Scale the selected object to fit the print volume" msgstr "Escale o objeto selecionado para se adequar ao volume de impressão" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "Converter de unidades imperiais" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "Reverter conversão de unidades imperiais" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "" @@ -4258,7 +4258,7 @@ msgstr "" msgid "Loading" msgstr "Carregando" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "Carregar arquivo de config" @@ -4699,7 +4699,7 @@ msgstr "Remover parâmetro" msgid "Delete Option %s" msgstr "Excluir opção %s" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "Alterar opção %s" @@ -4818,18 +4818,18 @@ msgstr "Ferramenta de marcação" msgid "Legend/Estimated printing time" msgstr "Legenda/Tempo estimado de impressão" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "Mais" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "" @@ -4991,12 +4991,12 @@ msgid "" "presets were used as fallback." msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" "Você não pode carregar o projeto SLA com um objeto de várias partes na cama" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "Atenção!" @@ -5037,11 +5037,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "Carregar config. de um. ini/AMF/3mf/Gcode e mesclar" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "Exportar G-code" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "Enviar G-code" @@ -5436,7 +5436,7 @@ msgstr "Mostrar/Esconder Legenda e Tempo estimado de impressão" msgid "Show/Hide G-code window" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "Visualização" @@ -5554,29 +5554,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "" #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "Config. de impressão" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "Config. de material" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "Config. de filamento" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "Config. da impressora" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "" @@ -6089,7 +6089,7 @@ msgid "Open New Instance" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "" @@ -6198,9 +6198,9 @@ msgstr "G-code" msgid "Save zip file as:" msgstr "Salvar arquivo compactado(zip) como:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "Fatiamento" @@ -6466,7 +6466,7 @@ msgstr "ERRO:" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "AVISO:" @@ -6492,8 +6492,8 @@ msgstr "Instâncias" msgid "Instance %d" msgstr "Instância %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "Camadas" @@ -6764,12 +6764,12 @@ msgstr "Abaixo do objeto" msgid "Around object" msgstr "Em torno do objeto" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "Enviar para a impressora" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "Fatiar agora" @@ -6878,7 +6878,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "Ejetar o dispositivo %s(%s) falhou." -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "Novo projeto" @@ -6886,7 +6886,7 @@ msgstr "Novo projeto" msgid "Expand sidebar" msgstr "Expandir barra lateral" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6896,12 +6896,12 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -6912,11 +6912,11 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -6929,15 +6929,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -6950,18 +6950,18 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "Objeto de várias partes detectado" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 msgid "" "This file cannot be loaded in a simple mode. Do you want to switch to an " "advanced mode?" @@ -6969,11 +6969,11 @@ msgstr "" "Este arquivo não pode ser carregado em um modo simples. Deseja mudar para um " "modo avançado?" -#: src/slic3r/GUI/Plater.cpp:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "Dados avançados detectados" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " @@ -6982,7 +6982,7 @@ msgstr "" "Você não pode adicionar o objeto (s) %s por causa de um ou alguns deles é " "(são) de várias partes" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" @@ -6992,7 +6992,7 @@ msgstr "" "Em vez de considerá-los como múltiplos objetos, devo considerar\n" "esses arquivos para representar um único objeto com várias partes?" -#: src/slic3r/GUI/Plater.cpp:2767 +#: src/slic3r/GUI/Plater.cpp:2779 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." @@ -7000,139 +7000,139 @@ msgstr "" "Seu objeto parece ser muito grande, por isso foi automaticamente " "dimensionado para baixo para caber sua mesa de impressão." -#: src/slic3r/GUI/Plater.cpp:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "Objeto muito grande?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "Exportar arquivo STL:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "Exportar arquivo AMF:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "Salvar arquivo como:" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "Exportar arquivo OBJ:" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "Excluir objeto" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "Redefinir projeto" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "Dividir em objetos" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "Dados inválidos" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "Outro trabalho de exportação está em execução no momento." -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "Selecione o arquivo STL para recarregar" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "O arquivo selecionado" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "Recarregar a partir do disco:" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "Não é possível recarregar:" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "Erro durante a recarga" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "Recarregar tudo do disco" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "Existem avisos ativos sobre modelos fatiados:" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "avisos gerados" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "vista do editor 3D" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -7140,171 +7140,171 @@ msgid "" "printer technology." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" "Note, if changes will be saved then new project wouldn't keep them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "Carregar projeto" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "Importar objeto" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "Importar objetos" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "não contém um gcode válido." -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "Erro durante carregamento do arquivo .gcode" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "%s - Soltar arquivo de projeto" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "Abrir como projeto" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "Modelo somente geometria" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "Importar somente config" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "Selecione uma ação para aplicar ao arquivo" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "Ação" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "Não mostrar novamente" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "Você pode abrir apenas um arquivo .gcode por vez." -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "Arraste e solte o arquivo G-code" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "Carregar arquivo" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "Carregar arquivos" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "Todos os objetos serão removidos, continuar?" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "Excluir objetos selecionados" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "Aumentar instâncias" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "Diminuir instâncias" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "Definir números de cópias:" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "Cópias do objeto selecionado" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Definir números de cópias para %d" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "Cortado por plano" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "Salve o arquivo G-code como:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "Exportar" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." msgstr "" -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "Colar da área de transferência" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "Geral" @@ -7451,7 +7451,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7465,7 +7465,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7476,7 +7476,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -8013,11 +8013,11 @@ msgstr "Enviar G-code para o host da impressora" msgid "Upload to Printer Host with the following filename:" msgstr "Carregue para o host da impressora com o seguinte nome de arquivo:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "Use barras (/) como um separador de diretório, se necessário." -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "Grupo" @@ -8026,18 +8026,18 @@ msgstr "Grupo" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "ID" @@ -8488,7 +8488,7 @@ msgstr "nome customizado da config" msgid "symbolic profile name" msgstr "nome customizado da config" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "Camadas e perímetros" @@ -8572,11 +8572,11 @@ msgstr "Cobrir" msgid "Flow" msgstr "Fluxo" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "Outro" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "Opções de saída" @@ -8588,11 +8588,11 @@ msgstr "Impressão sequencial" msgid "Extruder clearance" msgstr "Folga da extrusora" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "Arquivo de saída" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "Scripts de pós-processamento" @@ -8600,19 +8600,20 @@ msgstr "Scripts de pós-processamento" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "Notas" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "Dependências" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "Dependências de perfil" @@ -8689,7 +8690,7 @@ msgid "Ramming settings" msgstr "Config. de Ramming" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "G-code customizado" @@ -8736,8 +8737,8 @@ msgstr "" msgid "Size and coordinates" msgstr "Tamanho e coordenadas" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "Capacidades" @@ -8806,11 +8807,11 @@ msgstr "Inclinar" msgid "Tilt time" msgstr "Tempo de inclinação" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "Correções" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "Exposição" @@ -8974,42 +8975,46 @@ msgstr "Tem certeza de que deseja %1% da predefinição selecionada?" msgid "%1% Preset" msgstr "%1% Predefinição" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "Definir" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "Achar" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "Palavra inteira" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" "Os limites da máquina serão emitidos para o G-code e usados ​​o para estimar o " "tempo de impressão." -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " @@ -9020,7 +9025,7 @@ msgstr "" "preciso, pois a impressora pode aplicar um conjunto diferente de limites da " "máquina." -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." @@ -9028,12 +9033,12 @@ msgstr "" "Os limites da máquina não são definidos, portanto, a estimativa do tempo de " "impressão pode não ser precisa." -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "CADEADO FECHADO" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 msgid "" "indicates that the settings are the same as the system (or default) values " "for the current option group" @@ -9041,12 +9046,12 @@ msgstr "" "indica que as config. são as mesmas que os valores do sistema (ou padrão) " "para o grupo de opções atual" -#: src/slic3r/GUI/Tab.cpp:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "CADEADO ABERTO" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -9058,12 +9063,12 @@ msgstr "" "Clique no ícone DESBLOQUEAR para redefinir todas as config. do grupo de " "opções atual para os valores do sistema (ou padrão)." -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "PONTO BRANCO" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 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." @@ -9072,12 +9077,12 @@ msgstr "" "padrão),\n" "para o botão direito: indica que as config. não foram modificadas." -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "REDEFINIR" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -9089,7 +9094,7 @@ msgstr "" "Clique no ícone REDEFINIR para redefinir todas as config. do grupo de opções " "atual para a última predefinição salva." -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" @@ -9097,7 +9102,7 @@ msgstr "" "O ícone CADEADO FECHADO indica que as config. são as mesmas que os valores " "do sistema (ou padrão) para o grupo de opções atual" -#: src/slic3r/GUI/Tab.cpp:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -9109,13 +9114,13 @@ msgstr "" "Clique para redefinir todas as config. para o grupo de opções atual para os " "valores do sistema (ou padrão)." -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" "O ícone PONTO BRANCO indica uma predefinição que não é do sistema (ou não " "predefinida)." -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." @@ -9123,7 +9128,7 @@ msgstr "" "O ícone PONTO BRANCO indica que as config. são as mesmas da última " "predefinição salva para o grupo de opções atual." -#: src/slic3r/GUI/Tab.cpp:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -9135,7 +9140,7 @@ msgstr "" "Clique para redefinir todas as config. do grupo de opções atual para a " "última predefinição salva." -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." @@ -9143,7 +9148,7 @@ msgstr "" "O ícone CADEADO FECHADO indica que o valor é o mesmo que o valor do sistema " "(ou padrão)." -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" @@ -9153,7 +9158,7 @@ msgstr "" "valor do sistema (ou padrão).\n" "Clique para redefinir o valor atual para o valor do sistema (ou padrão)." -#: src/slic3r/GUI/Tab.cpp:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." @@ -9161,7 +9166,7 @@ msgstr "" "O ícone PONTO BRANCO indica que o valor é o mesmo da última predefinição " "guardada." -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -9171,31 +9176,31 @@ msgstr "" "predefinição salva.\n" "Clique para redefinir o valor atual para a última predefinição salva." -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "Material" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "Cabeça de suporte" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "Pilar de suporte" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "Conexão das varas de suporte e junções" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "Geração Automática" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" @@ -9204,74 +9209,74 @@ msgstr "" "\"%1%\" está desabilitado porque \"%2%\" está ativado na categoria \"%3%\".\n" "Para habilitar \"%1%\", desligue \"%2%\"" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "Elevação do objeto" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "Pad em torno do objeto" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "Indef" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "Alterando Predefinições: Alterações não salvas" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "Valor Antigo" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "Valor Novo" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "Transferir" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "Descartar" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "Salvar" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -9279,11 +9284,11 @@ msgid "" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "PrusaSlicer se lembrará de sua ação." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -9292,58 +9297,59 @@ msgstr "" "Visite \"Preferências\" e marque \"%1%\"\n" "para ser questionado sobre alterações não salvas novamente." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" "Alguns campos são muito longos para caber. Clique com o botão direito do " "mouse para revelar o texto completo." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "Todas as alterações nas configurações serão descartadas." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "Remover o objeto selecionado." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "" "Transfira as opções selecionadas para as predefinições recém-selecionadas." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format msgid "Save the selected options to preset \"%1%\"." msgstr "Salve as opções selecionadas para predefinir \"%1%\"." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 #, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "" "Transfira as opções selecionadas para a predefinição recém-selecionada \"%1%" "\"." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "\"%1%\"Tem as seguintes alterações não salvas:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " @@ -9352,7 +9358,7 @@ msgstr "" "A predefinição \"%1%\" não é compatível com o novo perfil de impressora e " "possui as seguintes alterações não salvas:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " @@ -9361,50 +9367,50 @@ msgstr "" "A predefinição \"%1%\" não é compatível com o novo perfil de impressão e " "possui as seguintes alterações não salvas:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "Contagem de extrusoras" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "" @@ -10239,26 +10245,26 @@ msgstr "falha na validação" msgid "write calledback failed" msgstr "write calledback falhou" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "Todos os objetos estão fora do volume de impressão." -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "As config. fornecidas causarão uma impressão vazia." -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "Alguns objetos são muito próximos; sua extrusora irá colidir com eles." -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "" "Alguns objetos são muito altos e não podem ser impressos sem colisões de " "extrusoras." -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " @@ -10268,14 +10274,14 @@ msgstr "" "Remova todos, exceto o último objeto, ou habilite o modo sequencial por " "\"complete_objects\"." -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." msgstr "" "A opção vaso espiral só pode ser usada ao imprimir objetos de material único." -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." @@ -10283,7 +10289,7 @@ msgstr "" "A torre de limpeza só é suportada se todas as extrusoras tiverem o mesmo " "diâmetro da ponteira e usarem filamentos do mesmo diâmetro." -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." @@ -10291,7 +10297,7 @@ msgstr "" "A Torre de Limpeza é atualmente suportada apenas para os firmwares Marlin, " "RepRap/Sprinter, RepRapFirmware e Repetier G-code." -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." @@ -10299,19 +10305,19 @@ msgstr "" "A torre da limpeza é suportada atualmente somente com o endereçamento " "relativo da extrusora (use_relative_e_distances = 1)." -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" "A prevenção de escorrimento não é suportada atualmente com a torre da " "limpeza permitida." -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" "Atualmente, a Torre limpa não suporta E volumétrica (use_volumetric_e=0)." -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." @@ -10319,7 +10325,7 @@ msgstr "" "A torre de limpeza só é suportada para vários objetos se eles tiverem " "alturas de camada iguais." -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" @@ -10327,7 +10333,7 @@ msgstr "" "A torre de limpeza só é suportada para vários objetos se eles tiverem " "alturas de camada iguais" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" @@ -10335,7 +10341,7 @@ msgstr "" "A torre de limpeza só é suportada para vários objetos se elas forem " "impressas em um número igual de camadas de estrado" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -10343,7 +10349,7 @@ msgstr "" "A torre de limpeza só é suportado para vários objetos se eles são impressos " "com a mesma distância de contato do suporte" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." @@ -10351,7 +10357,7 @@ msgstr "" "A torre de limpeza só é suportada para vários objetos se eles são fatiados " "igualmente." -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" @@ -10359,26 +10365,26 @@ msgstr "" "A torre de limpeza só é suportada se todos os objetos tiverem a mesma altura " "de camada variável" -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "" "Um ou mais objetos foram atribuídos a uma extrusora que a impressora não tem." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "" "%1% = %2% mm é muito baixo para ser impresso a uma altura de camada %3% mm" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "" "Excesso %1%=%2% milímetro a ser imprimível com um diâmetro da ponteira %3% " "milímetro" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -10390,7 +10396,7 @@ msgstr "" "(support_material_extruder = = 0 ou support_material_interface_extruder = = " "0), todos as ponteiras têm que ser do mesmo diâmetro." -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." @@ -10398,7 +10404,7 @@ msgstr "" "Para que a torre de limpeza funcione com os suportes solúveis, as camadas de " "suporte precisam ser sincronizadas com as camadas de objeto." -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -10410,28 +10416,47 @@ msgstr "" "(ambos support_material_extruder e support_material_interface_extruder " "precisam ser definidos como 0)." -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "" "A primeira altura da camada não pode ser maior do que o diâmetro da ponteira" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "A altura da camada não pode ser maior do que o diâmetro da ponteira" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "Camadas de preenchimento" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "Exportando o G-code" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "Gerando G-code" diff --git a/resources/localization/ru/PrusaSlicer_ru.po b/resources/localization/ru/PrusaSlicer_ru.po index 79a0c384a..66d2d0414 100644 --- a/resources/localization/ru/PrusaSlicer_ru.po +++ b/resources/localization/ru/PrusaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: 2021-12-15 15:35+0700\n" "Last-Translator: Andylg andylg@yandex.ru\n" "Language-Team: \n" @@ -611,7 +611,7 @@ msgstr "Активный" msgid "PrusaSlicer version" msgstr "Версия PrusaSlicer" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "печать" @@ -619,17 +619,17 @@ msgstr "печать" msgid "filaments" msgstr "пруток" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "Профиль SLA печати" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "Профиль SLA материала" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "принтер" @@ -688,7 +688,7 @@ msgstr "Стандартные" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "Все" @@ -778,7 +778,7 @@ msgstr "SLA материалы (фотополимерная смола)" msgid "All installed printers are compatible with the selected %1%." msgstr "Все установленные принтеры совместимы с выбранным прутком %1%." -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "пруток" @@ -873,7 +873,7 @@ msgstr "" "(снапшот)." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "Перезагрузить с диска" @@ -1183,7 +1183,7 @@ msgstr "&Завершить" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "Отмена" @@ -1258,7 +1258,7 @@ msgstr "" "была успешно создана на рабочем столе." #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "Интеграция с рабочим столом" @@ -1748,8 +1748,8 @@ msgid "parameter name" msgstr "имя параметра" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "Н/Д" @@ -1956,7 +1956,7 @@ msgstr "Добавить на стол" msgid "Add selected shape(s) to the bed" msgstr "Добавьте выбранную фигуру(-ы) на стол" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "Добавить в библиотеку" @@ -2162,7 +2162,7 @@ msgid "Wipe" msgstr "Очистка" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "Опции" @@ -2433,7 +2433,7 @@ msgid "Add..." msgstr "Добавить..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "Удалить всё" @@ -3358,7 +3358,7 @@ msgstr "Критическая ошибка" msgid "Internal error: %1%" msgstr "Внутренняя ошибка: %1%" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " @@ -3369,7 +3369,7 @@ msgstr "" "Попробуйте вручную удалить файл для восстановления после ошибки. " "Пользовательские профили не будут затронуты." -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." @@ -3377,12 +3377,12 @@ msgstr "" "Ошибка обработки конфигурационного файла PrusaGCodeViewer. Вероятно, он " "повреждён. Попробуйте вручную удалить файл для восстановления после ошибки." -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "Вы запустили %1% версии %2%." -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3400,7 +3400,7 @@ msgstr "" "Если да, то перед импортом новой конфигурации будет создана резервная копия " "активной конфигурации." -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3413,19 +3413,19 @@ msgstr "" "\n" "Следует ли импортировать эту конфигурацию?" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "Импорт" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "Не импортировать" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3441,7 +3441,7 @@ msgstr "" "https://www.prusa3d.cz/prusaslicer/.\n" "Продолжить?" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" @@ -3450,46 +3450,46 @@ msgstr "" "%s\n" "Хотите продолжить?" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "Запомнить мой выбор" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "Загрузка конфигурации" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "Доступна новый релиз программы %1%." -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "Смотреть страницы загрузки." -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "Доступна новая предрелизная версия %1%." -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "Смотрите страницу релизов." -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "Подготовка вкладок настроек" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3502,24 +3502,24 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" "У вас имеются следующие профили с сохраненными параметрами для загрузки на " "хост печати" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" @@ -3529,7 +3529,7 @@ msgstr "" "настройках принтера.\n" "Теперь эти настройки будут доступны в разделе настройки физических принтеров." -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" @@ -3538,138 +3538,138 @@ msgstr "" "При создании новых принтеров они будут именоваться как «Принтер N».\n" "Примечание: это имя можно изменить позже в настройках физических принтеров" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "Информация" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "Воссоздание" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "Загрузка текущих профилей" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "Загрузка режима просмотра" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "Выберите один файл (3MF/AMF):" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Выберите один или несколько файлов (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "Выберите один файл (GCODE/.GCO/.G/.ngc/NGC):" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "Изменение языка приложения" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "Выбор языка" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "Язык" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "изменено" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "Запустить %s" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "&Резервные копии конфигурации (снапшот)" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "Проверка и активация резервных копий конфигурации" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "Сделать &снапшот" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "Сделать резервную копию конфигурации (снапшот)" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "Проверка наличие обновлений конфигурации" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "Проверка наличие обновлений конфигурации" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "&Настройки приложения" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "Настройки приложения" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "Простой" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "Простой режим просмотра интерфейса приложения" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "Расширенный" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "Расширенный режим просмотра интерфейса приложения" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "Продвинутый" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "Продвинутый режим просмотра интерфейса приложения" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "Режим интерфейса" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "%s режим просмотра" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "&Язык программы" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "&Прошивка принтера" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "Загрузить прошивку в принтер на основе Arduino" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "Создание резервной копии конфигурации (снапшот)" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." @@ -3677,32 +3677,32 @@ msgstr "" "В некоторых профилях имеются изменения. Несохранённые изменения в них не " "будут записаны в снапшот." -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "Имя снапшота" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "Загрузка резервной копии конфигурации (снапшот)" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "Активировать резервную копию конфигурации %1%?" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "Сбой активации снапшота." -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "Перезапустить приложение" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "Выбор языка" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3710,87 +3710,87 @@ msgstr "" "Смена языка вызовет перезапуск приложения.\n" "Вы потеряете содержимое стола." -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "Хотите продолжить?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "&Настройки" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "Изменённый профиль успешно сохранён" msgstr[1] "Изменённые профили успешно сохранёны" msgstr[2] "Изменённые профили успешно сохранёны" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "Для нового проекта все изменения будут сброшены" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "Загрузка нового проекта при существующих изменениях в текущем проекте." -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "Загрузка проекта" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "Открытие нового проекта при несохранении некоторых профилей." -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "Загрузки всё ещё продолжаются" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "Остановить их и продолжить?" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "Текущие загрузки" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "По технологии SLA невозможно напечатать составную модель(и)." -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "Пожалуйста, проверьте список моделей перед изменением профиля." -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "Редактирование конфигурации с помощью мастера настроек" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "Выбрать файл G-кода:" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "Открыть гиперссылку в браузере по умолчанию?" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "PrusaSlicer: Открытие гиперссылки" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "Запретить открытие гиперссылок в браузере" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "PrusaSlicer запомнит ваш выбор." -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -3799,8 +3799,8 @@ msgstr "" "Зайдите в «Настройки приложения» и установите флажок \"%1%\", чтобы изменить " "свой выбор." -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "PrusaSlicer: Не спрашивать снова" @@ -3906,7 +3906,7 @@ msgstr "Юбка и кайма" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3916,7 +3916,7 @@ msgid "Advanced" msgstr "Дополнительно" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3930,8 +3930,8 @@ msgid "Supports" msgstr "Поддержка" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3941,8 +3941,8 @@ msgstr "Поддержка" msgid "Pad" msgstr "Подложка" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -4045,7 +4045,7 @@ msgstr "Экспорт в STL" msgid "Reload the selected volumes from disk" msgstr "Перезагрузить выбранные объёмы с диска" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "Заменить STL" @@ -4071,19 +4071,19 @@ msgstr "Отмасштабировать под область печати" msgid "Scale the selected object to fit the print volume" msgstr "Отмасштабировать выбранную модель до объёма стола" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "Преобразовать размер из английской системы мер" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "Отменить преобразование размера из английской системы мер" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "Преобразовать размер из метрической системы мер" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "Отменить преобразование размера из метрической системы мер" @@ -4357,7 +4357,7 @@ msgstr "Загрузить модификатор" msgid "Loading" msgstr "Загрузка" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "Загрузка файла" @@ -4802,7 +4802,7 @@ msgstr "Удалить параметр" msgid "Delete Option %s" msgstr "Удаление параметра %s" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "Изменение параметра %s" @@ -4921,18 +4921,18 @@ msgstr "Маркер инструмента" msgid "Legend/Estimated printing time" msgstr "Условные обозначения/Расчётное время печати" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "Подробнее" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "Открыть настройки приложения." -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "Открыть документацию в браузере." @@ -5108,11 +5108,11 @@ msgstr "" "Импортированный SLA архив не содержит никаких профилей. Текущие SLA профили " "использовались в качестве резервных." -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "Вы не можете загрузить SLA проект с составной моделью на столе" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "Внимание!" @@ -5153,11 +5153,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "Загрузить конфигурацию из ini/amf/3mf/g-кода и объединить" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "Экспорт в G-код" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "Отправить G-код" @@ -5549,7 +5549,7 @@ msgstr "Показать/Скрыть условные обозначения/р msgid "Show/Hide G-code window" msgstr "Показать/скрыть окно отображения G-кода" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "Предпросмотр нарезки" @@ -5667,29 +5667,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "Закрытие PrusaSlicer, при имеющихся изменениях в профилях." #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "Настройки печати" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "Настройка материала" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "Настройки прутка" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "Настройки принтера" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "Без названия" @@ -6205,7 +6205,7 @@ msgid "Open New Instance" msgstr "Запустить новый экземпляр программы" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "Сравнение профилей" @@ -6314,9 +6314,9 @@ msgstr "G-код" msgid "Save zip file as:" msgstr "Сохранить .zip файл как:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "Нарезка" @@ -6589,7 +6589,7 @@ msgstr "ОШИБКА:" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "ПРЕДУПРЕЖДЕНИЕ:" @@ -6615,8 +6615,8 @@ msgstr "Копии" msgid "Instance %d" msgstr "Копия %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "Слои" @@ -6901,12 +6901,12 @@ msgstr "Под моделью" msgid "Around object" msgstr "Вокруг модели" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "На принтер" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "НАРЕЗАТЬ" @@ -7017,7 +7017,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "Не удалось извлечь устройство %s(%s)." -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "Новый проект" @@ -7025,7 +7025,7 @@ msgstr "Новый проект" msgid "Expand sidebar" msgstr "Развернуть боковую панель" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -7042,12 +7042,12 @@ msgstr[2] "" "Приведённые ниже профили были временно установлены на активной копии " "PrusaSlicer" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "Не удалось загрузить файл \"%1%\" из-за недопустимой конфигурации." -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -7065,11 +7065,11 @@ msgstr[2] "" "Похоже у объектов из файла %s нулевой размер.\n" "Они были удалены из модели." -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "Размер модели равен нулю" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -7092,15 +7092,15 @@ msgstr[2] "" "Внутренней единицей измерения PrusaSlicer являются миллиметры. Пересчитать " "размеры моделей?" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "Модель слишком мала" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "Применить ко всем загружаемым мелким моделям." -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -7123,7 +7123,7 @@ msgstr[2] "" "Внутренней единицей измерения PrusaSlicer являются миллиметры. Пересчитать " "размеры моделей?" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" @@ -7133,11 +7133,11 @@ msgstr "" "Следует ли загружать файл как единую модель, состоящий из нескольких\n" "частей (вместо того, чтобы рассматривать их как несколько моделей)?" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "Обнаружена модель, состоящая из нескольких частей" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 msgid "" "This file cannot be loaded in a simple mode. Do you want to switch to an " "advanced mode?" @@ -7145,11 +7145,11 @@ msgstr "" "Этот файл не может быть загружен в простом режиме. Хотите перейти в " "расширенный режим?" -#: src/slic3r/GUI/Plater.cpp:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "Обнаружены расширенные данные" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " @@ -7158,7 +7158,7 @@ msgstr "" "Вы не можете добавить модель(и) из %s, потому что одна или несколько из них " "являются составными (состоят из нескольких частей)" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" @@ -7168,7 +7168,7 @@ msgstr "" "Вместо того, чтобы рассматривать их как несколько моделей, следует ли " "рассматривать их как одну модель, состоящую из несколько частей?" -#: src/slic3r/GUI/Plater.cpp:2767 +#: src/slic3r/GUI/Plater.cpp:2779 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." @@ -7176,54 +7176,54 @@ msgstr "" "Ваша модель слишком большая, поэтому она была автоматически уменьшена до " "размера вашего печатного стола." -#: src/slic3r/GUI/Plater.cpp:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "Модель слишком большая?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "Экспорт в STL файл:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "Экспорт в AMF файл:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "Сохранить файл как:" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "Экспорт в OBJ файл:" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "Удаление модели" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "Удаление всех моделей" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "Обнуление проекта" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" "Выбранная модель не может быть разделена, так как она состоит из одной части." -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "Все модификаторы были удалены" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "Разделить на модели" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." @@ -7231,87 +7231,87 @@ msgstr "" "Модель имеет пользовательские принудительные поддержки, которые не будут " "использоваться, так как поддержки отключены." -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "Разрешить только принудительную поддержку" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "Неверные данные" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "Уже идёт другой процесс экспорта." -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "Заменить из:" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "Невозможно заменить более чем одним объём" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "Ошибка при выполнении замены" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "Выберите новый файл" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "Файл для замены не выбран" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "Пожалуйста, выберите файл для перезагрузки" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "В выбранном файле" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "отличается от исходного файла" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "Хотите заменить его" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "Перезагрузка из:" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "Не удалось перезагрузить:" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "Ошибка во время перезагрузки" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "Перезагрузить всё с диска" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "Имеются активные предупреждения о нарезанных моделях:" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "вызвала предупреждения" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "3D-вид" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "Отмена / Повтор в процессе выполнения" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -7322,21 +7322,21 @@ msgstr "" "Некоторые профили %1% были изменены и будут потеряны после переключения " "технологии печати." -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "Создание нового проекта при изменении в текущем проекте." -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" "Создание нового проекта при имеющихся изменениях в нескольких профилях." -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" "Вы можете сохранить изменения в профилях в новом проекте или отменить их." -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" @@ -7346,125 +7346,125 @@ msgstr "" "сохранить изменения как новые профили.\n" "Примечание: При сохранении изменений они не переносятся в новый проект." -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "Создание нового проекта" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "Загрузка проекта" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "Импорт модели" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "Импорт моделей" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "G-кода содержатся недопустимые данные." -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "Ошибка при загрузке .gcode файла" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "%s - Перетаскивание файла-проекта" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "Открыть как проект" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "Импортировать только геометрию" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "Импортировать только конфигурацию" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "Выберите действие для применения к файлу" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "Действие" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "Больше не показывать" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "За раз вы можете открыть только один .gcode файл." -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "Перетащите G-код файл" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "Загрузить файл" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "Загрузить файлы" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "Все модели будут удалены, продолжить?" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "Удаление выбранных моделей" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "Добавление копии" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "Удаление копии" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "Введите количество копий:" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "Количество копий выбранной модели" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Задать количество копий: %d" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "Разрез по плоскости" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "Сохранить файл G-кода как:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "Сохранить SL1 / SL1S файл как:" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "Указано недопустимое имя файла." -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "Следующие символы не разрешены файловой системой FAT:" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" @@ -7472,15 +7472,15 @@ msgstr "" "На столе ничего нет.\n" "Всё равно сохранить проект?" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "Сохранение проекта" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "Экспорт" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." @@ -7488,14 +7488,14 @@ msgstr "" "После починки сетки были удалены пользовательские поддержки, швы и " "мультиматериальная покраска." -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "Вставка из буфера обмена" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "Общие" @@ -7636,7 +7636,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7650,7 +7650,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7661,7 +7661,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -8226,13 +8226,13 @@ msgstr "Отправить G-кода на хост принтера" msgid "Upload to Printer Host with the following filename:" msgstr "Загрузить на хост принтера со следующим именем:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" "При необходимости используйте косую черту ( / ) в качестве разделителя " "каталогов." -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "Группа" @@ -8241,18 +8241,18 @@ msgstr "Группа" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "Имя загружаемого файла не заканчивается на \"%s\". Хотите продолжить?" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "Загрузить" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "Загрузить и напечатать" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "Загрузить и сэмулировать" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "Загрузить" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "ID" @@ -8715,7 +8715,7 @@ msgstr "полное имя профиля" msgid "symbolic profile name" msgstr "символическое имя профиля" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "Слои и периметры" @@ -8799,11 +8799,11 @@ msgstr "Перекрытие" msgid "Flow" msgstr "Поток" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "Прочее" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "Выходные параметры" @@ -8815,11 +8815,11 @@ msgstr "Последовательная печать" msgid "Extruder clearance" msgstr "Радиус безопасной зоны экструдера" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "Выходной файл" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "Скрипты постобработки" @@ -8827,19 +8827,20 @@ msgstr "Скрипты постобработки" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "Заметки" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "Зависимости" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "Зависимости профиля" @@ -8925,7 +8926,7 @@ msgid "Ramming settings" msgstr "Настройки рэмминга" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "Пользовательский G-код" @@ -8971,8 +8972,8 @@ msgstr "" msgid "Size and coordinates" msgstr "Размер и координаты" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "Характеристики принтера" @@ -9041,11 +9042,11 @@ msgstr "Наклон ванночки" msgid "Tilt time" msgstr "Время наклона ванночки" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "Корректировка" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "Экспозиция" @@ -9239,42 +9240,46 @@ msgstr "Вы уверены, что хотите %1% выбранный проф msgid "%1% Preset" msgstr "Профиль %1%" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "Выбор" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "Найти" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "Слово целиком" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" "Ограничения принтера будут передаваться в G-код и использоваться для оценки " "времени печати." -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " @@ -9284,7 +9289,7 @@ msgstr "" "используются для оценки времени печати, которое может быть неточным, " "поскольку принтер может применять другой набор ограничений для принтера." -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." @@ -9292,12 +9297,12 @@ msgstr "" "Ограничения принтера не заданы, поэтому оценка времени печати может быть " "неточной." -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "ЗАКРЫТЫЙ ЗАМОЧЕК" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 msgid "" "indicates that the settings are the same as the system (or default) values " "for the current option group" @@ -9305,12 +9310,12 @@ msgstr "" "указывает, что настройки совпадают с системными значениями (или значениями " "по умолчанию) для текущей группы." -#: src/slic3r/GUI/Tab.cpp:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "ОТКРЫТЫЙ ЗАМОЧЕК" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -9322,12 +9327,12 @@ msgstr "" "Нажмите, чтобы сбросить все настройки текущей группы до системных значений " "(или значений по умолчанию)." -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "БЕЛЫЙ МАРКЕР" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 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." @@ -9335,12 +9340,12 @@ msgstr "" "слева: указывает на не системный профиль (или профиль не по умолчанию),\n" "справа: указывает, что параметры не были изменены." -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "ЗНАЧОК СО СТРЕЛКОЙ" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -9353,7 +9358,7 @@ msgstr "" "настройки для текущей группы до последнего\n" "сохранённого значения профиля." -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" @@ -9361,7 +9366,7 @@ msgstr "" "ЗАКРЫТЫЙ ЗАМОЧЕК указывает, что настройки совпадают с системными значениями " "(или значениями по умолчанию) для текущей группы." -#: src/slic3r/GUI/Tab.cpp:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -9373,12 +9378,12 @@ msgstr "" "Нажмите, чтобы сбросить все настройки текущей группы до системных значений " "(или значений по умолчанию)." -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" "БЕЛЫЙ МАРКЕР указывает на не системный профиль (или профиль не по умолчанию)." -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." @@ -9386,7 +9391,7 @@ msgstr "" "БЕЛЫЙ МАРКЕР означает, что настройки совпадают с настройками в последнем " "сохранённом профиле для текущей группы." -#: src/slic3r/GUI/Tab.cpp:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -9398,7 +9403,7 @@ msgstr "" "Нажмите, чтобы сбросить все настройки для текущей группы до последнего " "сохранённого значения профиля." -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." @@ -9406,7 +9411,7 @@ msgstr "" "ЗАКРЫТЫЙ ЗАМОЧЕК указывает, что значение совпадает с системным значением " "(или значение по умолчанию)." -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" @@ -9417,7 +9422,7 @@ msgstr "" "Нажмите, чтобы сбросить текущее значение к системному значению (или значению " "по умолчанию)." -#: src/slic3r/GUI/Tab.cpp:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." @@ -9425,7 +9430,7 @@ msgstr "" "БЕЛЫЙ МАРКЕР указывает, что значение совпадает со значением в последнем " "сохранённом профиле." -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -9435,31 +9440,31 @@ msgstr "" "значением в последнем сохранённом профиле для текущей группы.\n" "Нажмите, чтобы сбросить значение до последнего сохранённого значения профиля." -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "Материал" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "Профиль печати материалами" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "Носик поддержки" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "Тело поддержки" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "Соединения опор поддержки со связующим узлом" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "Автоматическая генерация" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" @@ -9468,74 +9473,74 @@ msgstr "" "\"%1%\" отключена, так как \"%2%\" находится в категории \"%3%\".\n" "Чтобы включить \"%1%\", отключите \"%2%\"" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "Высота подъёма модели" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "Подложка вокруг модели" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "Не задано" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "Несохранённые изменения" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "Смена профилей: несохранённые изменения" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "Старое значение" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "Новое значение" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "Запомнить" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "Перенести" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "Не сохранять" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "Не сохранять" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "Сохранить" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -9543,11 +9548,11 @@ msgid "" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "PrusaSlicer запомнит ваш выбор." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -9556,56 +9561,57 @@ msgstr "" "Зайдите в настройки приложения и установите флажок \"%1%\",\n" "чтобы вернуть запрос о несохранённых изменениях." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" "Некоторые поля слишком длинные. Щёлкните правой кнопкой мыши, чтобы показать " "полный текст." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "Все изменения в настройках не будут сохранены" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "Все изменённые параметры будут потеряны." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "Сохранить выбранные параметры." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "Запомнить выбранные настройки." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "Перенести выбранные параметры во вновь выбранный профиль." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format msgid "Save the selected options to preset \"%1%\"." msgstr "Сохранить выбранные параметры в профиле \"%1%\"." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 #, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "Перенести выбранные параметры во вновь выбранный профиль \"%1%\"." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "Был изменён следующий профиль" msgstr[1] "Были изменены следующие профиля" msgstr[2] "Были изменены следующие профилей" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "Профиль \"%1%\" имеет следующие несохранённые изменения:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " @@ -9614,7 +9620,7 @@ msgstr "" "Профиль \"%1%\" несовместим с новым профилем принтера, и в нём есть " "следующие несохранённые изменения:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " @@ -9623,40 +9629,40 @@ msgstr "" "Профиль \"%1%\" несовместим с новым профилем печати, и имеет следующие " "несохранённые изменения:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "Количество экструдеров" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "Выберите профили для сравнения" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "Показать все профили (включая несовместимые)" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "Значение в левом профиле" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "Значение в правом профиле" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "Не найден один из профилей" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "Сравниваемые профили имеют различную технологию печати" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "Отличия в профилях отсутствуют" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." @@ -9664,11 +9670,11 @@ msgstr "" "Профили отличаются.\n" "Нажмите эту кнопку, чтобы выставить в правый профиль тоже что и в левом." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "Неопределённая категория" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "Неопределённая группа" @@ -10525,27 +10531,27 @@ msgstr "ошибка проверки" msgid "write calledback failed" msgstr "ошибка записи обратного вызова" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "Все модели находятся за пределами области печати." -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "Заданные настройки приведут к пустой печати." -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "" "Некоторые модели находятся слишком близко друг к другу. Экструдер при печати " "столкнётся с ними." -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "" "Некоторые модели слишком высокие и при печати экструдер столкнётся с ними." -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " @@ -10555,13 +10561,13 @@ msgstr "" "Либо оставьте на столе одну модель или включите последовательную печать с " "помощью \"complete_objects\"." -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." msgstr "В режиме «Спиральная ваза» можно печатать только одним материалом." -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." @@ -10569,7 +10575,7 @@ msgstr "" "Режим черновой башни применим только в том случае, если все экструдеры имеют " "одинаковый диаметр сопла и используется пруток одного диаметра." -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." @@ -10577,7 +10583,7 @@ msgstr "" "В настоящее время режим черновой башни поддерживается только следующими " "типами G-кода: Marlin, RepRap/Sprinter, RepRapFirmware, Repetier." -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." @@ -10585,20 +10591,20 @@ msgstr "" "В настоящее время для режима черновой башни поддерживается только " "относительная адресация экструдера (use_relative_e_distances=1)." -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" "«Предотвращение течи материала» в настоящее время не поддерживается при " "включённой черновой башне." -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" "Черновая башня в настоящее время не поддерживает объёмные значения E " "(use_volumetric_e=0)." -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." @@ -10606,7 +10612,7 @@ msgstr "" "В настоящее время режим черновой башни не поддерживает последовательную " "печать для мультиматериальных принтеров." -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" @@ -10614,7 +10620,7 @@ msgstr "" "Режим черновой башни применим для нескольких моделей только в том случае, " "если они имеют одинаковую высоту слоя." -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" @@ -10622,7 +10628,7 @@ msgstr "" "Режим черновой башни применим для нескольких моделей только в том случае, " "если они имеют одинаковое число слоёв подложки." -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -10631,7 +10637,7 @@ msgstr "" "если они печатаются с одинаковым support_material_contact_distance " "(расстояние от поддержки до модели по вертикали)." -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." @@ -10639,7 +10645,7 @@ msgstr "" "Режим черновой башни применим для нескольких моделей только в том случае, " "если они нарезаны одинаково." -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" @@ -10647,26 +10653,26 @@ msgstr "" "Режим черновой башни применим только в том случае, если все модели имеют " "одну и туже переменную высоту слоя." -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "" "Для одного или нескольких моделей был назначен экструдер, который у принтера " "отсутствует." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "" "Значение параметра %1%=%2% мм слишком мало для печати при высоте слоя %3% мм" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "" "Чрезмерное значение параметра %1%=%2% мм для печати при диаметре сопла %3% мм" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -10678,7 +10684,7 @@ msgstr "" "(support_material_extruder == 0 или support_material_interface_extruder == " "0), все сопла должны иметь одинаковый диаметр." -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." @@ -10686,7 +10692,7 @@ msgstr "" "Для того, чтобы режим черновой башни работал с растворимой поддержкой, слои " "поддержки должны быть синхронизированы со слоями модели." -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -10699,27 +10705,46 @@ msgstr "" "и «Экструдер, печатающий связующий слой поддержки/подложки» должны быть " "установлены в 0)." -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "Высота первого слоя не может быть больше диаметра сопла." -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "Высота слоя не может быть больше диаметра сопла" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "Заполнение слоёв" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "Генерация юбки и каймы" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "Экспорт в G-код" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "Генерация G-кода" diff --git a/resources/localization/tr/PrusaSlicer_tr.po b/resources/localization/tr/PrusaSlicer_tr.po index f7912c405..0b0e643c4 100644 --- a/resources/localization/tr/PrusaSlicer_tr.po +++ b/resources/localization/tr/PrusaSlicer_tr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: 2019-05-23 00:37+0300\n" "Last-Translator: \n" "Language-Team: \n" @@ -563,7 +563,7 @@ msgstr "Aktif" msgid "PrusaSlicer version" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "yazdır" @@ -571,17 +571,17 @@ msgstr "yazdır" msgid "filaments" msgstr "filamentler" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "SLA baskısı" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "SLA malzemesi" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "yazıcı" @@ -640,7 +640,7 @@ msgstr "Standart" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "Tümü" @@ -728,7 +728,7 @@ msgstr "" msgid "All installed printers are compatible with the selected %1%." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "filaman" @@ -819,7 +819,7 @@ msgstr "" "oluşturulur." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "" @@ -1111,7 +1111,7 @@ msgstr "&Bitti" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "İptal" @@ -1175,7 +1175,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "" @@ -1618,8 +1618,8 @@ msgid "parameter name" msgstr "parametre ismi" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "" @@ -1819,7 +1819,7 @@ msgstr "" msgid "Add selected shape(s) to the bed" msgstr "" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "Ekle" @@ -2021,7 +2021,7 @@ msgid "Wipe" msgstr "" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "Ayarlar" @@ -2290,7 +2290,7 @@ msgid "Add..." msgstr "Ekle..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "Tümünü sil" @@ -3166,25 +3166,25 @@ msgstr "" msgid "Internal error: %1%" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " "not be affected." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3196,7 +3196,7 @@ msgid "" "configuration." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3205,19 +3205,19 @@ msgid "" "Shall this configuration be imported?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3227,53 +3227,53 @@ msgid "" "Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" "Do you want to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3286,198 +3286,198 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" "Settings will be available in physical printers settings." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" "Note: This name can be changed later from the physical printers settings" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "Yeniden oluşturma" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "Geçerli hazır ayarlar yükleniyor" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "Mod görünümü yükleniyor" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "Bir dosya seçin (3MF/AMF):" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Bir veya daha fazla dosya seçin (STL / OBJ / AMF / 3MF / PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "Bir uygulama dilinin değiştirilmesi" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "Dil seçiniz" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "Dil" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "değiştirilmiş" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "%s başlat" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "&Yapılandırma Anlık Görüntüleri" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "Yapılandırma anlık görüntülerini inceleme/etkinleştirme" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "Yapılandırma &Anlık Görüntüsü Al" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "Yapılandırma anlık görüntüsünü kaydet" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "&Tercihler" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "Uygulama tercihleri" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "Basit" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "Basit görünüm modu" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "Gelişmiş Görünüm Modu" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "Uzman" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "Uzman Modu" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "Mod" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "%s Görüntüleme Modu" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "Arduino tabanlı bir yazıcıya yazılım yükle" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "Anlık görüntü adı" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "Dil seçimi" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3485,96 +3485,96 @@ msgstr "" "Dilin değiştirilmesi uygulamanın yeniden başlatılmasını tetikler.\n" "Tabla içeriğini kaybedeceksiniz." -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "Devam etmek istiyor musunuz?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "&Ayarlar" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "SLA teknolojisi ile çok parçalı nesnelerin basılması mümkün değildir." -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "" "Lütfen önceden ayarlanmış değişiklik yapmadan önce nesne listenizi kontrol " "edin." -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to changes your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "" @@ -3680,7 +3680,7 @@ msgstr "Etek ve kenar" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3690,7 +3690,7 @@ msgid "Advanced" msgstr "Gelişmiş" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3704,8 +3704,8 @@ msgid "Supports" msgstr "Destekler" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3715,8 +3715,8 @@ msgstr "Destekler" msgid "Pad" msgstr "Altlık" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -3819,7 +3819,7 @@ msgstr "STL Olarak Dışa Aktar" msgid "Reload the selected volumes from disk" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "" @@ -3845,19 +3845,19 @@ msgstr "" msgid "Scale the selected object to fit the print volume" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "" @@ -4118,7 +4118,7 @@ msgstr "" msgid "Loading" msgstr "Yükleniyor" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "" @@ -4544,7 +4544,7 @@ msgstr "Parametre kaldır" msgid "Delete Option %s" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "" @@ -4663,18 +4663,18 @@ msgstr "" msgid "Legend/Estimated printing time" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "" @@ -4834,11 +4834,11 @@ msgid "" "presets were used as fallback." msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "Dikkat!" @@ -4879,11 +4879,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "G-code Dışa Aktar" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "G kodunu gönder" @@ -5270,7 +5270,7 @@ msgstr "" msgid "Show/Hide G-code window" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "Ön izleme" @@ -5382,29 +5382,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "" #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "Baskı Ayarları" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "Malzeme Ayarları" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "Filament Ayarları" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "Yazıcı ayarları" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "" @@ -5914,7 +5914,7 @@ msgid "Open New Instance" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "" @@ -6023,9 +6023,9 @@ msgstr "G-kod" msgid "Save zip file as:" msgstr "Zip dosyasını farklı kaydet:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "Dilimleme" @@ -6287,7 +6287,7 @@ msgstr "" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "" @@ -6313,8 +6313,8 @@ msgstr "Örnekleri" msgid "Instance %d" msgstr "Kopya %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "Katmanlar" @@ -6578,12 +6578,12 @@ msgstr "" msgid "Around object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "Yazıcıya gönder" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "Şimdi dilimle" @@ -6692,7 +6692,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "" @@ -6700,7 +6700,7 @@ msgstr "" msgid "Expand sidebar" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6710,12 +6710,12 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -6726,11 +6726,11 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -6743,15 +6743,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -6764,28 +6764,28 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "Çok parçalı nesne algılandı" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 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:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "Gelişmiş veriler tespit edildi" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " @@ -6794,14 +6794,14 @@ msgstr "" "%s öğesinden nesne ekleyemezsiniz çünkü bir yada bir kaçı çoklu parçadan " "oluşuyor" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 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:2767 +#: src/slic3r/GUI/Plater.cpp:2779 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." @@ -6809,139 +6809,139 @@ msgstr "" "Nesneniz çok büyük görünüyor, bu nedenle baskı tablanıza uyacak şekilde " "otomatik olarak küçültüldü." -#: src/slic3r/GUI/Plater.cpp:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "Nesne çok mu büyük?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "Dışa aktarılacak STL dosya:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "AMF dosyasını dışa aktar:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "Farklı kaydet:" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "Geçersiz veri" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "Şu anda başka bir dışa aktarma işlemi çalışıyor." -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "3B düzenleme görünümü" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -6949,171 +6949,171 @@ msgid "" "printer technology." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" "Note, if changes will be saved then new project wouldn't keep them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "G kodu dosyasını farklı kaydet:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "Dışa Aktar" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." msgstr "" -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "Genel" @@ -7244,7 +7244,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7258,7 +7258,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7269,7 +7269,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -7780,11 +7780,11 @@ msgstr "G-Kodunu yazıcı ana bilgisayarına gönderin" msgid "Upload to Printer Host with the following filename:" msgstr "Aşağıdaki dosya adıyla Yazıcı Ana Bilgisayarına yükleyin:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "Gerekirse, eğik çizgi (/) işlevini dizin ayırıcı olarak kullanın." -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "" @@ -7793,18 +7793,18 @@ msgstr "" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "İD" @@ -8244,7 +8244,7 @@ msgstr "" msgid "symbolic profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "Katmanlar ve duvarlar" @@ -8328,11 +8328,11 @@ msgstr "Üzerine bindirme" msgid "Flow" msgstr "Akış" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "Diğer" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "Çıktı seçenekleri" @@ -8344,11 +8344,11 @@ msgstr "Sıralı baskı" msgid "Extruder clearance" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "Çıktı dosyası" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "İşlem sonrası komut dosyaları" @@ -8356,19 +8356,20 @@ msgstr "İşlem sonrası komut dosyaları" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "Notlar" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "Bağımlılıklar" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "Profil bağımlılıkları" @@ -8444,7 +8445,7 @@ msgid "Ramming settings" msgstr "Sıkıştırma ayarları" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "Özel G-code" @@ -8482,8 +8483,8 @@ msgstr "" msgid "Size and coordinates" msgstr "Boyut ve koordinatlar" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "Kabiliyetler" @@ -8548,11 +8549,11 @@ msgstr "Eğim" msgid "Tilt time" msgstr "Yatırma zamanı" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "Düzeltmeler" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "Poz" @@ -8713,69 +8714,73 @@ msgstr "%1% ayarını seçili ön ayar yapmak istediğinizden emin misiniz?" msgid "%1% Preset" msgstr "%1% Ön Ayar" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "Ayarla" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "Bul" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "Tam kelime" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " "apply a different set of machine limits." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "KAPALI KİLİT" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 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:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "AÇIK KİLİT" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -8783,23 +8788,23 @@ msgid "" "to the system (or default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "BEYAZ NOKTA" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 msgid "" "for the left button: indicates a non-system (or non-default) preset,\n" "for the right button: indicates that the settings hasn't been modified." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "GERİ OK" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -8811,13 +8816,13 @@ msgstr "" "Geçerli seçenek grubunun tüm ayarlarını en son kaydedilen ön ayara " "sıfırlamak için GERİ OK tuşuna basın." -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 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:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -8825,11 +8830,11 @@ msgid "" "default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." @@ -8837,7 +8842,7 @@ msgstr "" "BEYAZ NOKTA simgesi ayarların geçerli seçenek grubu için en son kaydedilen " "ön ayardakiyle aynı olduğunu gösterir." -#: src/slic3r/GUI/Tab.cpp:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -8849,20 +8854,20 @@ msgstr "" "Geçerli seçenek grubunun tüm ayarlarını en son kaydedilen ön ayara " "sıfırlamak için tıklayın." -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 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:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." @@ -8870,7 +8875,7 @@ msgstr "" "BEYAZ NOKTA simgesi, değerin son kaydedilen ön ayardakiyle aynı olduğunu " "gösterir." -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -8880,105 +8885,105 @@ msgstr "" "olmadığını gösterir.\n" "Geçerli değeri son kaydedilen ön ayara sıfırlamak için tıklayın." -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "Malzeme" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "Destek kafa" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "Destek ayağı" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "Destek çubuklarının ve birleşimlerinin bağlantısı" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "Otomatik oluşturma" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" "To enable \"%1%\", please switch off \"%2%\"" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "Nesne yüksekliği" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "Kaydedilmemiş Değişiklikler" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "Kaydet" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -8986,121 +8991,122 @@ msgid "" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to be asked about unsaved changes again." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 -#, boost-format -msgid "Save the selected options to preset \"%1%\"." -msgstr "" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format +msgid "Save the selected options to preset \"%1%\"." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 +#, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "" @@ -9897,31 +9903,31 @@ msgstr "doğrulama başarısız" msgid "write calledback failed" msgstr "geri arama yazma başarısız oldu" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "Tüm nesneler baskı hacminin dışında." -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "Verilen ayarlar boş yazdırmaya neden olur." -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "Bazı nesneler çok yakın; Ekstrüderiniz onlarla çarpışacaktır." -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "Bazı nesneler çok uzun ve ekstrüder çarpışmaları olmadan basılamaz." -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " "\"complete_objects\"." msgstr "" -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." @@ -9929,19 +9935,19 @@ msgstr "" "Spiral Vazo seçeneği, yalnızca tek malzeme nesnelerini yazdırırken " "kullanılabilir." -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." msgstr "" -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." @@ -9949,22 +9955,22 @@ msgstr "" "Temizleme Kulesi şu anda yalnızca göreceli ekstrüder adreslemesi ile " "desteklenmektedir (use_relative_e_distances = 1)." -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." msgstr "" -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" @@ -9972,7 +9978,7 @@ msgstr "" "Temizleme Kulesi, yalnızca eşit katman yüksekliğine sahipse birden çok nesne " "için desteklenir" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" @@ -9980,7 +9986,7 @@ msgstr "" "Temizleme Kulesi, yalnızca eşit sayıda sal katmanın üzerine basıldıysa, " "yalnızca birden çok nesne için desteklenir" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -9988,7 +9994,7 @@ msgstr "" "Temizleme Kulesi, yalnızca aynı support_material_contact_distance ile " "yazdırılıyorsa, birden çok nesne için desteklenir" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." @@ -9996,30 +10002,30 @@ msgstr "" "Temizleme Kulesi, yalnızca eşit şekilde dilimlenmeleri durumunda birden çok " "nesne için desteklenir." -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" msgstr "" -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "" "Bir veya daha fazla nesneye, yazıcının sahip olmadığı bir ekstrüder " "verilmiştir." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -10031,7 +10037,7 @@ msgstr "" "support_material_interface_ekstrüder == 0), tüm nozullar aynı çapta " "olmalıdır." -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." @@ -10039,7 +10045,7 @@ msgstr "" "Temizleme Kulesi'nin çözülebilir desteklerle çalışması için, destek " "katmanlarının nesne katmanları ile senkronize edilmesi gerekir." -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -10051,27 +10057,46 @@ msgstr "" "(Hem support_material_ekstrüder hem de support_material_interface_ekstrüder " "0 olarak ayarlanmalıdır)." -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "İlk katman yüksekliği nozül çapından büyük olamaz" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "Katman yüksekliği nozül çapından büyük olamaz" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "Dolgu katmanları" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "G-code dışa aktarılıyor" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "G kodu oluşturma" diff --git a/resources/localization/uk/PrusaSlicer_uk.po b/resources/localization/uk/PrusaSlicer_uk.po index af0d1ad58..41a8403ac 100644 --- a/resources/localization/uk/PrusaSlicer_uk.po +++ b/resources/localization/uk/PrusaSlicer_uk.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: 2021-02-03 17:15+0100\n" "Last-Translator: Oleksandra Iushchenko \n" "Language-Team: \n" @@ -591,7 +591,7 @@ msgstr "Активний" msgid "PrusaSlicer version" msgstr "Версія PrusaSlicer" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "друк" @@ -599,17 +599,17 @@ msgstr "друк" msgid "filaments" msgstr "філаменти" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "SLA-друк" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "SLA-матеріал" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "принтер" @@ -668,7 +668,7 @@ msgstr "Стандартний" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "Всі" @@ -755,7 +755,7 @@ msgstr "" msgid "All installed printers are compatible with the selected %1%." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "філамент" @@ -846,7 +846,7 @@ msgstr "" "конфігурації." #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "Перезавантажити з диска" @@ -1152,7 +1152,7 @@ msgstr "Завершити" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "Скасувати" @@ -1216,7 +1216,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "" @@ -1693,8 +1693,8 @@ msgid "parameter name" msgstr "назва параметра" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "Н/Д" @@ -1901,7 +1901,7 @@ msgstr "" msgid "Add selected shape(s) to the bed" msgstr "" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "Додати" @@ -2103,7 +2103,7 @@ msgid "Wipe" msgstr "Витирання" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "Параметри" @@ -2374,7 +2374,7 @@ msgid "Add..." msgstr "Додати..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "Видалити все" @@ -3277,7 +3277,7 @@ msgstr "Критична помилка" msgid "Internal error: %1%" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " @@ -3287,7 +3287,7 @@ msgstr "" "пошкоджений. Спробуйте вручну видалити файл, щоб оговтатися від помилки. Це " "не вплине на профілі користувачів." -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." @@ -3295,12 +3295,12 @@ msgstr "" "Помилка під час розбору файлу конфігурації PrusaGCodeViewer, можливо, він " "пошкоджений. Спробуйте вручну видалити файл, щоб оговтатися від помилки." -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3312,7 +3312,7 @@ msgid "" "configuration." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3321,19 +3321,19 @@ msgid "" "Shall this configuration be imported?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3343,7 +3343,7 @@ msgid "" "Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" @@ -3352,46 +3352,46 @@ msgstr "" "%s\n" "Бажаєте продовжити?" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "Пам'ятати мій вибір" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "Завантаження конфігурації" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "Див. Сторінку випусків." -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "Підготовка вкладок параметрів" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3404,24 +3404,24 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" "У вас є наступні пресети із збереженими параметрами для \"Завантаження хоста " "друку(\"Print Host upload\")\"" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" @@ -3431,7 +3431,7 @@ msgstr "" "параметрах принтера.\n" "Ці параметри будуть доступні у налаштуваннях фізичних принтерів." -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" @@ -3441,169 +3441,169 @@ msgstr "" "їх створення.\n" "Примітка: Цю назву можна змінити пізніше в налаштуваннях фізичних принтерів" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "Інформація" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "Пере-створення" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "Завантаження поточних пресетів" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "Завантаження режиму перегляду" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "Виберіть один файл (3MF/AMF):" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "Виберіть один чи кілька файлів (STL/OBJ/AMF/PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "Виберіть один файл (GCODE/.GCO/.G/.ngc/NGC):" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "Зміна мови застосування" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "Оберіть мову" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "Мова" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "модифікований" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "Запустити %s" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "Знімки конфігурації" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "Перегляньте / активізуйте знімки конфігурації" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "Зробіть знімок конфігурації" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "Зробіть знімок конфігурації" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "Перевірити наявність оновлень конфігурації" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "&Преференції" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "Преференції застосування" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "Простий" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "Простий режим перегляду" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "Розширений" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "Розширений режим перегляду" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "Експерт" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "Режим перегляду Експерт" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "Режим" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "Режим перегляду %s" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "Мова" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "Прошити принтер" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "Завантажте імідж прошивки на Arduino-принтер" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "Назва знімку" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "Не вдалося активувати знімок конфігурації." -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "Вибір мови" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3611,98 +3611,98 @@ msgstr "" "Переключення мови спричинить перезапуск програми.\n" "Ви втратите вміст платеру." -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "Ви хочете продовжити?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "&Конфігурація" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "Завантаження все ще триває" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "Зупинити їх і продовжувати в будь-якому випадку?" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "Триває завантаження" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "" "За технологією SLA неможливо надрукувати об'єкти, що складаються з декількох " "частин." -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "" "Будь ласка, перевірте свій список об'єктів перед тим, як змінити пресет." -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "Виберіть файл G-коду:" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "Заборонити відкриття гіперпосилань у браузері" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to changes your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "PrusaSlicer: Не питай мене більше" @@ -3808,7 +3808,7 @@ msgstr "Плінтус та край" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3818,7 +3818,7 @@ msgid "Advanced" msgstr "Розширений" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3832,8 +3832,8 @@ msgid "Supports" msgstr "Підтримки" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3843,8 +3843,8 @@ msgstr "Підтримки" msgid "Pad" msgstr "Подушка" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -3947,7 +3947,7 @@ msgstr "Експортувати як STL" msgid "Reload the selected volumes from disk" msgstr "Перезавантажити вибрані часті з диска" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "" @@ -3973,19 +3973,19 @@ msgstr "Масштабувати під область друку" msgid "Scale the selected object to fit the print volume" msgstr "Масштабуйте вибраний об'єкт відповідно до об'єму столу" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "Конвертувати з імперських одиниць" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "Повернути конвертацію з імперських одиниць" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "" @@ -4256,7 +4256,7 @@ msgstr "" msgid "Loading" msgstr "Завантаження" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "Завантаження файлу" @@ -4697,7 +4697,7 @@ msgstr "Видалити параметр" msgid "Delete Option %s" msgstr "Видалити параметр %s" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "Змінити параметр %s" @@ -4816,18 +4816,18 @@ msgstr "Маркер інструменту" msgid "Legend/Estimated printing time" msgstr "Легенда / Приблизний час друку" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "Більше" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "" @@ -4988,13 +4988,13 @@ msgid "" "presets were used as fallback." msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" "Ви не можете завантажувати SLA-проект, що містить об'єкт, який складається з " "кількох частин" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "Увага!" @@ -5035,11 +5035,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "Завантажити конфігурацію з INI/AMF/3MF/GCODE та об’єднати" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "Експорт G-коду" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "Надіслання G-коду" @@ -5433,7 +5433,7 @@ msgstr "Показати / Сховати легенду та приблизни msgid "Show/Hide G-code window" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "Попередній перегляд" @@ -5551,29 +5551,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "" #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "Параметри друку" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "Параметри матеріалу" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "Параметри філаменту" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "Параметри принтеру" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "" @@ -6086,7 +6086,7 @@ msgid "Open New Instance" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "" @@ -6195,9 +6195,9 @@ msgstr "G-код" msgid "Save zip file as:" msgstr "Зберегти zip-файл як:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "Нарізання" @@ -6466,7 +6466,7 @@ msgstr "ПОМИЛКА:" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "ЗАСТЕРЕЖЕННЯ:" @@ -6492,8 +6492,8 @@ msgstr "Екземпляри" msgid "Instance %d" msgstr "Екземпляр %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "Шари" @@ -6763,12 +6763,12 @@ msgstr "Під об’єктем" msgid "Around object" msgstr "Навколо об'єкта" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "Надіслати на принтер" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "Нарізати зараз" @@ -6879,7 +6879,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "Не вдалося від'єднати пристрій %s (%s)." -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "Новий проект" @@ -6887,7 +6887,7 @@ msgstr "Новий проект" msgid "Expand sidebar" msgstr "Розгорнути бічну панель" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6898,12 +6898,12 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -6915,11 +6915,11 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -6933,15 +6933,15 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -6955,18 +6955,18 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "Виявлено об'єкт, що складається з кількох частин" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 msgid "" "This file cannot be loaded in a simple mode. Do you want to switch to an " "advanced mode?" @@ -6974,11 +6974,11 @@ msgstr "" "Цей файл не можна завантажити у простому режимі. Ви хочете перейти в " "розширений режим?" -#: src/slic3r/GUI/Plater.cpp:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "Виявлено розширені дані" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " @@ -6987,7 +6987,7 @@ msgstr "" "Ви не можете додати об’єкт(и) із %s через те, що один або деякі з них " "складається з декількох частин" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" @@ -6997,7 +6997,7 @@ msgstr "" "Замість того, щоб розглядати їх як кілька об'єктів, чи потрібно розглянути\n" "ці файл як єдиний об'єкт, що має декілька частин?" -#: src/slic3r/GUI/Plater.cpp:2767 +#: src/slic3r/GUI/Plater.cpp:2779 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." @@ -7005,139 +7005,139 @@ msgstr "" "Ваш об'єкт видався занадто великим, тому він автоматично зменшився " "відповідно до вашої полотна друку." -#: src/slic3r/GUI/Plater.cpp:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "Об'єкт занадто великий?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "Експорт STL-файлу:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "Експортувати AMF-файл:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "Зберегти файл як:" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "Експорт OBJ-файлу:" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "Видалити об'єкт" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "Скинути проект" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "Розділити на об'єкти" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "Некоректні дані" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "На даний час виконується інший експорт." -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "Будь ласка, виберіть файл для перезавантаження" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "Вибраний файл" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "Перезавантажити з:" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "Не вдається перезавантажити:" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "Помилка під час перезавантаження" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "Перезавантажити все з диска" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "Існують активні попередження щодо нарізаних моделей:" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "згенеровані попередження" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "Перегляд у 3D-редакторі" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -7145,171 +7145,171 @@ msgid "" "printer technology." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" "Note, if changes will be saved then new project wouldn't keep them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "Завантажити проект" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "Імпорт об'єкту" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "Імпорт об'єктів" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "не містить дійсного G-коду." -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "Помилка під час завантаження GCODE-файлу" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "%s - Перетягнути файл проекту" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "Відкрити як проект" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "Імпорт тільки геометрії" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "Імпорт тільки конфігурації" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "Виберіть дію, яку потрібно застосувати до файлу" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "Дія" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "Не показувати знову" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "Одночасно можна відкрити лише один файл .gcode." -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "Перетягування файлу G-коду" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "Завантажити файл" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "Завантажити файли" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "Усі об’єкти буде видалено, продовжити?" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "Видалити вибрані об'єкти" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "Збільшити кількість копій" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "Зменшити кількість копій" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "Введіть кількість копій об'єкта:" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "Кількість копій обраного об'єкта" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "Встановити кількість копій на %d" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "Вирізати площиною" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "Зберегти G-код файл як:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "Експорт" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." msgstr "" -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "Вставити з буферу обміну" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "Загальне" @@ -7452,7 +7452,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7466,7 +7466,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7477,7 +7477,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -8013,11 +8013,11 @@ msgstr "Надіслання G-коду на хост друку" msgid "Upload to Printer Host with the following filename:" msgstr "Завантажити на хост принтера з таким ім’ям файлу:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "За потреби використовуйте скісні риски (/) як роздільник каталогів." -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "Group" @@ -8026,18 +8026,18 @@ msgstr "Group" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "ID" @@ -8482,7 +8482,7 @@ msgstr "повне ім'я профілю" msgid "symbolic profile name" msgstr "символічне ім'я профілю" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "Шари та периметри" @@ -8566,11 +8566,11 @@ msgstr "Перекриття" msgid "Flow" msgstr "Потік" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "Інше" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "Параметри виводу" @@ -8582,11 +8582,11 @@ msgstr "Послідовне друкування" msgid "Extruder clearance" msgstr "Область зіткнення екструдера" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "Вихідний файл" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "Скрипти пост-обробки" @@ -8594,19 +8594,20 @@ msgstr "Скрипти пост-обробки" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "Примітки" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "Залежності" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "Залежності профілю" @@ -8682,7 +8683,7 @@ msgid "Ramming settings" msgstr "Налаштування раммінгу" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "Користувацький G-код" @@ -8729,8 +8730,8 @@ msgstr "" msgid "Size and coordinates" msgstr "Розмір і координати" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "Можливості" @@ -8799,11 +8800,11 @@ msgstr "Нахил" msgid "Tilt time" msgstr "Час нахилу" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "Поправки" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "Експозиція" @@ -8971,42 +8972,46 @@ msgstr "Ви впевнені, що хочете %1% вибраний пресе msgid "%1% Preset" msgstr "%1% пресет" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "Встановити" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "Знайти" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "Тільки цілі слова" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" "Механічних обмеження публікуватимуться в G-код і використовуватимуться для " "розрахунку часу друку." -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " @@ -9016,7 +9021,7 @@ msgstr "" "використовуватися для оцінки часу друку, що, отже, може бути неточним, " "оскільки принтер може застосовувати інший набір механічних обмежень." -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." @@ -9024,12 +9029,12 @@ msgstr "" "Механічних обмеження не встановлені, тому оцінка часу друку може бути " "неточною." -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "ЗАКРИТИЙ ЗАМОК" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 msgid "" "indicates that the settings are the same as the system (or default) values " "for the current option group" @@ -9037,12 +9042,12 @@ msgstr "" "вказує на те, що параметри збігаються із системними (або за замовчуванням) " "значеннями для поточної групи опцій" -#: src/slic3r/GUI/Tab.cpp:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "ВІДКРИТИЙ ЗАМОК" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -9054,12 +9059,12 @@ msgstr "" "Клацніть, щоб скинути всі налаштування для поточної групи опцій до системних " "значень (або за замовчуванням)." -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "БІЛА КУЛЯ" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 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." @@ -9067,12 +9072,12 @@ msgstr "" "для лівої кнопки: вказує на несистемний (або не за замовчуванням) пресет,\n" "для правої кнопки: вказує на те, що параметри не були змінені." -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "СТРІЛКА НАЗАД" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -9084,7 +9089,7 @@ msgstr "" "Клацніть, щоб скинути всі параметри для поточної групи параметрів до " "останнього збереженого пресету." -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" @@ -9092,7 +9097,7 @@ msgstr "" "Значок \"ЗАКРИТИЙ ЗАМОК\" вказує на те, що параметри збігаються із " "системними (або за замовчуванням) значеннями для поточної групи опцій" -#: src/slic3r/GUI/Tab.cpp:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -9105,12 +9110,12 @@ msgstr "" "Клацніть, щоб скинути всі налаштування для поточної групи опцій до системних " "значень (або за замовчуванням)." -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" "Значок \"БІЛА КУЛЯ\" вказує на несистемний (або не за замовчуванням) пресет." -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." @@ -9118,7 +9123,7 @@ msgstr "" "Значок \"БІЛА КУЛЯ\" вказує на те, що параметри збігаються тими, які є в " "останньому збереженому пресеті для поточної групи опцій." -#: src/slic3r/GUI/Tab.cpp:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -9130,7 +9135,7 @@ msgstr "" "Клацніть, щоб скинути всі параметри для поточної групи параметрів до " "останнього збереженого пресету." -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." @@ -9138,7 +9143,7 @@ msgstr "" "Значок \"ЗАКРИТИЙ ЗАМОК\" вказує на те, що значення збігається із системним " "(або за замовчуванням)." -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" @@ -9148,7 +9153,7 @@ msgstr "" "дорівнює системному (або за замовчуванням) значенню.\n" "Клацніть, щоб скинути поточне значення до системного (або за замовчуванням)." -#: src/slic3r/GUI/Tab.cpp:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." @@ -9156,7 +9161,7 @@ msgstr "" "Значок \"БІЛА КУЛЯ\" вказує на те, що значення збігається з значенням " "збереженого пресету." -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -9166,31 +9171,31 @@ msgstr "" "дорівнює останньому збереженому пресету.\n" "Клацніть, щоб скинути поточне значення до останнього збереженого пресету." -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "Матеріал" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "Головка підтримки" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "Стовп підтримки" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "З'єднання опорних стовпів і стиків" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "Автоматичне згенерування" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" @@ -9199,74 +9204,74 @@ msgstr "" "\"%1%\" вимкнено, оскільки в категорії \"%3%\" увімкнено \"%2%\".\n" "Щоб увімкнути \"%1%\", вимкніть \"%2%\"" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "Підняття об’єкта" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "Подушка навколо об’єкта" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "Невизначений" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "Незбережені зміни" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "Перемикання пресетів: незбережені зміни" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "Старе значення" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "Нове значення" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "Перенести" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "Відхилити" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "Зберегти" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -9274,11 +9279,11 @@ msgid "" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "PrusaSlicer запам'ятає ваші дії." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" @@ -9287,56 +9292,57 @@ msgstr "" "Відвідайте \"Преференції\" та встановіть прапорець \"%1%\"\n" "щоб знову запитати про незбережені зміни." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" "Деякі поля занадто довгі, щоб вміститися у чарунку. Клацніть правою кнопкою " "миші, щоб відкрити повний текст." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "Усі зміни параметрів буде відхилено." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "Зберегти вибрані параметри." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "Перенести вибрані параметри до нещодавно вибраного пресету." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format msgid "Save the selected options to preset \"%1%\"." msgstr "Зберегти вибрані параметри до пресету \"%1%\"." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 #, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "Перенести вибрані параметри до нещодавно вибраного пресету \"%1%\"." -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "Пресет \"%1%\" має такі незбережені зміни:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " @@ -9345,7 +9351,7 @@ msgstr "" "Пресет \"%1%\" несумісний з новим профілем принтера, і він має такі " "незбережені зміни:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " @@ -9354,50 +9360,50 @@ msgstr "" "Пресет \"%1%\" несумісний з новим профілем друку, і він має такі незбережені " "зміни:" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "Кількість екструдерів" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "" @@ -10218,27 +10224,27 @@ msgstr "не вдалося перевірити" msgid "write calledback failed" msgstr "помилка запису зворотного виклику" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "Усі об'єкти знаходяться поза просторем друку." -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "Надані параметри спричинять порожній друк." -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "" "Деякі предмети розташовано занадто близько; ваш екструдер зіткнеться з ними." -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "" "Деякі предмети занадто високі, і їх неможливо надрукувати без зіткнення " "екструдера." -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " @@ -10248,7 +10254,7 @@ msgstr "" "видаліть усі, крім останнього об'єкта, або ввімкніть послідовний режим за " "допомогою \"повних об'єктів\" (\"complete_objects\")." -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." @@ -10256,7 +10262,7 @@ msgstr "" "Варіант спіральної вази можна використовувати лише під час друку одно-" "матеріальних об’єктів." -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." @@ -10264,7 +10270,7 @@ msgstr "" "Вежа витирання підтримується лише в тому випадку, якщо всі екструдери мають " "однаковий діаметр сопла і використовують філаменти одинакового діаметру." -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." @@ -10272,7 +10278,7 @@ msgstr "" "Наразі вежа витирання підтримується лише для G-кодів, сумісних з Marlin, " "RepRap/Sprinter, RepRapFirmware та Repetier ." -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." @@ -10280,18 +10286,18 @@ msgstr "" "Наразі вежа витирання підтримує лише відносну адресацію екструдерів " "(use_relative_e_distances = 1)." -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" "Наразі запобігання просочування не підтримується з увімкненою вежею " "витирання." -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "Наразі вежа витирання не підтримує об'ємне E (use_volumetric_e = 0)." -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." @@ -10299,7 +10305,7 @@ msgstr "" "Наразі вежа витирання не підтримується для багато-матеріального послідовного " "друку." -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" @@ -10307,7 +10313,7 @@ msgstr "" "Вежа витирання для кількох об’єктів підтримується лише у випадку, коли вони " "мають однакову висоту шару" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" @@ -10315,7 +10321,7 @@ msgstr "" "Вежа витирання для кількох об’єктів підтримується лише у випадку, коли вони " "надруковані на рівній кількості шарів плоту" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -10323,7 +10329,7 @@ msgstr "" "Вежа витирання для кількох об’єктів підтримується лише у випадку, коли вони " "надруковані з однаковою відстанню support_material_contact_distance" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." @@ -10331,7 +10337,7 @@ msgstr "" "Вежа витирання для кількох об’єктів підтримується лише у випадку, коли вони " "нарізані однаково." -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" @@ -10339,24 +10345,24 @@ msgstr "" "Вежа витирання підтримується лише в тому випадку, якщо всі об’єкти мають " "однакову висоту змінного шару" -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "" "Одному або декільком об’єктам було призначено екструдер, якого принтер не " "має." -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "%1%=%2% мм є занадто низьким для друку на висоті шару %3% мм" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "%1% = %2% мм є надмірно для друку з діаметром сопла %3% мм" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -10368,7 +10374,7 @@ msgstr "" "0 або support_material_interface_extruder == 0), усі сопла повинні мати " "однаковий діаметр." -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." @@ -10376,7 +10382,7 @@ msgstr "" "Для того, щоб вежа витирання працювала з розчинними підтримками, шари " "підтримки повинні бути синхронізовані з шарами об'єкта." -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -10388,27 +10394,46 @@ msgstr "" "значення support_material_extruder і support_material_interface_extruder " "повинні бути встановлені на 0)." -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "Висота першого шару не може перевищувати діаметр сопла" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "Висота шару не може перевищувати діаметр сопла" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "Шари наповнення" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "Експортування G-коду" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "Генерування G-коду" diff --git a/resources/localization/zh_CN/PrusaSlicer_zh_CN.po b/resources/localization/zh_CN/PrusaSlicer_zh_CN.po index bd796eca9..d702c6479 100644 --- a/resources/localization/zh_CN/PrusaSlicer_zh_CN.po +++ b/resources/localization/zh_CN/PrusaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: 2019-09-06 16:24+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -552,7 +552,7 @@ msgstr "激活" msgid "PrusaSlicer version" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "打印" @@ -560,17 +560,17 @@ msgstr "打印" msgid "filaments" msgstr "耗材" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "SLA 打印" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "SLA 材料" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "打印机" @@ -629,7 +629,7 @@ msgstr "标准" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "所有" @@ -715,7 +715,7 @@ msgstr "" msgid "All installed printers are compatible with the selected %1%." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "丝" @@ -799,7 +799,7 @@ msgid "" msgstr "此外,在应用更新之前,将创建整个配置的备份快照。" #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "" @@ -1085,7 +1085,7 @@ msgstr "&结束" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "取消" @@ -1149,7 +1149,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "" @@ -1592,8 +1592,8 @@ msgid "parameter name" msgstr "参数名称" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "N/A" @@ -1794,7 +1794,7 @@ msgstr "" msgid "Add selected shape(s) to the bed" msgstr "" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "加入" @@ -1996,7 +1996,7 @@ msgid "Wipe" msgstr "" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "选项" @@ -2263,7 +2263,7 @@ msgid "Add..." msgstr "添加..." #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "全部删除" @@ -3143,25 +3143,25 @@ msgstr "" msgid "Internal error: %1%" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " "not be affected." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3173,7 +3173,7 @@ msgid "" "configuration." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3182,19 +3182,19 @@ msgid "" "Shall this configuration be imported?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3204,53 +3204,53 @@ msgid "" "Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" "Do you want to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3263,198 +3263,198 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" "Settings will be available in physical printers settings." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" "Note: This name can be changed later from the physical printers settings" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "重造" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "加载当前预设" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "加载模式视图" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "选择一个文件 (3MF/AMF):" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "选择一个或多个文件 (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "更改应用程序语言" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "选择语言" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "语言" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "修改" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "运行 %s" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "&配置快照" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "检查/激活配置快照" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "保存配置 &快照" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "捕获配置快照" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "&首选项" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "应用程序首选项" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "简单" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "简单界面模式" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "高级界面模式" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "专家" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "专家界面模式" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "模式" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "%s 视图模式" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "将固件镜像上传到基于 arduino 的打印机" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "快照名称" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "语言选择" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." @@ -3462,93 +3462,93 @@ msgstr "" "切换语言将触发应用程序重新启动。\n" "您将丢失未保存的内容。" -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "是否继续?" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "&配置" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "无法使用 SLA 技术打印多部分对象。" -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "请在预设更改之前检查对象列表。" -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to changes your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "" @@ -3654,7 +3654,7 @@ msgstr "裙边" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3664,7 +3664,7 @@ msgid "Advanced" msgstr "高级" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3678,8 +3678,8 @@ msgid "Supports" msgstr "支持" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3689,8 +3689,8 @@ msgstr "支持" msgid "Pad" msgstr "垫" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -3793,7 +3793,7 @@ msgstr "导出为 STL" msgid "Reload the selected volumes from disk" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "" @@ -3819,19 +3819,19 @@ msgstr "缩放打印体积" msgid "Scale the selected object to fit the print volume" msgstr "缩放所选对象以适合可打印体积" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "" @@ -4085,7 +4085,7 @@ msgstr "" msgid "Loading" msgstr "载入中" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "" @@ -4507,7 +4507,7 @@ msgstr "删除参数" msgid "Delete Option %s" msgstr "删除选项 %s" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "更改选项 %s" @@ -4626,18 +4626,18 @@ msgstr "" msgid "Legend/Estimated printing time" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "" @@ -4797,11 +4797,11 @@ msgid "" "presets were used as fallback." msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "注意!" @@ -4842,11 +4842,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "导出 G-code" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "发送 G 代码" @@ -5227,7 +5227,7 @@ msgstr "" msgid "Show/Hide G-code window" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "预览" @@ -5339,29 +5339,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "" #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "打印设置" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "材料设置" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "耗材丝设置" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "打印机设置" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "" @@ -5871,7 +5871,7 @@ msgid "Open New Instance" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "" @@ -5980,9 +5980,9 @@ msgstr "G-code" msgid "Save zip file as:" msgstr "将 zip 文件另存为:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "切片" @@ -6238,7 +6238,7 @@ msgstr "" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "" @@ -6264,8 +6264,8 @@ msgstr "实例" msgid "Instance %d" msgstr "实例 %d" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "图层" @@ -6523,12 +6523,12 @@ msgstr "对象底部" msgid "Around object" msgstr "对象周围" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "发送到打印机" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "立即切片" @@ -6633,7 +6633,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "新项目" @@ -6641,7 +6641,7 @@ msgstr "新项目" msgid "Expand sidebar" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6650,12 +6650,12 @@ msgid_plural "" "PrusaSlicer" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -6665,11 +6665,11 @@ msgid_plural "" "These objects have been removed from the model" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -6681,15 +6681,15 @@ msgid_plural "" "the dimensions of these objects?" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -6701,180 +6701,180 @@ msgid_plural "" "the dimensions of these objects?" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "检测到多部分对象" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 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:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "检测到高级数据" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " "is(are) multi-part" msgstr "不能从 %s 中添加对象, 因为其中一个或一些有多个部分" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 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:2767 +#: src/slic3r/GUI/Plater.cpp:2779 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:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "对象太大?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "导出 STL 文件:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "导出 AMF 文件:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "将文件另存为:" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "导出 OBJ 文件:" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "删除对象" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "重置项目" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "拆分为对象" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "无效数据" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "当前正在运行另一个导出作业。" -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "3D 编辑器视图" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -6882,171 +6882,171 @@ msgid "" "printer technology." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" "Note, if changes will be saved then new project wouldn't keep them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "加载项目" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "导入对象" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "导入对象" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "加载文件" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "加载文件" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "删除选定对象" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "增加实例" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "减少实例" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "将副本数设置为 %d" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "按平面切割" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "将 G-code 文件另存为:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "导出" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." msgstr "" -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "从剪贴板粘贴" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "常规" @@ -7172,7 +7172,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7186,7 +7186,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7197,7 +7197,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -7704,11 +7704,11 @@ msgstr "向打印机主机发送 G-Code" msgid "Upload to Printer Host with the following filename:" msgstr "使用以下文件名上传到打印机主机:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "如果需要,请使用正向斜杠 ( / ) 作为目录分隔符。" -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "" @@ -7717,18 +7717,18 @@ msgstr "" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "ID" @@ -8166,7 +8166,7 @@ msgstr "" msgid "symbolic profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "层和轮廓" @@ -8250,11 +8250,11 @@ msgstr "交叠" msgid "Flow" msgstr "流量" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "其他" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "输出选项" @@ -8266,11 +8266,11 @@ msgstr "顺序打印" msgid "Extruder clearance" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "输出文件" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "后处理脚本" @@ -8278,19 +8278,20 @@ msgstr "后处理脚本" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "备注" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "依赖" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "配置文件依赖" @@ -8364,7 +8365,7 @@ msgid "Ramming settings" msgstr "冲击设置" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "自定义 G-code" @@ -8402,8 +8403,8 @@ msgstr "" msgid "Size and coordinates" msgstr "大小和坐标" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "权限" @@ -8471,11 +8472,11 @@ msgstr "倾斜" msgid "Tilt time" msgstr "倾斜时间" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "修正" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "曝光" @@ -8630,69 +8631,73 @@ msgstr "是否确实要将所选预设 %1%?" msgid "%1% Preset" msgstr "%1% 预设" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "设置" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "查找" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "整字" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " "apply a different set of machine limits." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "锁定锁" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 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:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "解锁锁" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -8702,12 +8707,12 @@ msgstr "" "指示某些设置已更改,并且不等于当前选项组的系统(或默认值)值。\n" "单击\"锁定锁定\"图标可将当前选项组的所有设置重置为系统(或默认值)值。" -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "白色子弹" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 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." @@ -8715,12 +8720,12 @@ msgstr "" "对于左侧按钮:指示非系统(或非默认)预设,\n" "对于右侧按钮:指示设置尚未修改。" -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "后箭头" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -8730,13 +8735,13 @@ msgstr "" "指示设置已更改,不等于当前选项组的最后一个保存预设。\n" "单击\"后退箭头\"图标可将当前选项组的所有设置重置为上次保存的预设。" -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 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:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -8746,17 +8751,17 @@ msgstr "" "锁定的锁 图标指示某些设置已更改,并且不等于当前选项组的系统(或默认值)值。\n" "单击此处可将当前选项组的所有设置重置为系统(或默认值)值。" -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "白色 BULLET 图标表示非系统(或非默认)预设。" -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 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:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -8766,13 +8771,13 @@ msgstr "" "后退箭头图标表示设置已更改,不等于当前选项组的最后保存预设。\n" "单击此处可将当前选项组的所有设置重置为上次保存的预设。" -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "锁定锁定图标表示该值与系统(或默认值)值相同。" -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" @@ -8781,13 +8786,13 @@ msgstr "" "锁定的锁 图标指示该值已更改,不等于系统(或默认值)值。\n" "单击以将当前值重置为系统(或默认值)值。" -#: src/slic3r/GUI/Tab.cpp:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." msgstr "白色子弹图标表示该值与上次保存的预设中的值相同。" -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -8796,105 +8801,105 @@ msgstr "" "后退箭头图标指示该值已更改,不等于上次保存的预设。\n" "单击以将当前值重置为上次保存的预设。" -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "材料" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "支撑头" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "支撑支柱" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "支撑杆和接头的连接" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "自动生成" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" "To enable \"%1%\", please switch off \"%2%\"" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "对象高程" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "对象周围填充" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "未保存的修改" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "保存" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -8902,120 +8907,121 @@ msgid "" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to be asked about unsaved changes again." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 -#, boost-format -msgid "Save the selected options to preset \"%1%\"." -msgstr "" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format +msgid "Save the selected options to preset \"%1%\"." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 +#, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "" @@ -9799,83 +9805,83 @@ msgstr "验证失败" msgid "write calledback failed" msgstr "写入回叫失败" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "所有对象都在打印范围之外。" -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "当前提供的设置将导致空打印。" -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "有些对象太近; 你的挤出机会和他们相撞。" -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "某些对象太高, 无法在挤出机不冲突的情况下打印。" -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " "\"complete_objects\"." msgstr "" -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." msgstr "螺旋花瓶选项只能在打印单个材质对象时使用。" -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." msgstr "" "仅当所有挤出机具有相同的喷嘴直径并使用相同直径的耗材丝时,才支持擦料塔。" -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "擦料塔目前仅支持相对挤出机寻址 (use_relative_e_distances=1)。" -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "启用擦料塔时,当前不支持 Ooze 预防。" -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." msgstr "" -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" msgstr "仅当多个对象具有相等的图层高度时,才支持擦料塔" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" msgstr "只有在相同数量的基座层上打印的对象时, 才支持擦料塔" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -9883,34 +9889,34 @@ msgstr "" "只有在使用相同的support_material_contact_distance(支撑材料距离)打印多个对象" "时, 才支持擦料塔" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." msgstr "只有在多个对象被平均切割的情况下, 才支持擦料塔。" -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" msgstr "" -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "为一个或多个对象分配了打印机没有的挤出机。" -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "%1%=%2% mm 太低,在图层高度 %3% mm 时无法打印" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "过量 %1%=%2% mm 可打印,使用喷嘴直径 %3% mm" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -9921,13 +9927,13 @@ msgstr "" "(support_material_extruder == 0 或 support_material_interface_extruder == 0)" "打印支撑物, 则所有喷嘴的直径必须相同。" -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." msgstr "要使擦料塔与可溶性支撑配合使用, 支撑层需要与对象图层同步。" -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -9938,27 +9944,46 @@ msgstr "" "溶支撑于的支架。(support_material_extruder 和" "support_material_interface_extruder 都需要设置为 0)。" -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "第一层高度不能大于喷嘴直径" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "层高度不能大于喷嘴直径" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "填充图层" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "导出 G 代码" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "生成 G 代码" diff --git a/resources/localization/zh_TW/PrusaSlicer_zh_TW.po b/resources/localization/zh_TW/PrusaSlicer_zh_TW.po index 93e02f3fe..662aae16f 100644 --- a/resources/localization/zh_TW/PrusaSlicer_zh_TW.po +++ b/resources/localization/zh_TW/PrusaSlicer_zh_TW.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-25 17:28+0100\n" +"POT-Creation-Date: 2022-02-09 09:04+0100\n" "PO-Revision-Date: 2019-05-22 10:35+0800\n" "Last-Translator: Jiang Yue , patched traditional " "chinese by Cheng-Hsien Ho \n" @@ -550,7 +550,7 @@ msgstr "" msgid "PrusaSlicer version" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1339 msgid "print" msgstr "列印" @@ -558,17 +558,17 @@ msgstr "列印" msgid "filaments" msgstr "耗材" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1340 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:68 src/libslic3r/Preset.cpp:1341 msgid "SLA print" msgstr "SLA 列印" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:69 #: src/slic3r/GUI/ConfigWizard.cpp:755 src/slic3r/GUI/GUI.cpp:340 -#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1341 +#: src/slic3r/GUI/Plater.cpp:820 src/libslic3r/Preset.cpp:1342 msgid "SLA material" msgstr "SLA 材料" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1342 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:71 src/libslic3r/Preset.cpp:1343 msgid "printer" msgstr "印表機" @@ -627,7 +627,7 @@ msgstr "標準" #: src/slic3r/GUI/ConfigWizard.cpp:331 src/slic3r/GUI/ConfigWizard.cpp:651 #: src/slic3r/GUI/Preferences.cpp:434 src/slic3r/GUI/Tab.cpp:3816 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1153 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1154 msgid "All" msgstr "所有" @@ -712,7 +712,7 @@ msgstr "" msgid "All installed printers are compatible with the selected %1%." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1339 +#: src/slic3r/GUI/ConfigWizard.cpp:755 src/libslic3r/Preset.cpp:1340 msgid "filament" msgstr "耗材" @@ -791,7 +791,7 @@ msgid "" msgstr "此外, 在應用更新之前, 將創建整個配置的備份快照。" #: src/slic3r/GUI/ConfigWizard.cpp:1243 src/slic3r/GUI/GUI_Factories.cpp:726 -#: src/slic3r/GUI/Plater.cpp:3548 +#: src/slic3r/GUI/Plater.cpp:3560 msgid "Reload from disk" msgstr "" @@ -1077,7 +1077,7 @@ msgstr "&結束" #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:58 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 #: src/slic3r/GUI/SendSystemInfoDialog.cpp:93 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:878 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:879 msgid "Cancel" msgstr "取消" @@ -1141,7 +1141,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/DesktopIntegrationDialog.cpp:459 -#: src/slic3r/GUI/GUI_App.cpp:2223 +#: src/slic3r/GUI/GUI_App.cpp:2243 msgid "Desktop Integration" msgstr "" @@ -1584,8 +1584,8 @@ msgid "parameter name" msgstr "參數名稱" #: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/OptionsGroup.cpp:827 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1078 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1067 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1079 msgid "N/A" msgstr "" @@ -1783,7 +1783,7 @@ msgstr "" msgid "Add selected shape(s) to the bed" msgstr "" -#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4100 +#: src/slic3r/GUI/GalleryDialog.cpp:117 src/slic3r/GUI/Tab.cpp:4135 msgid "Add" msgstr "加入" @@ -1985,7 +1985,7 @@ msgid "Wipe" msgstr "" #: src/slic3r/GUI/GCodeViewer.cpp:3667 src/slic3r/GUI/GUI_Preview.cpp:257 -#: src/slic3r/GUI/GUI_Preview.cpp:272 src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/GUI_Preview.cpp:272 msgid "Options" msgstr "選項" @@ -2252,7 +2252,7 @@ msgid "Add..." msgstr "" #: src/slic3r/GUI/GLCanvas3D.cpp:4489 src/slic3r/GUI/KBShortcutsDialog.cpp:96 -#: src/slic3r/GUI/Plater.cpp:5463 src/slic3r/GUI/Tab.cpp:4106 +#: src/slic3r/GUI/Plater.cpp:5476 src/slic3r/GUI/Tab.cpp:4141 msgid "Delete all" msgstr "" @@ -3128,25 +3128,25 @@ msgstr "" msgid "Internal error: %1%" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:901 src/slic3r/GUI/GUI_App.cpp:999 +#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 msgid "" "Error parsing PrusaSlicer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error. Your user profiles will " "not be affected." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:907 src/slic3r/GUI/GUI_App.cpp:1005 +#: src/slic3r/GUI/GUI_App.cpp:913 src/slic3r/GUI/GUI_App.cpp:1011 msgid "" "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " "manually delete the file to recover from the error." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:960 #, boost-format msgid "You are opening %1% version %2%." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:957 +#: src/slic3r/GUI/GUI_App.cpp:963 #, boost-format msgid "" "The active configuration was created by %1% %2%,\n" @@ -3158,7 +3158,7 @@ msgid "" "configuration." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:965 +#: src/slic3r/GUI/GUI_App.cpp:971 #, boost-format msgid "" "An existing configuration was found in %3%\n" @@ -3167,19 +3167,19 @@ msgid "" "Shall this configuration be imported?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:973 +#: src/slic3r/GUI/GUI_App.cpp:979 msgid "Import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:974 +#: src/slic3r/GUI/GUI_App.cpp:980 msgid "Don't import" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:982 +#: src/slic3r/GUI/GUI_App.cpp:988 msgid "Continue and import newer configuration?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1043 +#: src/slic3r/GUI/GUI_App.cpp:1051 msgid "" "You are running a 32 bit build of PrusaSlicer on 64-bit Windows.\n" "32 bit build of PrusaSlicer will likely not be able to utilize all the RAM " @@ -3189,53 +3189,53 @@ msgid "" "Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1126 +#: src/slic3r/GUI/GUI_App.cpp:1134 #, c-format, boost-format msgid "" "%s\n" "Do you want to continue?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1128 src/slic3r/GUI/GUI_App.cpp:3070 -#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:888 +#: src/slic3r/GUI/GUI_App.cpp:1136 src/slic3r/GUI/GUI_App.cpp:3094 +#: src/slic3r/GUI/Plater.cpp:1728 src/slic3r/GUI/UnsavedChangesDialog.cpp:889 msgid "Remember my choice" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1170 +#: src/slic3r/GUI/GUI_App.cpp:1178 msgid "Loading configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1203 +#: src/slic3r/GUI/GUI_App.cpp:1209 #, boost-format msgid "New release version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1204 +#: src/slic3r/GUI/GUI_App.cpp:1210 msgid "See Download page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1218 +#: src/slic3r/GUI/GUI_App.cpp:1224 #, boost-format msgid "New prerelease version %1% is available." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1219 +#: src/slic3r/GUI/GUI_App.cpp:1225 msgid "See Releases page." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1256 +#: src/slic3r/GUI/GUI_App.cpp:1262 msgid "Preparing settings tabs" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1327 src/slic3r/GUI/Preferences.cpp:287 +#: src/slic3r/GUI/GUI_App.cpp:1334 src/slic3r/GUI/Preferences.cpp:287 msgid "Restore window position on start" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1329 +#: src/slic3r/GUI/GUI_App.cpp:1336 msgid "PrusaSlicer started after a crash" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1330 +#: src/slic3r/GUI/GUI_App.cpp:1337 #, boost-format msgid "" "PrusaSlicer crashed last time when attempting to set window position.\n" @@ -3248,290 +3248,290 @@ msgid "" "Otherwise, the application will most likely crash again next time." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1342 +#: src/slic3r/GUI/GUI_App.cpp:1349 #, boost-format msgid "Disable \"%1%\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1343 +#: src/slic3r/GUI/GUI_App.cpp:1350 #, boost-format msgid "Leave \"%1%\" enabled" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1657 +#: src/slic3r/GUI/GUI_App.cpp:1677 msgid "" "You have the following presets with saved options for \"Print Host upload\"" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1661 +#: src/slic3r/GUI/GUI_App.cpp:1681 msgid "" "But since this version of PrusaSlicer we don't show this information in " "Printer Settings anymore.\n" "Settings will be available in physical printers settings." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1663 +#: src/slic3r/GUI/GUI_App.cpp:1683 msgid "" "By default new Printer devices will be named as \"Printer N\" during its " "creation.\n" "Note: This name can be changed later from the physical printers settings" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1667 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 +#: src/slic3r/GUI/GUI_App.cpp:1687 src/slic3r/GUI/PhysicalPrinterDialog.cpp:722 msgid "Information" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1680 src/slic3r/GUI/GUI_App.cpp:1691 +#: src/slic3r/GUI/GUI_App.cpp:1700 src/slic3r/GUI/GUI_App.cpp:1711 msgid "Recreating" msgstr "再造" -#: src/slic3r/GUI/GUI_App.cpp:1694 +#: src/slic3r/GUI/GUI_App.cpp:1714 msgid "Loading of current presets" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1699 +#: src/slic3r/GUI/GUI_App.cpp:1719 msgid "Loading of a mode view" msgstr "載入模式視圖" -#: src/slic3r/GUI/GUI_App.cpp:1837 +#: src/slic3r/GUI/GUI_App.cpp:1857 msgid "Choose one file (3MF/AMF):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1849 +#: src/slic3r/GUI/GUI_App.cpp:1869 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "選擇一個或多個文件 (STL/OBJ/AMF/3MF/PRUSA):" -#: src/slic3r/GUI/GUI_App.cpp:1861 +#: src/slic3r/GUI/GUI_App.cpp:1881 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1872 +#: src/slic3r/GUI/GUI_App.cpp:1892 msgid "Changing of an application language" msgstr "更改應用程序語言" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Select the language" msgstr "選擇語言" -#: src/slic3r/GUI/GUI_App.cpp:2011 +#: src/slic3r/GUI/GUI_App.cpp:2031 msgid "Language" msgstr "語言" -#: src/slic3r/GUI/GUI_App.cpp:2160 +#: src/slic3r/GUI/GUI_App.cpp:2180 msgid "modified" msgstr "修改" -#: src/slic3r/GUI/GUI_App.cpp:2214 +#: src/slic3r/GUI/GUI_App.cpp:2234 #, c-format, boost-format msgid "Run %s" msgstr "運行 %s" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "&Configuration Snapshots" msgstr "&配置快照" -#: src/slic3r/GUI/GUI_App.cpp:2218 +#: src/slic3r/GUI/GUI_App.cpp:2238 msgid "Inspect / activate configuration snapshots" msgstr "檢查/啟用配置快照" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Take Configuration &Snapshot" msgstr "獲取配置和快照" -#: src/slic3r/GUI/GUI_App.cpp:2219 +#: src/slic3r/GUI/GUI_App.cpp:2239 msgid "Capture a configuration snapshot" msgstr "擷取配置快照" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for Configuration Updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2220 +#: src/slic3r/GUI/GUI_App.cpp:2240 msgid "Check for configuration updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2227 +#: src/slic3r/GUI/GUI_App.cpp:2247 msgid "&Preferences" msgstr "&首選項" -#: src/slic3r/GUI/GUI_App.cpp:2233 +#: src/slic3r/GUI/GUI_App.cpp:2253 msgid "Application preferences" msgstr "應用程序首選項" -#: src/slic3r/GUI/GUI_App.cpp:2238 src/slic3r/GUI/wxExtensions.cpp:708 +#: src/slic3r/GUI/GUI_App.cpp:2258 src/slic3r/GUI/wxExtensions.cpp:708 msgid "Simple" msgstr "簡單" -#: src/slic3r/GUI/GUI_App.cpp:2238 +#: src/slic3r/GUI/GUI_App.cpp:2258 msgid "Simple View Mode" msgstr "簡單介面模式" -#: src/slic3r/GUI/GUI_App.cpp:2240 src/slic3r/GUI/wxExtensions.cpp:710 +#: src/slic3r/GUI/GUI_App.cpp:2260 src/slic3r/GUI/wxExtensions.cpp:710 msgctxt "Mode" msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2240 +#: src/slic3r/GUI/GUI_App.cpp:2260 msgid "Advanced View Mode" msgstr "高級介面模式" -#: src/slic3r/GUI/GUI_App.cpp:2241 src/slic3r/GUI/wxExtensions.cpp:711 +#: src/slic3r/GUI/GUI_App.cpp:2261 src/slic3r/GUI/wxExtensions.cpp:711 msgid "Expert" msgstr "專家" -#: src/slic3r/GUI/GUI_App.cpp:2241 +#: src/slic3r/GUI/GUI_App.cpp:2261 msgid "Expert View Mode" msgstr "專家介面模式" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 msgid "Mode" msgstr "模式" -#: src/slic3r/GUI/GUI_App.cpp:2246 +#: src/slic3r/GUI/GUI_App.cpp:2266 #, c-format, boost-format msgid "%s View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2249 +#: src/slic3r/GUI/GUI_App.cpp:2269 msgid "&Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Flash Printer &Firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2252 +#: src/slic3r/GUI/GUI_App.cpp:2272 msgid "Upload a firmware image into an Arduino based printer" msgstr "將韌體鏡像檔上傳到基於 arduino 的印表機" -#: src/slic3r/GUI/GUI_App.cpp:2272 +#: src/slic3r/GUI/GUI_App.cpp:2292 msgid "Taking a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2273 +#: src/slic3r/GUI/GUI_App.cpp:2293 msgid "" "Some presets are modified and the unsaved changes will not be captured by " "the configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2274 +#: src/slic3r/GUI/GUI_App.cpp:2294 msgid "Snapshot name" msgstr "快照名稱" -#: src/slic3r/GUI/GUI_App.cpp:2290 +#: src/slic3r/GUI/GUI_App.cpp:2310 msgid "Loading a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2299 +#: src/slic3r/GUI/GUI_App.cpp:2319 #, boost-format msgid "Continue to activate a configuration snapshot %1%?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2313 +#: src/slic3r/GUI/GUI_App.cpp:2333 msgid "Failed to activate configuration snapshot." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2332 +#: src/slic3r/GUI/GUI_App.cpp:2352 msgid "Restart application" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2366 +#: src/slic3r/GUI/GUI_App.cpp:2386 msgid "Language selection" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2369 +#: src/slic3r/GUI/GUI_App.cpp:2389 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2371 src/slic3r/GUI/Preferences.cpp:582 +#: src/slic3r/GUI/GUI_App.cpp:2391 src/slic3r/GUI/Preferences.cpp:582 msgid "Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2398 +#: src/slic3r/GUI/GUI_App.cpp:2418 msgid "&Configuration" msgstr "&配置" -#: src/slic3r/GUI/GUI_App.cpp:2515 src/slic3r/GUI/GUI_App.cpp:2576 +#: src/slic3r/GUI/GUI_App.cpp:2535 src/slic3r/GUI/GUI_App.cpp:2596 msgid "The preset modifications are successfully saved" msgid_plural "The presets modifications are successfully saved" msgstr[0] "" -#: src/slic3r/GUI/GUI_App.cpp:2579 +#: src/slic3r/GUI/GUI_App.cpp:2599 msgid "For new project all modifications will be reseted" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2617 +#: src/slic3r/GUI/GUI_App.cpp:2637 msgid "Loading a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Project is loading" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2620 +#: src/slic3r/GUI/GUI_App.cpp:2640 msgid "Opening new project while some presets are unsaved." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "The uploads are still ongoing" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2639 +#: src/slic3r/GUI/GUI_App.cpp:2659 msgid "Stop them and continue anyway?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2643 +#: src/slic3r/GUI/GUI_App.cpp:2663 msgid "Ongoing uploads" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2849 +#: src/slic3r/GUI/GUI_App.cpp:2869 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "無法使用 SLA 技術列印多部分對象。" -#: src/slic3r/GUI/GUI_App.cpp:2850 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 -#: src/slic3r/GUI/Plater.cpp:2427 +#: src/slic3r/GUI/GUI_App.cpp:2870 src/slic3r/GUI/Jobs/SLAImportJob.cpp:224 +#: src/slic3r/GUI/Plater.cpp:2439 msgid "Please check your object list before preset changing." msgstr "在預設更改之前, 請檢查對象列表。" -#: src/slic3r/GUI/GUI_App.cpp:2874 +#: src/slic3r/GUI/GUI_App.cpp:2894 msgid "Configuration is editing from ConfigWizard" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:2899 +#: src/slic3r/GUI/GUI_App.cpp:2919 msgid "Select a gcode file:" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "Open hyperlink in default browser?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3069 src/slic3r/GUI/GUI_App.cpp:3092 +#: src/slic3r/GUI/GUI_App.cpp:3093 src/slic3r/GUI/GUI_App.cpp:3116 msgid "PrusaSlicer: Open hyperlink" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3074 src/slic3r/GUI/Preferences.cpp:382 +#: src/slic3r/GUI/GUI_App.cpp:3098 src/slic3r/GUI/Preferences.cpp:382 msgid "Suppress to open hyperlink in browser" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3076 src/slic3r/GUI/Plater.cpp:1734 +#: src/slic3r/GUI/GUI_App.cpp:3100 src/slic3r/GUI/Plater.cpp:1734 msgid "PrusaSlicer will remember your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3077 +#: src/slic3r/GUI/GUI_App.cpp:3101 msgid "You will not be asked about it again on hyperlinks hovering." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3078 src/slic3r/GUI/Plater.cpp:1738 +#: src/slic3r/GUI/GUI_App.cpp:3102 src/slic3r/GUI/Plater.cpp:1738 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to changes your choice." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:3080 src/slic3r/GUI/Plater.cpp:1740 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:905 +#: src/slic3r/GUI/GUI_App.cpp:3104 src/slic3r/GUI/Plater.cpp:1740 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:906 msgid "PrusaSlicer: Don't ask me again" msgstr "" @@ -3637,7 +3637,7 @@ msgstr "環邊和裙邊" #: src/slic3r/GUI/GUI_Factories.cpp:138 src/slic3r/GUI/Tab.cpp:1495 #: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1645 #: src/slic3r/GUI/Tab.cpp:1649 src/slic3r/GUI/Tab.cpp:2023 -#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4673 +#: src/slic3r/GUI/Tab.cpp:2393 src/slic3r/GUI/Tab.cpp:4712 #: src/libslic3r/PrintConfig.cpp:247 src/libslic3r/PrintConfig.cpp:472 #: src/libslic3r/PrintConfig.cpp:1396 src/libslic3r/PrintConfig.cpp:1483 #: src/libslic3r/PrintConfig.cpp:1530 src/libslic3r/PrintConfig.cpp:2480 @@ -3647,7 +3647,7 @@ msgid "Advanced" msgstr "進階" #: src/slic3r/GUI/GUI_Factories.cpp:140 src/slic3r/GUI/Plater.cpp:428 -#: src/slic3r/GUI/Tab.cpp:4607 src/slic3r/GUI/Tab.cpp:4608 +#: src/slic3r/GUI/Tab.cpp:4646 src/slic3r/GUI/Tab.cpp:4647 #: src/libslic3r/PrintConfig.cpp:3418 src/libslic3r/PrintConfig.cpp:3425 #: src/libslic3r/PrintConfig.cpp:3434 src/libslic3r/PrintConfig.cpp:3443 #: src/libslic3r/PrintConfig.cpp:3453 src/libslic3r/PrintConfig.cpp:3463 @@ -3661,8 +3661,8 @@ msgid "Supports" msgstr "支撐" #: src/slic3r/GUI/GUI_Factories.cpp:141 src/slic3r/GUI/Plater.cpp:574 -#: src/slic3r/GUI/Tab.cpp:4648 src/slic3r/GUI/Tab.cpp:4649 -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:4687 src/slic3r/GUI/Tab.cpp:4688 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3606 #: src/libslic3r/PrintConfig.cpp:3613 src/libslic3r/PrintConfig.cpp:3627 #: src/libslic3r/PrintConfig.cpp:3638 src/libslic3r/PrintConfig.cpp:3648 #: src/libslic3r/PrintConfig.cpp:3670 src/libslic3r/PrintConfig.cpp:3681 @@ -3672,8 +3672,8 @@ msgstr "支撐" msgid "Pad" msgstr "墊" -#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4666 -#: src/slic3r/GUI/Tab.cpp:4667 src/libslic3r/SLA/Hollowing.cpp:72 +#: src/slic3r/GUI/GUI_Factories.cpp:142 src/slic3r/GUI/Tab.cpp:4705 +#: src/slic3r/GUI/Tab.cpp:4706 src/libslic3r/SLA/Hollowing.cpp:72 #: src/libslic3r/SLA/Hollowing.cpp:84 src/libslic3r/SLA/Hollowing.cpp:91 #: src/libslic3r/SLA/Hollowing.cpp:100 src/libslic3r/PrintConfig.cpp:3734 #: src/libslic3r/PrintConfig.cpp:3741 src/libslic3r/PrintConfig.cpp:3751 @@ -3776,7 +3776,7 @@ msgstr "導出爲 STL" msgid "Reload the selected volumes from disk" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3534 +#: src/slic3r/GUI/GUI_Factories.cpp:733 src/slic3r/GUI/Plater.cpp:3546 msgid "Replace with STL" msgstr "" @@ -3802,19 +3802,19 @@ msgstr "" msgid "Scale the selected object to fit the print volume" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5605 +#: src/slic3r/GUI/GUI_Factories.cpp:835 src/slic3r/GUI/Plater.cpp:5618 msgid "Convert from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/GUI_Factories.cpp:836 src/slic3r/GUI/Plater.cpp:5619 msgid "Revert conversion from imperial units" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:837 src/slic3r/GUI/Plater.cpp:5620 msgid "Convert from meters" msgstr "" -#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5607 +#: src/slic3r/GUI/GUI_Factories.cpp:838 src/slic3r/GUI/Plater.cpp:5620 msgid "Revert conversion from meters" msgstr "" @@ -4068,7 +4068,7 @@ msgstr "" msgid "Loading" msgstr "載入中" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2399 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1540 src/slic3r/GUI/Plater.cpp:2400 msgid "Loading file" msgstr "" @@ -4485,7 +4485,7 @@ msgstr "" msgid "Delete Option %s" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:154 #, c-format, boost-format msgid "Change Option %s" msgstr "" @@ -4604,18 +4604,18 @@ msgstr "" msgid "Legend/Estimated printing time" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:767 -#: src/slic3r/GUI/HintNotification.cpp:793 +#: src/slic3r/GUI/HintNotification.cpp:771 +#: src/slic3r/GUI/HintNotification.cpp:797 #: src/slic3r/GUI/NotificationManager.cpp:374 #: src/slic3r/GUI/NotificationManager.cpp:391 msgid "More" msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:908 +#: src/slic3r/GUI/HintNotification.cpp:912 msgid "Open Preferences." msgstr "" -#: src/slic3r/GUI/HintNotification.cpp:1000 +#: src/slic3r/GUI/HintNotification.cpp:1004 msgid "Open Documentation in web browser." msgstr "" @@ -4775,11 +4775,11 @@ msgid "" "presets were used as fallback." msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2426 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:223 src/slic3r/GUI/Plater.cpp:2438 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" -#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2428 +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:225 src/slic3r/GUI/Plater.cpp:2440 msgid "Attention!" msgstr "注意!" @@ -4820,11 +4820,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "" #: src/slic3r/GUI/KBShortcutsDialog.cpp:87 src/slic3r/GUI/Plater.cpp:912 -#: src/slic3r/GUI/Plater.cpp:6492 src/libslic3r/PrintConfig.cpp:4271 +#: src/slic3r/GUI/Plater.cpp:6505 src/libslic3r/PrintConfig.cpp:4271 msgid "Export G-code" msgstr "導出 G-code" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:88 src/slic3r/GUI/Plater.cpp:6506 msgid "Send G-code" msgstr "發送 G 代碼" @@ -5205,7 +5205,7 @@ msgstr "" msgid "Show/Hide G-code window" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4446 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 src/slic3r/GUI/Plater.cpp:4458 #: src/slic3r/GUI/Tab.cpp:2822 msgid "Preview" msgstr "預覽" @@ -5317,29 +5317,29 @@ msgid "Closing PrusaSlicer while some presets are modified." msgstr "" #: src/slic3r/GUI/MainFrame.cpp:285 src/slic3r/GUI/MainFrame.cpp:335 -#: src/slic3r/GUI/Tab.hpp:414 src/slic3r/GUI/Tab.hpp:537 +#: src/slic3r/GUI/Tab.hpp:427 src/slic3r/GUI/Tab.hpp:550 msgid "Print Settings" msgstr "列印設置" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:339 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:522 +#: src/slic3r/GUI/Tab.hpp:535 msgid "Material Settings" msgstr "材料設置" #: src/slic3r/GUI/MainFrame.cpp:286 src/slic3r/GUI/MainFrame.cpp:337 #: src/slic3r/GUI/MainFrame.cpp:2096 src/slic3r/GUI/MainFrame.cpp:2097 -#: src/slic3r/GUI/Tab.hpp:448 +#: src/slic3r/GUI/Tab.hpp:461 msgid "Filament Settings" msgstr "耗材絲設置" #: src/slic3r/GUI/MainFrame.cpp:287 src/slic3r/GUI/MainFrame.cpp:341 -#: src/slic3r/GUI/Tab.hpp:490 +#: src/slic3r/GUI/Tab.hpp:503 msgid "Printer Settings" msgstr "印表機設置" #: src/slic3r/GUI/MainFrame.cpp:632 src/slic3r/GUI/Plater.cpp:1721 -#: src/slic3r/GUI/Plater.cpp:2818 +#: src/slic3r/GUI/Plater.cpp:2830 msgid "Untitled" msgstr "" @@ -5849,7 +5849,7 @@ msgid "Open New Instance" msgstr "" #: src/slic3r/GUI/MainFrame.cpp:1417 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1562 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1564 msgid "Compare Presets" msgstr "" @@ -5958,9 +5958,9 @@ msgstr "G-code" msgid "Save zip file as:" msgstr "將 zip 文件另存爲:" -#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6011 src/slic3r/GUI/Tab.cpp:1666 -#: src/slic3r/GUI/Tab.cpp:4674 +#: src/slic3r/GUI/MainFrame.cpp:1682 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6024 src/slic3r/GUI/Tab.cpp:1666 +#: src/slic3r/GUI/Tab.cpp:4713 msgid "Slicing" msgstr "切片" @@ -6216,7 +6216,7 @@ msgstr "" #: src/slic3r/GUI/NotificationManager.cpp:1459 #: src/slic3r/GUI/NotificationManager.cpp:1486 #: src/slic3r/GUI/NotificationManager.cpp:1494 -#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3163 +#: src/slic3r/GUI/NotificationManager.cpp:1505 src/slic3r/GUI/Plater.cpp:3175 msgid "WARNING:" msgstr "" @@ -6242,8 +6242,8 @@ msgstr "" msgid "Instance %d" msgstr "" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4512 -#: src/slic3r/GUI/Tab.cpp:4603 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:105 src/slic3r/GUI/Tab.cpp:4551 +#: src/slic3r/GUI/Tab.cpp:4642 msgid "Layers" msgstr "圖層" @@ -6499,12 +6499,12 @@ msgstr "" msgid "Around object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6493 +#: src/slic3r/GUI/Plater.cpp:893 src/slic3r/GUI/Plater.cpp:6506 msgid "Send to printer" msgstr "發送到印表機" -#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3295 -#: src/slic3r/GUI/Plater.cpp:6014 +#: src/slic3r/GUI/Plater.cpp:913 src/slic3r/GUI/Plater.cpp:3307 +#: src/slic3r/GUI/Plater.cpp:6027 msgid "Slice now" msgstr "立即切片" @@ -6609,7 +6609,7 @@ msgstr "" msgid "Ejecting of device %s(%s) has failed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5074 +#: src/slic3r/GUI/Plater.cpp:2221 src/slic3r/GUI/Plater.cpp:5086 msgid "New Project" msgstr "" @@ -6617,7 +6617,7 @@ msgstr "" msgid "Expand sidebar" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2486 +#: src/slic3r/GUI/Plater.cpp:2498 msgid "" "The preset below was temporarily installed on the active instance of " "PrusaSlicer" @@ -6626,12 +6626,12 @@ msgid_plural "" "PrusaSlicer" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2516 +#: src/slic3r/GUI/Plater.cpp:2528 #, boost-format msgid "Failed loading file \"%1%\" due to an invalid configuration." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2536 +#: src/slic3r/GUI/Plater.cpp:2548 #, c-format, boost-format msgid "" "Object size from file %s appears to be zero.\n" @@ -6641,11 +6641,11 @@ msgid_plural "" "These objects have been removed from the model" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2540 +#: src/slic3r/GUI/Plater.cpp:2552 msgid "The size of the object is zero" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2553 +#: src/slic3r/GUI/Plater.cpp:2565 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in meters.\n" @@ -6657,15 +6657,15 @@ msgid_plural "" "the dimensions of these objects?" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2557 src/slic3r/GUI/Plater.cpp:2579 +#: src/slic3r/GUI/Plater.cpp:2569 src/slic3r/GUI/Plater.cpp:2591 msgid "The object is too small" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2558 src/slic3r/GUI/Plater.cpp:2580 +#: src/slic3r/GUI/Plater.cpp:2570 src/slic3r/GUI/Plater.cpp:2592 msgid "Apply to all the remaining small objects being loaded." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2575 +#: src/slic3r/GUI/Plater.cpp:2587 #, c-format, boost-format msgid "" "The dimensions of the object from file %s seem to be defined in inches.\n" @@ -6677,180 +6677,180 @@ msgid_plural "" "the dimensions of these objects?" msgstr[0] "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2605 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2596 src/slic3r/GUI/Plater.cpp:2651 +#: src/slic3r/GUI/Plater.cpp:2608 src/slic3r/GUI/Plater.cpp:2663 msgid "Multi-part object detected" msgstr "檢測到多部分對象" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2616 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:2605 +#: src/slic3r/GUI/Plater.cpp:2617 msgid "Detected advanced data" msgstr "檢測到的高級數據" -#: src/slic3r/GUI/Plater.cpp:2625 +#: src/slic3r/GUI/Plater.cpp:2637 #, c-format, boost-format msgid "" "You can't to add the object(s) from %s because of one or some of them " "is(are) multi-part" msgstr "不能從 %s 中添加對象, 因爲其中一個或一些有多個部分" -#: src/slic3r/GUI/Plater.cpp:2648 +#: src/slic3r/GUI/Plater.cpp:2660 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:2767 +#: src/slic3r/GUI/Plater.cpp:2779 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:2768 +#: src/slic3r/GUI/Plater.cpp:2780 msgid "Object too large?" msgstr "對象太大?" -#: src/slic3r/GUI/Plater.cpp:2846 +#: src/slic3r/GUI/Plater.cpp:2858 msgid "Export STL file:" msgstr "導出 STL 文件:" -#: src/slic3r/GUI/Plater.cpp:2853 +#: src/slic3r/GUI/Plater.cpp:2865 msgid "Export AMF file:" msgstr "導出 AMF 文件:" -#: src/slic3r/GUI/Plater.cpp:2859 +#: src/slic3r/GUI/Plater.cpp:2871 msgid "Save file as:" msgstr "將文件另存爲:" -#: src/slic3r/GUI/Plater.cpp:2865 +#: src/slic3r/GUI/Plater.cpp:2877 msgid "Export OBJ file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2963 +#: src/slic3r/GUI/Plater.cpp:2975 msgid "Delete Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2975 +#: src/slic3r/GUI/Plater.cpp:2987 msgid "Delete All Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3003 +#: src/slic3r/GUI/Plater.cpp:3015 msgid "Reset Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3086 +#: src/slic3r/GUI/Plater.cpp:3098 msgid "" "The selected object couldn't be split because it contains only one solid " "part." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3093 +#: src/slic3r/GUI/Plater.cpp:3105 msgid "All non-solid parts (modifiers) were deleted" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3095 +#: src/slic3r/GUI/Plater.cpp:3107 msgid "Split to Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3145 +#: src/slic3r/GUI/Plater.cpp:3157 msgid "" "An object has custom support enforcers which will not be used because " "supports are disabled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3147 +#: src/slic3r/GUI/Plater.cpp:3159 msgid "Enable supports for enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3276 src/slic3r/GUI/Plater.cpp:4142 +#: src/slic3r/GUI/Plater.cpp:3288 src/slic3r/GUI/Plater.cpp:4154 msgid "Invalid data" msgstr "無效數據" -#: src/slic3r/GUI/Plater.cpp:3346 +#: src/slic3r/GUI/Plater.cpp:3358 msgid "Another export job is currently running." msgstr "另一個導出作業當前正在運行。" -#: src/slic3r/GUI/Plater.cpp:3432 +#: src/slic3r/GUI/Plater.cpp:3444 msgid "Replace from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 +#: src/slic3r/GUI/Plater.cpp:3462 msgid "Unable to replace with more than one volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3450 src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3462 src/slic3r/GUI/Plater.cpp:3541 msgid "Error during replace" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3521 +#: src/slic3r/GUI/Plater.cpp:3533 msgid "Select the new file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3529 +#: src/slic3r/GUI/Plater.cpp:3541 msgid "File for the replace wasn't selected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3620 +#: src/slic3r/GUI/Plater.cpp:3632 msgid "Please select the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3651 src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:3663 src/slic3r/GUI/Plater.cpp:5215 msgid "The selected file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "differs from the original file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3652 +#: src/slic3r/GUI/Plater.cpp:3664 msgid "Do you want to replace it" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/Plater.cpp:3675 +#: src/slic3r/GUI/Plater.cpp:3681 src/slic3r/GUI/Plater.cpp:3687 msgid "Reload from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3778 +#: src/slic3r/GUI/Plater.cpp:3790 msgid "Unable to reload:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3783 +#: src/slic3r/GUI/Plater.cpp:3795 msgid "Error during reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3801 +#: src/slic3r/GUI/Plater.cpp:3813 msgid "Reload all from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4096 +#: src/slic3r/GUI/Plater.cpp:4108 msgid "There are active warnings concerning sliced models:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Plater.cpp:4119 msgid "generated warnings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4438 +#: src/slic3r/GUI/Plater.cpp:4450 msgid "3D editor view" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4859 +#: src/slic3r/GUI/Plater.cpp:4871 msgid "Undo / Redo is processing" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4861 +#: src/slic3r/GUI/Plater.cpp:4873 #, boost-format msgid "" "Switching the printer technology from %1% to %2%.\n" @@ -6858,171 +6858,171 @@ msgid "" "printer technology." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5058 +#: src/slic3r/GUI/Plater.cpp:5070 msgid "Creating a new project while the current project is modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5061 +#: src/slic3r/GUI/Plater.cpp:5073 msgid "Creating a new project while some presets are modified." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5074 msgid "You can keep presets modifications to the new project or discard them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5063 +#: src/slic3r/GUI/Plater.cpp:5075 msgid "" "You can keep presets modifications to the new project, discard them or save " "changes as new presets.\n" "Note, if changes will be saved then new project wouldn't keep them" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5069 +#: src/slic3r/GUI/Plater.cpp:5081 msgid "Creating a new project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5100 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Load Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5126 src/slic3r/GUI/Plater.cpp:5386 +#: src/slic3r/GUI/Plater.cpp:5139 src/slic3r/GUI/Plater.cpp:5399 msgid "Import Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5130 +#: src/slic3r/GUI/Plater.cpp:5143 msgid "Import Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5202 +#: src/slic3r/GUI/Plater.cpp:5215 msgid "does not contain valid gcode." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5216 msgid "Error while loading .gcode file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5256 +#: src/slic3r/GUI/Plater.cpp:5269 #, c-format, boost-format msgid "%s - Drop project file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5263 +#: src/slic3r/GUI/Plater.cpp:5276 msgid "Open as project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5264 +#: src/slic3r/GUI/Plater.cpp:5277 msgid "Import geometry only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5265 +#: src/slic3r/GUI/Plater.cpp:5278 msgid "Import config only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5268 +#: src/slic3r/GUI/Plater.cpp:5281 msgid "Select an action to apply to the file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5273 +#: src/slic3r/GUI/Plater.cpp:5286 msgid "Action" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5289 +#: src/slic3r/GUI/Plater.cpp:5302 msgid "Don't show again" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5330 +#: src/slic3r/GUI/Plater.cpp:5343 msgid "You can open only one .gcode file at a time." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5331 +#: src/slic3r/GUI/Plater.cpp:5344 msgid "Drag and drop G-code file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5408 +#: src/slic3r/GUI/Plater.cpp:5421 msgid "Load File" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5413 +#: src/slic3r/GUI/Plater.cpp:5426 msgid "Load Files" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5463 +#: src/slic3r/GUI/Plater.cpp:5476 msgid "All objects will be removed, continue?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5474 +#: src/slic3r/GUI/Plater.cpp:5487 msgid "Delete Selected Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5483 +#: src/slic3r/GUI/Plater.cpp:5496 msgid "Increase Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5517 +#: src/slic3r/GUI/Plater.cpp:5530 msgid "Decrease Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5568 +#: src/slic3r/GUI/Plater.cpp:5581 msgid "Enter the number of copies:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5569 +#: src/slic3r/GUI/Plater.cpp:5582 msgid "Copies of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5573 +#: src/slic3r/GUI/Plater.cpp:5586 #, c-format, boost-format msgid "Set numbers of copies to %d" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5647 +#: src/slic3r/GUI/Plater.cpp:5660 msgid "Cut by Plane" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save G-code file as:" msgstr "將 G-code 文件另存爲:" -#: src/slic3r/GUI/Plater.cpp:5707 +#: src/slic3r/GUI/Plater.cpp:5720 msgid "Save SL1 / SL1S file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5716 +#: src/slic3r/GUI/Plater.cpp:5729 msgid "The provided file name is not valid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5717 +#: src/slic3r/GUI/Plater.cpp:5730 msgid "The following characters are not allowed by a FAT file system:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "" "The plater is empty.\n" "Do you want to save the project?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5904 +#: src/slic3r/GUI/Plater.cpp:5917 msgid "Save project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:6492 +#: src/slic3r/GUI/Plater.cpp:6505 msgid "Export" msgstr "導出" -#: src/slic3r/GUI/Plater.cpp:6526 +#: src/slic3r/GUI/Plater.cpp:6539 msgid "" "Custom supports, seams and multimaterial painting were removed after " "repairing the mesh." msgstr "" -#: src/slic3r/GUI/Plater.cpp:6640 +#: src/slic3r/GUI/Plater.cpp:6653 msgid "Paste From Clipboard" msgstr "" #: src/slic3r/GUI/Preferences.cpp:106 src/slic3r/GUI/Tab.cpp:2282 #: src/slic3r/GUI/Tab.cpp:2508 src/slic3r/GUI/Tab.cpp:2614 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "General" msgstr "常規" @@ -7148,7 +7148,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:233 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 msgid "" "Ask to save unsaved changes in presets when closing the application or when " "loading a new project" @@ -7162,7 +7162,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:242 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:896 msgid "Ask for unsaved changes in presets when selecting new preset" msgstr "" @@ -7173,7 +7173,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/Preferences.cpp:249 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:894 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:895 msgid "Ask for unsaved changes in presets when creating new project" msgstr "" @@ -7678,11 +7678,11 @@ msgstr "向印表機主機發送 G-Code" msgid "Upload to Printer Host with the following filename:" msgstr "使用以下文件名上載到印表機主機:" -#: src/slic3r/GUI/PrintHostDialogs.cpp:50 +#: src/slic3r/GUI/PrintHostDialogs.cpp:51 msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "如果需要, 使用正向斜槓 (/) 作爲目錄分隔符。" -#: src/slic3r/GUI/PrintHostDialogs.cpp:59 +#: src/slic3r/GUI/PrintHostDialogs.cpp:60 msgid "Group" msgstr "" @@ -7691,18 +7691,18 @@ msgstr "" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:92 +#: src/slic3r/GUI/PrintHostDialogs.cpp:91 +msgid "Upload" +msgstr "" + +#: src/slic3r/GUI/PrintHostDialogs.cpp:101 msgid "Upload and Print" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:103 +#: src/slic3r/GUI/PrintHostDialogs.cpp:112 msgid "Upload and Simulate" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:115 -msgid "Upload" -msgstr "" - #: src/slic3r/GUI/PrintHostDialogs.cpp:247 msgid "ID" msgstr "" @@ -8140,7 +8140,7 @@ msgstr "" msgid "symbolic profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4601 +#: src/slic3r/GUI/Tab.cpp:1451 src/slic3r/GUI/Tab.cpp:4640 msgid "Layers and perimeters" msgstr "層和輪廓" @@ -8224,11 +8224,11 @@ msgstr "交疊" msgid "Flow" msgstr "流量" -#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1704 +#: src/slic3r/GUI/Tab.cpp:1674 src/slic3r/GUI/Tab.cpp:1692 msgid "Other" msgstr "其他" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4678 +#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:4717 msgid "Output options" msgstr "輸出選項" @@ -8240,11 +8240,11 @@ msgstr "順序列印" msgid "Extruder clearance" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4679 +#: src/slic3r/GUI/Tab.cpp:1685 src/slic3r/GUI/Tab.cpp:4718 msgid "Output file" msgstr "輸出文件" -#: src/slic3r/GUI/Tab.cpp:1692 src/libslic3r/PrintConfig.cpp:1992 +#: src/slic3r/GUI/Tab.cpp:1704 src/libslic3r/PrintConfig.cpp:1992 msgid "Post-processing scripts" msgstr "後處理腳本" @@ -8252,19 +8252,20 @@ msgstr "後處理腳本" #: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:2103 #: src/slic3r/GUI/Tab.cpp:2489 src/slic3r/GUI/Tab.cpp:2490 #: src/slic3r/GUI/Tab.cpp:2561 src/slic3r/GUI/Tab.cpp:2562 -#: src/slic3r/GUI/Tab.cpp:4529 src/slic3r/GUI/Tab.cpp:4530 +#: src/slic3r/GUI/Tab.cpp:3940 src/slic3r/GUI/Tab.cpp:4568 +#: src/slic3r/GUI/Tab.cpp:4569 msgid "Notes" msgstr "備註" #: src/slic3r/GUI/Tab.cpp:1723 src/slic3r/GUI/Tab.cpp:2110 #: src/slic3r/GUI/Tab.cpp:2496 src/slic3r/GUI/Tab.cpp:2568 -#: src/slic3r/GUI/Tab.cpp:4537 src/slic3r/GUI/Tab.cpp:4684 +#: src/slic3r/GUI/Tab.cpp:4576 src/slic3r/GUI/Tab.cpp:4723 msgid "Dependencies" msgstr "依賴" #: src/slic3r/GUI/Tab.cpp:1724 src/slic3r/GUI/Tab.cpp:2111 #: src/slic3r/GUI/Tab.cpp:2497 src/slic3r/GUI/Tab.cpp:2569 -#: src/slic3r/GUI/Tab.cpp:4538 src/slic3r/GUI/Tab.cpp:4685 +#: src/slic3r/GUI/Tab.cpp:4577 src/slic3r/GUI/Tab.cpp:4724 msgid "Profile dependencies" msgstr "配置文件依賴" @@ -8338,7 +8339,7 @@ msgid "Ramming settings" msgstr "衝壓設置" #: src/slic3r/GUI/Tab.cpp:2081 src/slic3r/GUI/Tab.cpp:2401 -#: src/slic3r/GUI/Tab.cpp:4208 src/libslic3r/GCode.cpp:733 +#: src/slic3r/GUI/Tab.cpp:4247 src/libslic3r/GCode.cpp:733 #: src/libslic3r/PrintConfig.cpp:2450 msgid "Custom G-code" msgstr "自定義 G-code" @@ -8376,8 +8377,8 @@ msgstr "" msgid "Size and coordinates" msgstr "尺寸和座標" -#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1283 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1671 +#: src/slic3r/GUI/Tab.cpp:2292 src/slic3r/GUI/UnsavedChangesDialog.cpp:1285 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1673 msgid "Capabilities" msgstr "權限" @@ -8442,11 +8443,11 @@ msgstr "傾斜" msgid "Tilt time" msgstr "傾斜時間" -#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4519 +#: src/slic3r/GUI/Tab.cpp:2538 src/slic3r/GUI/Tab.cpp:4558 msgid "Corrections" msgstr "修正" -#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4515 +#: src/slic3r/GUI/Tab.cpp:2551 src/slic3r/GUI/Tab.cpp:4554 msgid "Exposure" msgstr "曝光" @@ -8600,69 +8601,73 @@ msgstr "" msgid "%1% Preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4142 +#: src/slic3r/GUI/Tab.cpp:3819 src/slic3r/GUI/Tab.cpp:4181 msgid "Set" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3938 msgid "Find" msgstr "尋找" -#: src/slic3r/GUI/Tab.cpp:3906 +#: src/slic3r/GUI/Tab.cpp:3939 msgid "Replace with" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3992 +#: src/slic3r/GUI/Tab.cpp:4028 msgid "Regular expression" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3996 +#: src/slic3r/GUI/Tab.cpp:4032 msgid "Case insensitive" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4000 +#: src/slic3r/GUI/Tab.cpp:4036 msgid "Whole word" msgstr "整個字" -#: src/slic3r/GUI/Tab.cpp:4004 +#: src/slic3r/GUI/Tab.cpp:4040 msgid "Match single line" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4236 +#: src/slic3r/GUI/Tab.cpp:4143 +msgid "Are you sure you want to delete all substitutions?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4275 msgid "" "Machine limits will be emitted to G-code and used to estimate print time." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4239 +#: src/slic3r/GUI/Tab.cpp:4278 msgid "" "Machine limits will NOT be emitted to G-code, however they will be used to " "estimate print time, which may therefore not be accurate as the printer may " "apply a different set of machine limits." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4243 +#: src/slic3r/GUI/Tab.cpp:4282 msgid "" "Machine limits are not set, therefore the print time estimate may not be " "accurate." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4265 +#: src/slic3r/GUI/Tab.cpp:4304 msgid "LOCKED LOCK" msgstr "" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4267 +#: src/slic3r/GUI/Tab.cpp:4306 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:4269 +#: src/slic3r/GUI/Tab.cpp:4308 msgid "UNLOCKED LOCK" msgstr "" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:4271 +#: src/slic3r/GUI/Tab.cpp:4310 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -8670,23 +8675,23 @@ msgid "" "to the system (or default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4276 +#: src/slic3r/GUI/Tab.cpp:4315 msgid "WHITE BULLET" msgstr "" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:4278 +#: src/slic3r/GUI/Tab.cpp:4317 msgid "" "for the left button: indicates a non-system (or non-default) preset,\n" "for the right button: indicates that the settings hasn't been modified." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4281 +#: src/slic3r/GUI/Tab.cpp:4320 msgid "BACK ARROW" msgstr "" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:4283 +#: src/slic3r/GUI/Tab.cpp:4322 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -8694,13 +8699,13 @@ msgid "" "to the last saved preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4293 +#: src/slic3r/GUI/Tab.cpp:4332 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:4295 +#: src/slic3r/GUI/Tab.cpp:4334 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" @@ -8708,17 +8713,17 @@ msgid "" "default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4298 +#: src/slic3r/GUI/Tab.cpp:4337 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4301 +#: src/slic3r/GUI/Tab.cpp:4340 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:4303 +#: src/slic3r/GUI/Tab.cpp:4342 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" @@ -8728,26 +8733,26 @@ msgstr "" "\"後退箭頭\" 圖標表示設置已更改, 與當前選項組的上次保存的預設不相等。\n" "單擊可將當前選項組的所有設置重置爲上次保存的預設。" -#: src/slic3r/GUI/Tab.cpp:4309 +#: src/slic3r/GUI/Tab.cpp:4348 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "" -#: src/slic3r/GUI/Tab.cpp:4310 +#: src/slic3r/GUI/Tab.cpp:4349 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:4316 +#: src/slic3r/GUI/Tab.cpp:4355 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." msgstr "白色子彈圖標表示該值與上次保存的預設中的值相同。" -#: src/slic3r/GUI/Tab.cpp:4317 +#: src/slic3r/GUI/Tab.cpp:4356 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -8756,105 +8761,105 @@ msgstr "" "\"後退箭頭\" 圖標表示該值已更改, 不等於上次保存的預設。\n" "單擊可將當前值重置爲上次保存的預設。" -#: src/slic3r/GUI/Tab.cpp:4471 src/slic3r/GUI/Tab.cpp:4473 +#: src/slic3r/GUI/Tab.cpp:4510 src/slic3r/GUI/Tab.cpp:4512 msgid "Material" msgstr "材料" -#: src/slic3r/GUI/Tab.cpp:4558 src/slic3r/GUI/Tab.cpp:4559 +#: src/slic3r/GUI/Tab.cpp:4597 src/slic3r/GUI/Tab.cpp:4598 msgid "Material printing profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4611 +#: src/slic3r/GUI/Tab.cpp:4650 msgid "Support head" msgstr "支撐頭部寬度" -#: src/slic3r/GUI/Tab.cpp:4616 +#: src/slic3r/GUI/Tab.cpp:4655 msgid "Support pillar" msgstr "支撐支柱" -#: src/slic3r/GUI/Tab.cpp:4639 +#: src/slic3r/GUI/Tab.cpp:4678 msgid "Connection of the support sticks and junctions" msgstr "支撐杆和連接點的連接" -#: src/slic3r/GUI/Tab.cpp:4644 +#: src/slic3r/GUI/Tab.cpp:4683 msgid "Automatic generation" msgstr "自動生成" -#: src/slic3r/GUI/Tab.cpp:4719 +#: src/slic3r/GUI/Tab.cpp:4758 #, boost-format msgid "" "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" "To enable \"%1%\", please switch off \"%2%\"" msgstr "" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3578 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3578 msgid "Object elevation" msgstr "對象高程" -#: src/slic3r/GUI/Tab.cpp:4721 src/libslic3r/PrintConfig.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4760 src/libslic3r/PrintConfig.cpp:3680 msgid "Pad around object" msgstr "" #: src/slic3r/GUI/UnsavedChangesDialog.cpp:153 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:162 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1046 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1099 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1114 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1129 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1144 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1047 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1100 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1115 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1130 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1145 msgid "Undef" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:771 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:772 msgid "Unsaved Changes" msgstr "未保存的更改" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:789 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:790 msgid "Switching Presets: Unsaved Changes" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:831 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 msgid "Old Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:832 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:833 msgid "New Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:866 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:867 msgid "Keep" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:863 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:864 msgid "Transfer" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Don't save" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:870 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:871 msgid "Discard" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:876 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:877 msgid "Save" msgstr "儲存" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:897 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "create new project" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:898 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 msgid "" "You will not be asked about the unsaved changes in presets the next time you " "switch a preset" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:899 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:900 msgid "" "You will not be asked about the unsaved changes in presets the next time " "you: \n" @@ -8862,120 +8867,121 @@ msgid "" "- Loading a new project while some presets are modified" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:902 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 msgid "PrusaSlicer will remember your action." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:903 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:904 #, boost-format msgid "" "Visit \"Preferences\" and check \"%1%\"\n" "to be asked about unsaved changes again." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:935 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:936 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1695 msgid "" "Some fields are too long to fit. Right mouse click reveals the full text." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will not be saved" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:937 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:938 msgid "All settings changes will be discarded." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:940 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 msgid "Save the selected options." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:941 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 msgid "Keep the selected settings." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:942 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:943 msgid "Transfer the selected settings to the newly selected preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:946 -#, boost-format -msgid "Save the selected options to preset \"%1%\"." -msgstr "" - #: src/slic3r/GUI/UnsavedChangesDialog.cpp:947 #, boost-format +msgid "Save the selected options to preset \"%1%\"." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:948 +#, boost-format msgid "Transfer the selected options to the newly selected preset \"%1%\"." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1222 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1224 msgid "The following preset was modified" msgid_plural "The following presets were modified" msgstr[0] "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1228 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1230 #, boost-format msgid "Preset \"%1%\" has the following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1232 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1234 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1233 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1235 #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new print profile and it has the " "following unsaved changes:" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1279 -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1667 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1281 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1669 msgid "Extruders count" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1452 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1454 msgid "Select presets to compare" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1501 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1503 msgid "Show all presets (including incompatible)" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1516 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1518 msgid "Left Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1517 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1519 msgid "Right Preset Value" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1624 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1626 msgid "One of the presets doesn't found" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1635 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1637 msgid "Compared presets has different printer technology" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1649 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1651 msgid "Presets are the same" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1657 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1659 msgid "" "Presets are different.\n" "Click this button to select the same preset for the right and left preset." msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef category" msgstr "" -#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1681 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1683 msgid "Undef group" msgstr "" @@ -9751,82 +9757,82 @@ msgstr "驗證失敗" msgid "write calledback failed" msgstr "寫回失敗" -#: src/libslic3r/Print.cpp:449 +#: src/libslic3r/Print.cpp:451 msgid "All objects are outside of the print volume." msgstr "所有對象都在列印範圍之外。" -#: src/libslic3r/Print.cpp:452 +#: src/libslic3r/Print.cpp:454 msgid "The supplied settings will cause an empty print." msgstr "當前提供的設置將導致空列印。" -#: src/libslic3r/Print.cpp:456 +#: src/libslic3r/Print.cpp:458 msgid "Some objects are too close; your extruder will collide with them." msgstr "有些物體太過靠近; 你的擠出頭有機會和他們相撞。" -#: src/libslic3r/Print.cpp:458 +#: src/libslic3r/Print.cpp:460 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "有些物體太高, 無法在擠出頭不衝突的情況下列印。" -#: src/libslic3r/Print.cpp:467 +#: src/libslic3r/Print.cpp:469 msgid "" "Only a single object may be printed at a time in Spiral Vase mode. Either " "remove all but the last object, or enable sequential mode by " "\"complete_objects\"." msgstr "" -#: src/libslic3r/Print.cpp:471 +#: src/libslic3r/Print.cpp:473 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." msgstr "\"螺旋花瓶\" 選項只能在列印單個材料對象時使用。" -#: src/libslic3r/Print.cpp:484 +#: src/libslic3r/Print.cpp:486 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." msgstr "" -#: src/libslic3r/Print.cpp:490 +#: src/libslic3r/Print.cpp:492 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" -#: src/libslic3r/Print.cpp:492 +#: src/libslic3r/Print.cpp:494 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "擦料塔目前僅支持相對擠出機尋址 (use_relative_e_distances=1)。" -#: src/libslic3r/Print.cpp:494 +#: src/libslic3r/Print.cpp:496 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" -#: src/libslic3r/Print.cpp:496 +#: src/libslic3r/Print.cpp:498 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" -#: src/libslic3r/Print.cpp:498 +#: src/libslic3r/Print.cpp:500 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." msgstr "" -#: src/libslic3r/Print.cpp:519 +#: src/libslic3r/Print.cpp:521 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" msgstr "" -#: src/libslic3r/Print.cpp:521 +#: src/libslic3r/Print.cpp:523 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" msgstr "只有在相同數量的基座層上列印的對象時, 才支持擦料塔" -#: src/libslic3r/Print.cpp:524 +#: src/libslic3r/Print.cpp:526 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" @@ -9834,34 +9840,34 @@ msgstr "" "只有在使用相同的support_material_contact_distance(支撐材料距離)列印多個對象" "時, 才支持擦料塔" -#: src/libslic3r/Print.cpp:526 +#: src/libslic3r/Print.cpp:528 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." msgstr "只有在多個對象被平均切割的情況下, 才支持擦料塔。" -#: src/libslic3r/Print.cpp:539 +#: src/libslic3r/Print.cpp:541 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" msgstr "" -#: src/libslic3r/Print.cpp:561 +#: src/libslic3r/Print.cpp:563 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "爲一個或多個對象分配了印表機不存在的擠出機。" -#: src/libslic3r/Print.cpp:574 +#: src/libslic3r/Print.cpp:576 #, boost-format msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:577 +#: src/libslic3r/Print.cpp:579 #, boost-format msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:588 +#: src/libslic3r/Print.cpp:590 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -9872,13 +9878,13 @@ msgstr "" "(support_material_extruder == 0 或 support_material_interface_extruder == 0)" "列印支撐物, 則所有噴嘴的直徑必須相同。" -#: src/libslic3r/Print.cpp:596 +#: src/libslic3r/Print.cpp:598 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." msgstr "要使擦料塔與可溶性支撐配合使用, 支持層需要與對象圖層同步。" -#: src/libslic3r/Print.cpp:600 +#: src/libslic3r/Print.cpp:602 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 " @@ -9889,27 +9895,46 @@ msgstr "" "於的支架。(support_material_extruder 和support_material_interface_extruder " "都需要設置爲 0)。" -#: src/libslic3r/Print.cpp:636 +#: src/libslic3r/Print.cpp:638 msgid "First layer height can't be greater than nozzle diameter" msgstr "第一層高度不能大於噴嘴直徑" -#: src/libslic3r/Print.cpp:641 +#: src/libslic3r/Print.cpp:643 msgid "Layer height can't be greater than nozzle diameter" msgstr "層高度不能大於噴嘴直徑" -#: src/libslic3r/Print.cpp:795 +#: src/libslic3r/Print.cpp:663 +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" + +#: src/libslic3r/Print.cpp:665 +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:667 +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" + +#: src/libslic3r/Print.cpp:809 msgid "Infilling layers" msgstr "" -#: src/libslic3r/Print.cpp:817 +#: src/libslic3r/Print.cpp:831 msgid "Generating skirt and brim" msgstr "" -#: src/libslic3r/Print.cpp:865 +#: src/libslic3r/Print.cpp:879 msgid "Exporting G-code" msgstr "" -#: src/libslic3r/Print.cpp:869 +#: src/libslic3r/Print.cpp:883 msgid "Generating G-code" msgstr "" diff --git a/resources/profiles/Anycubic.idx b/resources/profiles/Anycubic.idx index 12652625c..232d53425 100644 --- a/resources/profiles/Anycubic.idx +++ b/resources/profiles/Anycubic.idx @@ -1,3 +1,6 @@ +min_slic3r_version = 2.4.1-rc1 +0.1.1 Fixed before layer change g-code for Mega Zero. +0.1.0 Added Anycubic 4Max Pro 2.0 min_slic3r_version = 2.3.2-alpha0 0.0.12 Updated Anycubic i3 MEGA(S) profiles. 0.0.11 Added bed model and texture for i3 Mega, i3 Mega S. diff --git a/resources/profiles/Anycubic.ini b/resources/profiles/Anycubic.ini index 053aecbd5..e8fd89bf4 100644 --- a/resources/profiles/Anycubic.ini +++ b/resources/profiles/Anycubic.ini @@ -1,1900 +1,2329 @@ -# Print profiles for the Anycubic printers. - -[vendor] -# Vendor name will be shown by the Config Wizard. -name = Anycubic -# Configuration version of this file. Config file will only be installed, if the config_version differs. -# This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 0.0.12 -# Where to get the updates from? -config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Anycubic/ -# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% - -# The printer models will be shown by the Configuration Wizard in this order, -# also the first model installed & the first nozzle installed will be activated after install. -# Printer model name will be shown by the installation wizard. - -[printer_model:AKLP] -name = Anycubic Kossel Linear Plus -variants = 0.4 -technology = FFF -family = KOSSEL -bed_model = AKLP_Bed.stl -bed_texture = AK.svg -default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL - -[printer_model:AK] -name = Anycubic Kossel Pulley (Linear) -variants = 0.4 -technology = FFF -family = KOSSEL -bed_model = AK_Bed.stl -bed_texture = AK.svg -default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL - -[printer_model:MEGA0] -name = Anycubic Mega Zero -variants = 0.4 -technology = FFF -family = MEGA -bed_model = mega0_bed.stl -bed_texture = mega0.svg -default_materials = Generic PLA @MEGA0; Generic PETG @MEGA0; Anycubic PLA @MEGA0; Prusament PLA @MEGA0; Prusament PETG @MEGA0 - -[printer_model:I3MEGA] -name = Anycubic i3 Mega -variants = 0.4 -technology = FFF -family = MEGA -bed_model = i3megas_bed.stl -bed_texture = i3megas.svg - -[printer_model:I3MEGAS] -name = Anycubic i3 Mega S -variants = 0.4 -technology = FFF -family = MEGA -bed_model = i3megas_bed.stl -bed_texture = i3megas.svg - -[printer_model:PREDATOR] -name = Anycubic Predator -variants = 0.4; 0.6; 0.8 -technology = FFF -family = PREDATOR -default_materials = Generic PLA @PREDATOR; Generic PETG @PREDATOR; Generic ABS @PREDATOR - -# All presets starting with asterisk, for example *common*, are intermediate and they will -# not make it into the user interface. - -## Anycubic KOSSEL -## Author: https://github.com/tc0fh -## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4220 - -# Common print preset -[print:*common_akossel*] -avoid_crossing_perimeters = 0 -bottom_solid_min_thickness = 0.5 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 30 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -complete_objects = 0 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeters_first = 0 -external_perimeter_extrusion_width = 0.45 -extra_perimeters = 0 -extruder_clearance_height = 25 -extruder_clearance_radius = 45 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 20 -gap_fill_speed = 40 -gcode_comments = 0 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -interface_shells = 0 -max_print_speed = 200 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -overhangs = 0 -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode -perimeters = 2 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 45 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -single_extruder_multi_material_priming = 0 -skirts = 2 -skirt_distance = 5 -skirt_height = 1 -small_perimeter_speed = 25 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.38 -support_material_interface_extruder = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_enforce_layers = 0 -support_material_contact_distance = 0.15 -support_material_interface_contact_loops = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 40 -top_solid_min_thickness = 0.6 -travel_speed = 180 -wipe_tower = 1 -wipe_tower_bridging = 10 -wipe_tower_rotation_angle = 0 -wipe_tower_width = 60 -wipe_tower_x = 170 -wipe_tower_y = 140 -xy_size_compensation = 0 -bridge_acceleration = 1000 -default_acceleration = 1500 -first_layer_acceleration = 1000 -infill_acceleration = 1500 -perimeter_acceleration = 800 - -[print:*0.08mm_akossel*] -inherits = *common_akossel* -bottom_solid_layers = 10 -bridge_acceleration = 300 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -external_perimeter_speed = 20 -first_layer_acceleration = 500 -gap_fill_speed = 20 -infill_acceleration = 800 -infill_speed = 40 -layer_height = 0.08 -max_print_speed = 80 -perimeter_acceleration = 300 -perimeter_speed = 30 -perimeters = 3 -small_perimeter_speed = 20 -solid_infill_speed = 40 -support_material_extrusion_width = 0.3 -support_material_spacing = 1.5 -support_material_speed = 40 -top_solid_infill_speed = 30 -top_solid_layers = 12 - -[print:*0.16mm_akossel*] -inherits = *common_akossel* -bottom_solid_layers = 5 -layer_height = 0.16 -top_solid_layers = 6 - -[print:*0.20mm_akossel*] -inherits = *common_akossel* -bottom_solid_layers = 4 -bridge_flow_ratio = 0.95 -layer_height = 0.20 -top_solid_layers = 5 - -[print:*0.24mm_akossel*] -inherits = *common_akossel* -bottom_solid_layers = 4 -bridge_flow_ratio = 0.95 -layer_height = 0.24 -perimeter_speed = 50 -external_perimeter_speed = 35 -top_solid_layers = 4 -infill_speed = 100 -solid_infill_speed = 100 -top_solid_infill_speed = 40 - -[print:*0.30mm_akossel*] -inherits = *common_akossel* -bottom_solid_layers = 3 -bridge_flow_ratio = 0.95 -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 35 -extrusion_width = 0.5 -infill_extrusion_width = 0.5 -infill_speed = 70 -layer_height = 0.30 -perimeter_extrusion_width = 0.5 -perimeter_speed = 50 -small_perimeter_speed = 30 -solid_infill_extrusion_width = 0.5 -solid_infill_speed = 70 -support_material_speed = 45 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 50 -top_solid_layers = 3 - -[print:0.08mm ULTRADETAIL @AKOSSEL] -inherits = *0.08mm_akossel* -fill_density = 15% -fill_pattern = gyroid -compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 - -[print:0.16mm QUALITY @AKOSSEL] -inherits = *0.16mm_akossel* -external_perimeter_speed = 25 -fill_density = 15% -fill_pattern = gyroid -infill_speed = 80 -compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 - -[print:0.16mm SPEED @AKOSSEL] -inherits = *0.16mm_akossel* -external_perimeter_speed = 35 -infill_speed = 120 -perimeter_speed = 60 -solid_infill_speed = 120 -top_solid_infill_speed = 50 -compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 - -[print:0.20mm QUALITY @AKOSSEL] -inherits = *0.20mm_akossel* -external_perimeter_speed = 25 -fill_density = 15% -fill_pattern = gyroid -infill_speed = 80 -compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 - -[print:0.20mm SPEED @AKOSSEL] -inherits = *0.20mm_akossel* -external_perimeter_speed = 35 -infill_speed = 120 -perimeter_speed = 60 -solid_infill_speed = 120 -top_solid_infill_speed = 50 -compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 - -[print:0.24mm DRAFT @AKOSSEL] -inherits = *0.24mm_akossel* -compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 - -[print:0.30mm FAST @AKOSSEL] -inherits = *0.30mm_akossel* -compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 - -# Common filament preset -[filament:*common_akossel*] -cooling = 0 -compatible_printers = -extrusion_multiplier = 1 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_notes = "" -filament_settings_id = "" -filament_soluble = 0 -min_print_speed = 15 -slowdown_below_layer_time = 20 -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_Anycubic.*/ and printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ - -[filament:*PLA_akossel*] -inherits = *common_akossel* -bed_temperature = 60 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_max_volumetric_speed = 10 -filament_type = PLA -filament_density = 1.24 -filament_cost = 20 -first_layer_bed_temperature = 60 -first_layer_temperature = 200 -fan_always_on = 1 -cooling = 1 -max_fan_speed = 100 -min_fan_speed = 100 -bridge_fan_speed = 100 -disable_fan_first_layers = 1 -temperature = 200 - -[filament:*PET_akossel*] -inherits = *common_akossel* -bed_temperature = 70 -cooling = 1 -disable_fan_first_layers = 3 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_max_volumetric_speed = 8 -filament_type = PETG -filament_density = 1.27 -filament_cost = 30 -first_layer_bed_temperature =70 -first_layer_temperature = 240 -fan_always_on = 1 -max_fan_speed = 50 -min_fan_speed = 20 -bridge_fan_speed = 100 -temperature = 240 - -[filament:*ABS_akossel*] -inherits = *common_akossel* -bed_temperature = 100 -cooling = 0 -disable_fan_first_layers = 3 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_max_volumetric_speed = 10 -filament_type = ABS -filament_density = 1.04 -filament_cost = 20 -first_layer_bed_temperature = 100 -first_layer_temperature = 245 -fan_always_on = 0 -max_fan_speed = 0 -min_fan_speed = 0 -bridge_fan_speed = 30 -top_fan_speed = 0 -temperature = 245 - -[filament:Generic PLA @AKOSSEL] -inherits = *PLA_akossel* -filament_vendor = Generic - -[filament:Generic PETG @AKOSSEL] -inherits = *PET_akossel* -filament_vendor = Generic - -[filament:Generic ABS @AKOSSEL] -inherits = *ABS_akossel* -filament_vendor = Generic - -# Common printer preset -[printer:*common_akossel*] -printer_technology = FFF -bed_shape = -before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z] -between_objects_gcode = -deretract_speed = 40 -extruder_colour = #FFFF00 -extruder_offset = 0x0 -gcode_flavor = marlin -silent_mode = 0 -remaining_times = 0 -machine_max_acceleration_e = 3000 -machine_max_acceleration_extruding = 1000 -machine_max_acceleration_retracting = 1000 -machine_max_acceleration_x = 1500 -machine_max_acceleration_y = 1500 -machine_max_acceleration_z = 1500 -machine_max_feedrate_e = 60 -machine_max_feedrate_x = 200 -machine_max_feedrate_y = 200 -machine_max_feedrate_z = 200 -machine_max_jerk_e = 5 -machine_max_jerk_x = 5 -machine_max_jerk_y = 5 -machine_max_jerk_z = 5 -machine_min_extruding_rate = 0 -machine_min_travel_rate = 0 -layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] -max_layer_height = 0.3 -min_layer_height = 0.08 -max_print_height = 300 -nozzle_diameter = 0.4 -printer_notes = -printer_settings_id = -retract_before_travel = 2 -retract_before_wipe = 70% -retract_layer_change = 1 -retract_length = 5 -retract_length_toolchange = 1 -retract_lift = 0 -retract_lift_above = 0 -retract_lift_below = 0 -retract_restart_extra = 0 -retract_restart_extra_toolchange = 0 -retract_speed = 60 -single_extruder_multi_material = 0 -start_gcode = -end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG28 ; home\nM84 ; disable motors -toolchange_gcode = -use_firmware_retraction = 0 -use_relative_e_distances = 1 -use_volumetric_e = 0 -variable_layer_height = 1 -wipe = 1 -z_offset = 0 -default_print_profile = 0.20mm QUALITY @AKOSSEL -default_filament_profile = Generic PLA @AKOSSEL - -[printer:Anycubic Kossel Linear Plus] -inherits = *common_akossel* -printer_model = AKLP -printer_variant = 0.4 -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_Anycubic\nPRINTER_MODEL_AKLP\nPRINTER_HAS_BOWDEN\n -bed_shape = 114.562x10.0229,113.253x19.9695,111.081x29.7642,108.065x39.3323,104.225x48.6011,99.5929x57.5,94.2025x65.9613,88.0951x73.9206,81.3173x81.3173,73.9206x88.0951,65.9613x94.2025,57.5x99.5929,48.6011x104.225,39.3323x108.065,29.7642x111.081,19.9695x113.253,10.0229x114.562,7.04172e-15x115,-10.0229x114.562,-19.9695x113.253,-29.7642x111.081,-39.3323x108.065,-48.6011x104.225,-57.5x99.5929,-65.9613x94.2025,-73.9206x88.0951,-81.3173x81.3173,-88.0951x73.9206,-94.2025x65.9613,-99.5929x57.5,-104.225x48.6011,-108.065x39.3323,-111.081x29.7642,-113.253x19.9695,-114.562x10.0229,-115x1.40834e-14,-114.562x-10.0229,-113.253x-19.9695,-111.081x-29.7642,-108.065x-39.3323,-104.225x-48.6011,-99.5929x-57.5,-94.2025x-65.9613,-88.0951x-73.9206,-81.3173x-81.3173,-73.9206x-88.0951,-65.9613x-94.2025,-57.5x-99.5929,-48.6011x-104.225,-39.3323x-108.065,-29.7642x-111.081,-19.9695x-113.253,-10.0229x-114.562,-2.11252e-14x-115,10.0229x-114.562,19.9695x-113.253,29.7642x-111.081,39.3323x-108.065,48.6011x-104.225,57.5x-99.5929,65.9613x-94.2025,73.9206x-88.0951,81.3173x-81.3173,88.0951x-73.9206,94.2025x-65.9613,99.5929x-57.5,104.225x-48.6011,108.065x-39.3323,111.081x-29.7642,113.253x-19.9695,114.562x-10.0229,115x-2.81669e-14 -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home\nG1 X-54.672 Y95.203 Z0.3 F9000\nG92 E0.0\nG1 F1000\nG1 X-52.931 Y96.185 E0.300\nG1 X-50.985 Y97.231 E0.331\nG1 X-49.018 Y98.238 E0.331\nG1 X-47.032 Y99.205 E0.331\nG1 X-45.026 Y100.132 E0.331\nG1 X-43.003 Y101.019 E0.331\nG1 X-40.961 Y101.864 E0.331\nG1 X-38.904 Y102.668 E0.331\nG1 X-36.83 Y103.431 E0.331\nG1 X-34.742 Y104.152 E0.331\nG1 X-32.639 Y104.83 E0.331\nG1 X-30.523 Y105.466 E0.331\nG1 X-28.395 Y106.06 E0.331\nG1 X-26.255 Y106.61 E0.331\nG1 X-24.105 Y107.117 E0.331\nG1 X-21.945 Y107.581 E0.331\nG1 X-19.776 Y108.001 E0.331\nG1 X-17.599 Y108.377 E0.331\nG1 X-15.415 Y108.71 E0.331\nG1 X-13.224 Y108.998 E0.331\nG1 X-11.028 Y109.242 E0.331\nG1 X-8.828 Y109.442 E0.331\nG1 X-6.624 Y109.598 E0.331\nG1 X-4.418 Y109.709 E0.331\nG1 X-2.209 Y109.776 E0.332\nG1 X0 Y109.798 E0.331\nG1 X2.209 Y109.776 E0.690\nG1 X4.418 Y109.709 E0.691\nG1 X6.624 Y109.598 E0.690\nG1 X8.828 Y109.442 E0.690\nG1 X11.028 Y109.242 E0.690\nG1 X13.224 Y108.998 E0.690\nG1 X15.415 Y108.71 E0.691\nG1 X17.599 Y108.377 E0.690\nG1 X19.776 Y108.001 E0.690\nG1 X21.945 Y107.581 E0.690\nG1 X24.105 Y107.117 E0.690\nG1 X26.255 Y106.61 E0.690\nG1 X28.395 Y106.06 E0.690\nG1 X30.523 Y105.466 E0.690\nG1 X32.639 Y104.83 E0.690\nG1 X34.742 Y104.152 E0.690\nG1 X36.83 Y103.431 E0.690\nG1 X38.904 Y102.668 E0.691\nG1 X40.961 Y101.864 E0.690\nG1 X43.003 Y101.019 E0.691\nG1 X45.026 Y100.132 E0.690\nG1 X47.032 Y99.205 E0.691\nG1 X49.018 Y98.238 E0.690\nG1 X50.985 Y97.231 E0.691\nG1 X52.931 Y96.185 E0.690\nG1 X54.672 Y95.203 E0.625\nG92 E0.0\nG1 E-5 F3000 ; retract 5mm\nG1 X52.931 Y96.185 F1000 ; wipe\nG1 X50.985 Y97.231 F1000 ; wipe\nG1 X49.018 Y98.238 F1000 ; wipe\nG1 X0 Y109.798 F1000\nG1 E4.8 F1500; de-retract\nG92 E0.0 ; reset extrusion distance\nM221 S{if layer_height<0.075}100{else}95{endif} - -[printer:Anycubic Kossel Pulley (Linear)] -inherits = *common_akossel* -printer_model = AK -printer_variant = 0.4 -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_Anycubic\nPRINTER_MODEL_AK\nPRINTER_HAS_BOWDEN\n -bed_shape = 89.6575x7.84402,88.6327x15.6283,86.9333x23.2937,84.5723x30.7818,81.5677x38.0356,77.9423x45,73.7237x51.6219,68.944x57.8509,63.6396x63.6396,57.8509x68.944,51.6219x73.7237,45x77.9423,38.0356x81.5677,30.7818x84.5723,23.2937x86.9333,15.6283x88.6327,7.84402x89.6575,5.51091e-15x90,-7.84402x89.6575,-15.6283x88.6327,-23.2937x86.9333,-30.7818x84.5723,-38.0356x81.5677,-45x77.9423,-51.6219x73.7237,-57.8509x68.944,-63.6396x63.6396,-68.944x57.8509,-73.7237x51.6219,-77.9423x45,-81.5677x38.0356,-84.5723x30.7818,-86.9333x23.2937,-88.6327x15.6283,-89.6575x7.84402,-90x1.10218e-14,-89.6575x-7.84402,-88.6327x-15.6283,-86.9333x-23.2937,-84.5723x-30.7818,-81.5677x-38.0356,-77.9423x-45,-73.7237x-51.6219,-68.944x-57.8509,-63.6396x-63.6396,-57.8509x-68.944,-51.6219x-73.7237,-45x-77.9423,-38.0356x-81.5677,-30.7818x-84.5723,-23.2937x-86.9333,-15.6283x-88.6327,-7.84402x-89.6575,-1.65327e-14x-90,7.84402x-89.6575,15.6283x-88.6327,23.2937x-86.9333,30.7818x-84.5723,38.0356x-81.5677,45x-77.9423,51.6219x-73.7237,57.8509x-68.944,63.6396x-63.6396,68.944x-57.8509,73.7237x-51.6219,77.9423x-45,81.5677x-38.0356,84.5723x-30.7818,86.9333x-23.2937,88.6327x-15.6283,89.6575x-7.84402,90x-2.20436e-14 -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home\nG1 X-39.672 Y69.712 Z0.3 F9000\nG92 E0.0\nG1 F1000\nG1 X-38.457 Y70.397 E0.209\nG1 X-37.043 Y71.157 E0.241\nG1 X-35.614 Y71.889 E0.241\nG1 X-34.171 Y72.591 E0.241\nG1 X-32.714 Y73.265 E0.241\nG1 X-31.244 Y73.909 E0.241\nG1 X-29.761 Y74.523 E0.241\nG1 X-28.266 Y75.108 E0.241\nG1 X-26.759 Y75.662 E0.241\nG1 X-25.242 Y76.185 E0.241\nG1 X-23.714 Y76.678 E0.241\nG1 X-22.177 Y77.14 E0.241\nG1 X-20.63 Y77.571 E0.241\nG1 X-19.076 Y77.971 E0.241\nG1 X-17.514 Y78.34 E0.241\nG1 X-15.944 Y78.677 E0.241\nG1 X-14.368 Y78.982 E0.241\nG1 X-12.786 Y79.255 E0.241\nG1 X-11.199 Y79.497 E0.241\nG1 X-9.608 Y79.706 E0.241\nG1 X-8.013 Y79.884 E0.241\nG1 X-6.414 Y80.029 E0.241\nG1 X-4.813 Y80.142 E0.241\nG1 X-3.21 Y80.223 E0.241\nG1 X-1.605 Y80.271 E0.241\nG1 X0 Y80.287 E0.241\nG1 X1.605 Y80.271 E0.502\nG1 X3.21 Y80.223 E0.502\nG1 X4.813 Y80.142 E0.502\nG1 X6.414 Y80.029 E0.502\nG1 X8.013 Y79.884 E0.502\nG1 X9.608 Y79.706 E0.502\nG1 X11.199 Y79.497 E0.501\nG1 X12.786 Y79.255 E0.502\nG1 X14.368 Y78.982 E0.502\nG1 X15.944 Y78.677 E0.502\nG1 X17.514 Y78.34 E0.502\nG1 X19.076 Y77.971 E0.502\nG1 X20.63 Y77.571 E0.501\nG1 X22.177 Y77.14 E0.502\nG1 X23.714 Y76.678 E0.502\nG1 X25.242 Y76.185 E0.502\nG1 X26.759 Y75.662 E0.501\nG1 X28.266 Y75.108 E0.502\nG1 X29.761 Y74.523 E0.502\nG1 X31.244 Y73.909 E0.502\nG1 X32.714 Y73.265 E0.502\nG1 X34.171 Y72.591 E0.502\nG1 X35.614 Y71.889 E0.501\nG1 X37.043 Y71.157 E0.502\nG1 X38.457 Y70.397 E0.502\nG1 X39.672 Y69.712 E0.436\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif} - -## Anycubic MEGA ZERO -## Author: https://github.com/kad -## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4057 - -# Common print preset -[print:*common_mega0*] -avoid_crossing_perimeters = 1 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 25 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -complete_objects = 0 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeters_first = 0 -external_perimeter_extrusion_width = 0.45 -extra_perimeters = 0 -extruder_clearance_height = 25 -extruder_clearance_radius = 45 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 20 -gap_fill_speed = 30 -gcode_comments = 0 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -interface_shells = 0 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -overhangs = 1 -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode -perimeters = 2 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -single_extruder_multi_material_priming = 1 -skirts = 2 -skirt_distance = 2 -skirt_height = 2 -small_perimeter_speed = 25 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.4 -support_material_interface_extruder = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_enforce_layers = 0 -support_material_contact_distance = 0.15 -support_material_interface_contact_loops = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 40 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 40 -travel_speed = 100 -wipe_tower = 0 -wipe_tower_bridging = 10 -wipe_tower_rotation_angle = 0 -wipe_tower_width = 60 -wipe_tower_x = 170 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:*0.10mm_mega0*] -inherits = *common_mega0* -perimeter_speed = 40 -external_perimeter_speed = 25 -infill_speed = 50 -solid_infill_speed = 40 -layer_height = 0.10 -perimeters = 3 -top_infill_extrusion_width = 0.4 -bottom_solid_layers = 6 -top_solid_layers = 7 - -[print:*0.20mm_mega0*] -inherits = *common_mega0* -perimeter_speed = 40 -external_perimeter_speed = 25 -infill_speed = 50 -solid_infill_speed = 40 -layer_height = 0.20 -top_infill_extrusion_width = 0.4 -bottom_solid_layers = 4 -top_solid_layers = 5 - -[print:*0.30mm_mega0*] -inherits = *common_mega0* -perimeter_speed = 40 -external_perimeter_speed = 25 -infill_speed = 50 -solid_infill_speed = 40 -layer_height = 0.24 -top_infill_extrusion_width = 0.45 -bottom_solid_layers = 3 -top_solid_layers = 4 - -[print:0.10mm DETAIL @MEGA0] -inherits = *0.10mm_mega0* -travel_speed = 120 -infill_speed = 50 -solid_infill_speed = 40 -top_solid_infill_speed = 30 -support_material_extrusion_width = 0.38 -compatible_printers_condition = printer_model=="MEGA0" and nozzle_diameter[0]==0.4 - -[print:0.20mm NORMAL @MEGA0] -inherits = *0.20mm_mega0* -travel_speed = 120 -infill_speed = 50 -solid_infill_speed = 40 -top_solid_infill_speed = 30 -support_material_extrusion_width = 0.38 -compatible_printers_condition = printer_model=="MEGA0" and nozzle_diameter[0]==0.4 - -[print:0.30mm DRAFT @MEGA0] -inherits = *0.30mm_mega0* -travel_speed = 120 -infill_speed = 50 -solid_infill_speed = 40 -top_solid_infill_speed = 30 -support_material_extrusion_width = 0.38 -compatible_printers_condition = printer_model=="MEGA0" and nozzle_diameter[0]==0.4 - -# Common filament preset -[filament:*common_mega0*] -cooling = 0 -compatible_printers = -extrusion_multiplier = 1 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_notes = "" -filament_settings_id = "" -filament_soluble = 0 -min_print_speed = 15 -slowdown_below_layer_time = 20 -compatible_printers_condition = printer_model=="MEGA0" - -[filament:*PLA_mega0*] -inherits = *common_mega0* -bed_temperature = 40 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_max_volumetric_speed = 15 -filament_type = PLA -filament_density = 1.24 -filament_cost = 20 -first_layer_bed_temperature = 40 -first_layer_temperature = 215 -fan_always_on = 1 -cooling = 1 -max_fan_speed = 100 -min_fan_speed = 100 -bridge_fan_speed = 100 -disable_fan_first_layers = 1 -temperature = 210 - -[filament:*PET_mega0*] -inherits = *common_mega0* -bed_temperature = 70 -cooling = 1 -disable_fan_first_layers = 3 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_max_volumetric_speed = 8 -filament_type = PETG -filament_density = 1.27 -filament_cost = 30 -first_layer_bed_temperature =70 -first_layer_temperature = 240 -fan_always_on = 1 -max_fan_speed = 50 -min_fan_speed = 20 -bridge_fan_speed = 100 -temperature = 240 - -[filament:*ABS_mega0*] -inherits = *common_mega0* -bed_temperature = 100 -cooling = 0 -disable_fan_first_layers = 3 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_max_volumetric_speed = 11 -filament_type = ABS -filament_density = 1.04 -filament_cost = 20 -first_layer_bed_temperature = 100 -first_layer_temperature = 245 -fan_always_on = 0 -max_fan_speed = 0 -min_fan_speed = 0 -bridge_fan_speed = 30 -top_fan_speed = 0 -temperature = 245 - -[filament:Generic PLA @MEGA0] -inherits = *PLA_mega0* -filament_vendor = Generic - -[filament:Generic PETG @MEGA0] -inherits = *PET_mega0* -filament_vendor = Generic - -[filament:Generic ABS @MEGA0] -inherits = *ABS_mega0* -filament_vendor = Generic - -[filament:Anycubic PLA @MEGA0] -inherits = *PLA_mega0* -filament_vendor = Anycubic -temperature = 190 -first_layer_temperature = 195 -filament_cost = 24.99 -filament_density = 1.25 - -[filament:Prusament PLA @MEGA0] -inherits = *PLA_mega0* -filament_vendor = Prusa Polymers -temperature = 215 -bed_temperature = 40 -first_layer_temperature = 215 -filament_cost = 24.99 -filament_density = 1.24 - -[filament:Prusament PETG @MEGA0] -inherits = *PET_mega0* -filament_vendor = Prusa Polymers -temperature = 245 -bed_temperature = 70 -first_layer_temperature = 245 -filament_cost = 24.99 -filament_density = 1.27 - -# Common printer preset -[printer:*common_mega0*] -printer_technology = FFF -bed_shape = 0x0,220x0,220x220,0x220 -before_layer_gcode = ; BEFORE_LAYER_CHANGE [layer_num] @ [layer_z]mm -between_objects_gcode = -deretract_speed = 0 -extruder_colour = #FFFF00 -extruder_offset = 0x0 -gcode_flavor = marlin -silent_mode = 0 -remaining_times = 0 -machine_max_acceleration_e = 10000 -machine_max_acceleration_extruding = 2000 -machine_max_acceleration_retracting = 1500 -machine_max_acceleration_x = 3000 -machine_max_acceleration_y = 3000 -machine_max_acceleration_z = 500 -machine_max_feedrate_e = 120 -machine_max_feedrate_x = 500 -machine_max_feedrate_y = 500 -machine_max_feedrate_z = 12 -machine_max_jerk_e = 2.5 -machine_max_jerk_x = 20 -machine_max_jerk_y = 20 -machine_max_jerk_z = 0.4 -machine_min_extruding_rate = 0 -machine_min_travel_rate = 0 -layer_gcode = ; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm -max_layer_height = 0.3 -min_layer_height = 0.1 -max_print_height = 200 -nozzle_diameter = 0.4 -printer_notes = -printer_settings_id = -retract_before_travel = 1 -retract_before_wipe = 0% -retract_layer_change = 1 -retract_length = 6 -retract_length_toolchange = 1 -retract_lift = 0 -retract_lift_above = 0 -retract_lift_below = 0 -retract_restart_extra = 0 -retract_restart_extra_toolchange = 0 -retract_speed = 30 -single_extruder_multi_material = 0 -start_gcode = G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM117 Homing X/Y ...\nG28 X0 Y0 ;move X/Y to min endstops\nM117 Homing Z ...\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F240 ;move the platform down 15mm\nM117 Heating ...\nM104 S[first_layer_temperature]\n ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature]\n ; wait for extruder temp\nM117 Start cleaning ...\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nM117 Intro line ...\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z[first_layer_height] F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z[first_layer_height] F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z[first_layer_height] F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3[first_layer_height] F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 E-1 F500 ; Retract filiment by 1 mm\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F240 ; Move over to prevent blob squish\nG92 E0 ; Reset Extruder\nM117 Printing...\n -end_gcode = M117 Cooling down...\nM104 S0 ; turn off extruder\nM140 S0 ; turn off heatbed\nM107 ; Fan off\nM84 ; disable motors\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 ;X-20 Y-20 F240 ;move Z up a bit and retract filament even more\nG28 X0 ;move X to min endstops, so the head is out of the way\nG90 ;Absolute positionning\nG1 Y200 F3000 ;Present print\nM84 ;steppers off\nM300 P300 S4000\nM117 Finished.\n -toolchange_gcode = -use_firmware_retraction = 0 -use_relative_e_distances = 1 -use_volumetric_e = 0 -variable_layer_height = 1 -wipe = 1 -z_offset = 0 -printer_model = -default_print_profile = -default_filament_profile = - -[printer:Anycubic Mega Zero] -inherits = *common_mega0* -printer_model = MEGA0 -printer_variant = 0.4 -max_layer_height = 0.3 -min_layer_height = 0.1 -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_MEGA0 -bed_shape = 0x0,220x0,220x220,0x220 -max_print_height = 250 -machine_max_acceleration_e = 5000 -machine_max_acceleration_extruding = 500 -machine_max_acceleration_retracting = 500 -machine_max_acceleration_x = 500 -machine_max_acceleration_y = 500 -machine_max_acceleration_z = 100 -machine_max_feedrate_e = 25 -machine_max_feedrate_x = 500 -machine_max_feedrate_y = 500 -machine_max_feedrate_z = 5 -machine_max_jerk_e = 5 -machine_max_jerk_x = 10 -machine_max_jerk_y = 10 -machine_max_jerk_z = 0.4 -machine_min_extruding_rate = 0 -machine_min_travel_rate = 0 -nozzle_diameter = 0.4 -retract_before_travel = 2 -retract_layer_change = 0 -retract_length = 7 -retract_speed = 30 -retract_lift = 0.2 -deretract_speed = 30 -retract_before_wipe = 70% -default_print_profile = 0.20mm NORMAL @MEGA0 -default_filament_profile = Anycubic PLA @MEGA0 -start_gcode = G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM117 Homing X/Y ...\nG28 X0 Y0 ;move X/Y to min endstops\nM117 Homing Z ...\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F240 ;move the platform down 15mm\nM117 Heating ...\nM104 S[first_layer_temperature]\n ; set extruder temp\nM109 S[first_layer_temperature]\n ; wait for extruder temp\nM117 Start cleaning ...\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nM117 Intro line ...\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z[first_layer_height] F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z[first_layer_height] F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z[first_layer_height] F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3[first_layer_height] F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 E-1 F500 ; Retract filiment by 1 mm\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F240 ; Move over to prevent blob squish\nG92 E0 ; Reset Extruder\nM117 Printing...\n -end_gcode = M117 Cooling down...\nM104 S0 ; turn off extruder\nM107 ; Fan off\nM84 ; disable motors\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 ;X-20 Y-20 F240 ;move Z up a bit and retract filament even more\nG28 X0 ;move X to min endstops, so the head is out of the way\nG90 ;Absolute positionning\nG1 Y200 F3000 ;Present print\nM84 ;steppers off\nM300 P300 S4000\nM117 Finished.\n - -## Anycubic i3 Mega and i3 Mega S -## Author: https://github.com/Igami -## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4619 - -[print:*common_mega*] -bottom_solid_min_thickness = 0.5 -bridge_acceleration = 1000 -bridge_flow_ratio = 0.95 -bridge_speed = 25 -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ and nozzle_diameter[0]==0.4 -default_acceleration = 1000 -ensure_vertical_shell_thickness = 1 -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 40 -extruder_clearance_height = 35 -extruder_clearance_radius = 60 -extrusion_width = 0.45 -fill_density = 15% -fill_pattern = gyroid -first_layer_acceleration = 800 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 20 -gap_fill_speed = 40 -gcode_comments = 0 -gcode_label_objects = 1 -infill_acceleration = 1000 -infill_anchor = 2.5 -infill_anchor_max = 12 -infill_extrusion_width = 0.45 -max_print_speed = 100 -min_skirt_length = 4 -only_retract_when_crossing_perimeters = 0 -output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode -perimeter_acceleration = 800 -perimeter_extrusion_width = 0.45 -perimeter_speed = 50 -perimeters = 2 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 25 -solid_infill_below_area = 0 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 50 -support_material = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.1 -support_material_extrusion_width = 0.35 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 80% -support_material_spacing = 2 -support_material_speed = 50 -support_material_threshold = 50 -support_material_xy_spacing = 60% -thin_walls = 0 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 40 -top_solid_min_thickness = 0.7 -travel_speed = 180 - -# XXXXXXXXXXXXXXXXXXXX -# XXX--- 0.15mm ---XXX -# XXXXXXXXXXXXXXXXXXXX - -[print:*0.15mm_mega*] -inherits = *common_mega* -bottom_solid_layers = 5 -bridge_flow_ratio = 1 -infill_speed = 60 -layer_height = 0.15 -top_solid_layers = 7 - -[print:0.15mm QUALITY @MEGA] -inherits = *0.15mm_mega* - -# XXXXXXXXXXXXXXXXXXXX -# XXX--- 0.20mm ---XXX -# XXXXXXXXXXXXXXXXXXXX - -[print:*0.20mm_mega*] -inherits = *common_mega* -bottom_solid_layers = 4 -infill_speed = 60 -layer_height = 0.2 -top_solid_layers = 5 - -[print:0.20mm QUALITY @MEGA] -inherits = *0.20mm_mega* - -# XXXXXXXXXXXXXXXXXXXX -# XXX--- 0.30mm ---XXX -# XXXXXXXXXXXXXXXXXXXX - -[print:*0.30mm_mega*] -inherits = *common_mega* -bottom_solid_layers = 4 -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 35 -extrusion_width = 0.5 -fill_pattern = cubic -infill_extrusion_width = 0.5 -infill_speed = 85 -layer_height = 0.3 -perimeter_extrusion_width = 0.5 -small_perimeter_speed = 30 -solid_infill_extrusion_width = 0.5 -support_material_extrusion_width = 0.38 -support_material_speed = 45 -top_solid_layers = 4 - -[print:0.30mm DRAFT @MEGA] -inherits = *0.30mm_mega* - -# XXXXXXXXXXXXXXXXXXXXXX -# XXX--- filament ---XXX -# XXXXXXXXXXXXXXXXXXXXXX - -[filament:*common_mega*] -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ -end_filament_gcode = "; Filament-specific end gcode" -fan_always_on = 1 -fan_below_layer_time = 100 -filament_vendor = Generic -min_print_speed = 15 -slowdown_below_layer_time = 20 - -[filament:*ABS_mega*] - inherits = *common_mega* - bed_temperature = 110 - bridge_fan_speed = 25 - cooling = 0 - fan_always_on = 0 - fan_below_layer_time = 20 - filament_colour = #3A80CA - filament_cost = 27.82 - filament_density = 1.04 - filament_max_volumetric_speed = 11 - filament_ramming_parameters = "120 100 5.70968 6.03226 7 8.25806 9 9.19355 9.3871 9.77419 10.129 10.3226 10.4516 10.5161| 0.05 5.69677 0.45 6.15484 0.95 8.76774 1.45 9.20323 1.95 9.95806 2.45 10.3871 2.95 10.5677 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - filament_type = ABS - first_layer_bed_temperature = 105 - first_layer_temperature = 255 - max_fan_speed = 30 - min_fan_speed = 20 - temperature = 255 - -[filament:Generic ABS @MEGA] -inherits = *ABS_mega* - -[filament:*FLEX_mega*] -inherits = *common_mega* -bed_temperature = 50 -bridge_fan_speed = 80 -cooling = 0 -extrusion_multiplier = 1.15 -fan_always_on = 0 -filament_colour = #008000 -filament_cost = 82.00 -filament_density = 1.22 -filament_deretract_speed = 25 -filament_max_volumetric_speed = 1.2 -filament_retract_length = 0.8 -filament_type = FLEX -first_layer_bed_temperature = 55 -first_layer_temperature = 240 -max_fan_speed = 90 -min_fan_speed = 70 -temperature = 240 - -[filament:Generic FLEX @MEGA] -inherits = *FLEX_mega* - -[filament:SainSmart TPU @MEGA] -inherits = *FLEX_mega* -filament_vendor = SainSmart -bed_temperature = 50 -bridge_fan_speed = 100 -cooling = 1 -disable_fan_first_layers = 4 -filament_cost = 39.99 -filament_density = 1.21 -filament_deretract_speed = 15 -filament_max_volumetric_speed = 1.8 -filament_notes = "SainSmart TPU gains popularity among 3D Printing community for its balance of rigidity and flexibility. In addition, with a 95A Shore Hardness and improved bed adhesion, it is easier to print even with a stock elementary 3D Printer like the Creality Ender 3. SainSmart TPU will not disappoint if you are looking for flexible filament. From drone parts, phone cases, to small toys, all can be printed with ease.\n\nhttps://www.sainsmart.com/collections/tpu-filament/products/all-colors-tpu-flexible-filament-1-75mm-0-8kg-1-76lb" -filament_retract_before_travel = 5 -filament_retract_length = 4 -filament_retract_speed = 40 -filament_unloading_speed = 90 -first_layer_bed_temperature = 55 -first_layer_temperature = 235 -full_fan_speed_layer = 6 -max_fan_speed = 80 -min_fan_speed = 80 -slowdown_below_layer_time = 10 -temperature = 235 - -[filament:*PETG_mega*] -inherits = *common_mega* -bed_temperature = 90 -bridge_fan_speed = 50 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 27.82 -filament_density = 1.27 -filament_max_volumetric_speed = 8 -filament_type = PETG -first_layer_bed_temperature = 90 -first_layer_temperature = 230 -max_fan_speed = 50 -min_fan_speed = 30 -temperature = 240 - -[filament:Generic PETG @MEGA] -inherits = *PETG_mega* - -[filament:ColorFabb XT-CF20 @MEGA] -inherits = *PETG_mega* -compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ -extrusion_multiplier = 1.05 -filament_colour = #804040 -filament_cost = 66.60 -filament_density = 1.35 -filament_deretract_speed = 25 -filament_max_volumetric_speed = 2 -filament_notes = "Based on colorFabb_XT, XT-CF20 is a carbon fiber composite material. Loaded with no less than 20% specially sourced carbon fibers we have developed a very stiff and tough 3D printing filament made for functional parts. It is truly a professional printers go-to material, especially for users looking for high melt strength, high melt viscosity and good dimensional accuracy and stability.\n\nhttps://colorfabb.com/xt-cf20" -filament_retract_before_travel = 1 -filament_retract_length = 1.4 -filament_retract_speed = 40 -filament_spool_weight = 236 -filament_vendor = ColorFabb -first_layer_temperature = 260 -full_fan_speed_layer = 5 -slowdown_below_layer_time = 15 -temperature = 260 - -[filament:ERYONE PETG @MEGA] -inherits = *PETG_mega* -filament_vendor = ERYONE -filament_cost = 20.99 -filament_notes = "https://eryone.com/petg/show/10.html" - -[filament:FormFutura HDglass @MEGA] -inherits = *PETG_mega* -filament_vendor = FormFutura -filament_cost = 46.65 -filament_notes = "HDglass is a high performance PETG type of 3D printer with unsurpassed 3D printing properties and improved mechanical strength, flexibility, toughness and heat resistance.\n\nhttps://www.formfutura.com/shop/product/hdglass-2812" - -[filament:FormFutura ReForm rPET @MEGA] -inherits = *PETG_mega* -filament_vendor = FormFutura -filament_cost = 26.65 -filament_notes = "ReForm rPET is a recycled PETG type of 3D printer filament that is made from post-industrial waste streams of a nearby located plastic bottle manufacturer.\n\nhttps://www.formfutura.com/shop/product/reform-rpet-2836" -filament_spool_weight = 176 - -[filament:Janbex transparent PETG @MEGA] -inherits = *PETG_mega* -filament_vendor = Janbex -filament_cost = 31.99 -filament_spool_weight = 222 -first_layer_temperature = 215 -min_fan_speed = 100 -temperature = 210 - -[filament:DAS FILAMENT PETG @MEGA] -inherits = *PETG_mega* -filament_vendor = DAS FILAMENT -bed_temperature = 75 -first_layer_bed_temperature = 75 -first_layer_temperature = 220 -temperature = 225 - -[filament:*PLA_mega*] -inherits = *common_mega* -bed_temperature = 60 -disable_fan_first_layers = 1 -filament_colour = #FF3232 -filament_cost = 25.40 -filament_density = 1.24 -filament_max_volumetric_speed = 10 -first_layer_bed_temperature = 65 -first_layer_temperature = 215 -min_fan_speed = 100 -temperature = 210 - -[filament:Generic PLA @MEGA] -inherits = *PLA_mega* - -[filament:3Dmensionals PLA @MEGA] -inherits = *PLA_mega* -filament_vendor = 3Dmensionals -filament_cost = 22.90 -filament_notes = "Das 3DFilaments - PLA von 3Dmensionals ist ein sehr leicht zu druckendes 3D-Drucker Filament. Dabei handelt es sich um ein etwas härteres PLA mit einer exzellenten thermischen Stabilität. Das Filament zeichnet sich vor allem durch verzugfreies 3D-Drucken aus und weist minimale bis keine Verformung nach dem Abkühlen auf. Daher ist es besonders gut für den Druck größerer Objekte geeignet. Zudem bietet 3DFilaments - PLA über die gesamte Fadenläge eine hervorragende Durchmesser- und Rundheitstoleranz.\n\nhttps://www.3dmensionals.de/3dfilaments?number=PSU3DM001V" - -[filament:3D Warhorse PLA @MEGA] -inherits = *PLA_mega* -filament_vendor = 3D Warhorse -filament_cost = 19.99 - -[filament:AMOLEN wood PLA] -inherits = *PLA_mega* -filament_vendor = AMOLEN -compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ -extrusion_multiplier = 1.1 -filament_colour = #DFC287 -filament_cost = 33.99 -filament_density = 1.23 -filament_max_volumetric_speed = 9 -filament_notes = "https://amolen.com/collections/wood/products/amolen-pla-filament-1-75mm-wood-color-3d-printer-filament-1kg2-2lb" - -[filament:FormFutura EasyFil PLA @MEGA] -inherits = *PLA_mega* -filament_vendor = FormFutura -filament_cost = 39.93 -filament_notes = "EasyFil PLA is an easy to print PLA type of 3D printer filament that is available in a wide variety of colors. Its improved flowing behavior make 3D printed layers flow more into each other.\n\nhttps://www.formfutura.com/shop/product/easyfil-pla-2801" - -[filament:FormFutura ReForm rPLA @MEGA] -inherits = *PLA_mega* -filament_vendor = FormFutura -filament_cost = 26.65 -filament_notes = "ReForm is a sustainable initiative within Formfutura to efficiently manage residual extrusion waste streams and re-use them into high-end upcycled filaments. The ideology behind ReForm is to a make 3D printing more sustainable – without having to make compromises on material properties – and yet keep it affordable.\n\nhttps://www.formfutura.com/shop/product/reform-rpla-2838" - -[filament:GIANTARM PLA @MEGA] -inherits = *PLA_mega* -filament_vendor = GIANTARM -filament_cost = 24.99 - -[filament:Prusament PLA @MEGA] -inherits = *PLA_mega* -filament_vendor = Prusa Polymers -filament_cost = 30.24 -filament_notes = "Affordable filament for everyday printing in premium quality manufactured in-house by Josef Prusa" -filament_spool_weight = 201 -temperature = 215 - -[filament:Verbatim PLA @MEGA] -inherits = *PLA_mega* -filament_vendor = Verbatim -filament_cost = 23.88 - -[printer:*common_mega*] -printer_technology = FFF -bed_shape = 0x0,210x0,210x210,0x210 -before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z] -default_filament_profile = Generic PLA @MEGA -default_print_profile = 0.15mm QUALITY @MEGA -deretract_speed = 50 -end_gcode = G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < max_print_height} Z{z_offset+min(max_layer_z+30, max_print_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors -extruder_colour = #808080 -gcode_flavor = marlin -layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] -max_layer_height = 0.36 -max_print_height = 205 -remaining_times = 1 -retract_before_travel = 1.5 -retract_before_wipe = 60% -retract_layer_change = 1 -retract_length = 6 -retract_lift = 0.075 -retract_lift_below = 204 -retract_speed = 40 -silent_mode = 0 -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0 -thumbnails = 16x16,220x124 -use_relative_e_distances = 1 -wipe = 1 -machine_max_acceleration_e = 10000 -machine_max_acceleration_extruding = 1250 -machine_max_acceleration_retracting = 1250 -machine_max_acceleration_x = 3000 -machine_max_acceleration_y = 2000 -machine_max_acceleration_z = 60 -machine_max_feedrate_e = 60 -machine_max_feedrate_x = 500 -machine_max_feedrate_y = 500 -machine_max_feedrate_z = 6 -machine_max_jerk_e = 5 -machine_max_jerk_x = 10 -machine_max_jerk_y = 10 -machine_max_jerk_z = 0.4 - -[printer:Anycubic i3 Mega] -inherits = *common_mega* -printer_model = I3MEGA -printer_variant = 0.4 -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_I3_MEGA\nPRINTER_HAS_BOWDEN - -[printer:Anycubic i3 Mega S] -inherits = *common_mega* -printer_model = I3MEGAS -printer_variant = 0.4 -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_I3_MEGA_S\nPRINTER_HAS_BOWDEN -machine_max_feedrate_e = 30 -machine_max_feedrate_z = 8 - - -## Anycubic PREDATOR -## Author: https://github.com/tillverka3d -## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4960 - -######################################### -###### begin common print presets ####### -######################################### - -# Common print preset -[print:*common predator*] -spiral_vase = 0 -top_solid_min_thickness = 0.8 -bottom_solid_min_thickness = 0.6 -extra_perimeters = 0 -ensure_vertical_shell_thickness = 1 -avoid_crossing_perimeters = 0 -thin_walls = 0 -overhangs = 1 -seam_position = nearest -external_perimeters_first = 0 -fill_density = 20% -external_fill_pattern = rectilinear -infill_every_layers = 1 -infill_only_where_needed = 0 -solid_infill_every_layers = 0 -fill_angle = 45 -solid_infill_below_area = 20 -bridge_angle = 0 -only_retract_when_crossing_perimeters = 0 -infill_first = 0 -skirts = 1 -skirt_distance = 4 -skirt_height = 1 -min_skirt_length = 8 -brim_width = 0 -support_material = 0 -support_material_auto = 1 -support_material_threshold = 50 -support_material_enforce_layers = 0 -raft_layers = 0 -support_material_contact_distance = 0.1 -support_material_pattern = rectilinear -support_material_with_sheath = 0 -support_material_spacing = 2 -support_material_angle = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_contact_loops = 0 -support_material_buildplate_only = 0 -support_material_xy_spacing = 60% -dont_support_bridges = 1 -support_material_synchronize_layers = 0 -travel_speed = 94 -first_layer_speed = 15 -perimeter_acceleration = 0 -infill_acceleration = 0 -bridge_acceleration = 0 -first_layer_acceleration = 0 -default_acceleration = 0 -max_volumetric_speed = 15 -perimeter_extruder = 1 -infill_extruder = 1 -solid_infill_extruder = 1 -support_material_extruder = 0 -support_material_interface_extruder = 0 -ooze_prevention = 0 -standby_temperature_delta = -5 -wipe_tower = 0 -wipe_tower_x = 170 -wipe_tower_y = 140 -wipe_tower_width = 60 -wipe_tower_rotation_angle = 0 -wipe_tower_bridging = 10 -interface_shells = 0 -bridge_flow_ratio = 0.8 -resolution = 0 -xy_size_compensation = 0 -elefant_foot_compensation = 0.2 -clip_multipart_objects = 1 -complete_objects = 0 -extruder_clearance_radius = 45 -extruder_clearance_height = 25 -gcode_comments = 0 -output_filename_format = {input_filename_base}.gcode -post_process = -notes = -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -print_settings_id = - -# Common print preset -[print:*common predator 0.4 nozzle*] -inherits = *common predator* -first_layer_height = 0.16 -infill_overlap = 25% -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ and printer_notes=~/.*PRINTER_HAS_BOWDEN.*/ and nozzle_diameter[0]==0.4 - -# Common print preset -[print:*common predator 0.6 nozzle*] -inherits = *common predator* -first_layer_height = 0.24 -infill_overlap = 27% -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ and printer_notes=~/.*PRINTER_HAS_BOWDEN.*/ and nozzle_diameter[0]==0.6 - -# Common print preset -[print:*common predator 0.8 nozzle*] -inherits = *common predator* -first_layer_height = 0.32 -infill_overlap = 30% -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ and printer_notes=~/.*PRINTER_HAS_BOWDEN.*/ and nozzle_diameter[0]==0.8 - -# Common print preset -[print:*common predator quality*] -perimeter_speed = 50 -small_perimeter_speed = 15 -external_perimeter_speed = 70% -infill_speed = 65 -solid_infill_speed = 85% -top_solid_infill_speed = 85% -support_material_speed = 30 -support_material_interface_speed = 85% -bridge_speed = 30 -gap_fill_speed = 40 -ironing_speed = 15 - -# Common print preset -[print:*common predator speed*] -perimeter_speed = 70 -small_perimeter_speed = 15 -external_perimeter_speed = 70% -infill_speed = 85 -solid_infill_speed = 85% -top_solid_infill_speed = 85% -support_material_speed = 30 -support_material_interface_speed = 85% -bridge_speed = 30 -gap_fill_speed = 40 -ironing_speed = 15 - -# Common print preset -[print:*common predator 0.4 nozzle detailed*] -inherits = *common predator 0.4 nozzle* -extrusion_width = 0.42 -first_layer_extrusion_width = 0.41 -perimeter_extrusion_width = 0.42 -external_perimeter_extrusion_width = 0.42 -infill_extrusion_width = 0.4 -solid_infill_extrusion_width = 0.4 -top_infill_extrusion_width = 0.4 -support_material_extrusion_width = 0.38 - -# Common print preset -[print:*common predator 0.4 nozzle coarse*] -inherits = *common predator 0.4 nozzle* -extrusion_width = 0.44 -first_layer_extrusion_width = 0.42 -perimeter_extrusion_width = 0.5 -external_perimeter_extrusion_width = 0.5 -infill_extrusion_width = 0.5 -solid_infill_extrusion_width = 0.5 -top_infill_extrusion_width = 0.4 -support_material_extrusion_width = 0.38 - -# Common print preset -[print:*common predator 0.6 nozzle detailed*] -inherits = *common predator 0.6 nozzle* -extrusion_width = 0.64 -first_layer_extrusion_width = 0.62 -perimeter_extrusion_width = 0.64 -external_perimeter_extrusion_width = 0.64 -infill_extrusion_width = 0.6 -solid_infill_extrusion_width = 0.6 -top_infill_extrusion_width = 0.6 -support_material_extrusion_width = 0.56 - -# Common print preset -[print:*common predator 0.6 nozzle coarse*] -inherits = *common predator 0.6 nozzle* -extrusion_width = 0.67 -first_layer_extrusion_width = 0.64 -perimeter_extrusion_width = 0.7 -external_perimeter_extrusion_width = 0.7 -infill_extrusion_width = 0.7 -solid_infill_extrusion_width = 0.7 -top_infill_extrusion_width = 0.6 -support_material_extrusion_width = 0.56 - -# Common print preset -[print:*common predator 0.8 nozzle detailed*] -inherits = *common predator 0.8 nozzle* -extrusion_width = 0.84 -first_layer_extrusion_width = 0.82 -perimeter_extrusion_width = 0.84 -external_perimeter_extrusion_width = 0.84 -infill_extrusion_width = 0.8 -solid_infill_extrusion_width = 0.8 -top_infill_extrusion_width = 0.8 -support_material_extrusion_width = 0.72 - -# Common print preset -[print:*common predator 0.8 nozzle coarse*] -inherits = *common predator 0.8 nozzle* -extrusion_width = 0.87 -first_layer_extrusion_width = 0.84 -perimeter_extrusion_width = 0.9 -external_perimeter_extrusion_width = 0.9 -infill_extrusion_width = 0.9 -solid_infill_extrusion_width = 0.9 -top_infill_extrusion_width = 0.8 -support_material_extrusion_width = 0.72 - -######################################### -####### end common print presets ######## -######################################### - -######################################### -########## begin print presets ########## -######################################### - -[print:0.08mm 0.4 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.4 nozzle detailed*; *common predator quality* -layer_height = 0.08 -max_print_speed = 50 -perimeters = 3 -fill_pattern = grid - -[print:0.16mm 0.4 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.4 nozzle detailed*; *common predator quality* -layer_height = 0.16 -max_print_speed = 60 -perimeters = 3 -fill_pattern = grid - -[print:0.16mm 0.4 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.4 nozzle coarse*; *common predator quality* -layer_height = 0.16 -max_print_speed = 60 -perimeters = 3 -fill_pattern = grid - -[print:0.24mm 0.4 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.4 nozzle detailed*; *common predator quality* -layer_height = 0.24 -max_print_speed = 70 -perimeters = 3 -fill_pattern = grid - -[print:0.24mm 0.4 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.4 nozzle coarse*; *common predator quality* -layer_height = 0.24 -max_print_speed = 70 -perimeters = 3 -fill_pattern = grid - -[print:0.32mm 0.4 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.4 nozzle detailed*; *common predator quality* -layer_height = 0.32 -max_print_speed = 70 -perimeters = 3 -fill_pattern = grid - -[print:0.32mm 0.4 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.4 nozzle coarse*; *common predator quality* -layer_height = 0.32 -max_print_speed = 70 -perimeters = 3 -fill_pattern = grid - -[print:0.16mm 0.6 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.6 nozzle detailed*; *common predator quality* -layer_height = 0.16 -max_print_speed = 70 -perimeters = 2 -fill_pattern = gyroid - -[print:0.16mm 0.6 nozzle DETAILED SPEED @PREDATOR] -inherits = *common predator 0.6 nozzle detailed*; *common predator speed* -layer_height = 0.16 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.16mm 0.6 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.6 nozzle coarse*; *common predator quality* -layer_height = 0.16 -max_print_speed = 70 -perimeters = 2 -fill_pattern = gyroid - -[print:0.16mm 0.6 nozzle COARSE SPEED @PREDATOR] -inherits = *common predator 0.6 nozzle coarse*; *common predator speed* -layer_height = 0.16 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.24mm 0.6 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.6 nozzle detailed*; *common predator quality* -layer_height = 0.24 -max_print_speed = 70 -perimeters = 2 -fill_pattern = gyroid - -[print:0.24mm 0.6 nozzle DETAILED SPEED @PREDATOR] -inherits = *common predator 0.6 nozzle detailed*; *common predator speed* -layer_height = 0.24 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.24mm 0.6 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.6 nozzle coarse*; *common predator quality* -layer_height = 0.24 -max_print_speed = 70 -perimeters = 2 -fill_pattern = gyroid - -[print:0.24mm 0.6 nozzle COARSE SPEED @PREDATOR] -inherits = *common predator 0.6 nozzle coarse*; *common predator speed* -layer_height = 0.24 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.32mm 0.6 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.6 nozzle detailed*; *common predator quality* -layer_height = 0.32 -max_print_speed = 70 -perimeters = 2 -fill_pattern = gyroid - -[print:0.32mm 0.6 nozzle DETAILED SPEED @PREDATOR] -inherits = *common predator 0.6 nozzle detailed*; *common predator speed* -layer_height = 0.32 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.32mm 0.6 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.6 nozzle coarse*; *common predator quality* -layer_height = 0.32 -max_print_speed = 70 -perimeters = 2 -fill_pattern = gyroid - -[print:0.32mm 0.6 nozzle COARSE SPEED @PREDATOR] -inherits = *common predator 0.6 nozzle coarse*; *common predator speed* -layer_height = 0.32 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.4mm 0.6 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.6 nozzle detailed*; *common predator quality* -layer_height = 0.4 -max_print_speed = 70 -perimeters = 2 -fill_pattern = gyroid - -[print:0.4mm 0.6 nozzle DETAILED SPEED @PREDATOR] -inherits = *common predator 0.6 nozzle detailed*; *common predator speed* -layer_height = 0.4 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.4mm 0.6 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.6 nozzle coarse*; *common predator quality* -layer_height = 0.4 -max_print_speed = 70 -perimeters = 2 -fill_pattern = gyroid - -[print:0.4mm 0.6 nozzle COARSE SPEED @PREDATOR] -inherits = *common predator 0.6 nozzle coarse*; *common predator speed* -layer_height = 0.4 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.24mm 0.8 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.8 nozzle detailed*; *common predator quality* -layer_height = 0.24 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.24mm 0.8 nozzle DETAILED SPEED @PREDATOR] -inherits = *common predator 0.8 nozzle detailed*; *common predator speed* -layer_height = 0.24 -max_print_speed = 90 -perimeters = 2 -fill_pattern = gyroid - -[print:0.24mm 0.8 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.8 nozzle coarse*; *common predator quality* -layer_height = 0.24 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.24mm 0.8 nozzle COARSE SPEED @PREDATOR] -inherits = *common predator 0.8 nozzle coarse*; *common predator speed* -layer_height = 0.24 -max_print_speed = 90 -perimeters = 2 -fill_pattern = gyroid - -[print:0.32mm 0.8 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.8 nozzle detailed*; *common predator quality* -layer_height = 0.32 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.32mm 0.8 nozzle DETAILED SPEED @PREDATOR] -inherits = *common predator 0.8 nozzle detailed*; *common predator speed* -layer_height = 0.32 -max_print_speed = 90 -perimeters = 2 -fill_pattern = gyroid - -[print:0.32mm 0.8 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.8 nozzle coarse*; *common predator quality* -layer_height = 0.32 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.32mm 0.8 nozzle COARSE SPEED @PREDATOR] -inherits = *common predator 0.8 nozzle coarse*; *common predator speed* -layer_height = 0.32 -max_print_speed = 90 -perimeters = 2 -fill_pattern = gyroid - -[print:0.4mm 0.8 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.8 nozzle detailed*; *common predator quality* -layer_height = 0.4 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.4mm 0.8 nozzle DETAILED SPEED @PREDATOR] -inherits = *common predator 0.8 nozzle detailed*; *common predator speed* -layer_height = 0.4 -max_print_speed = 90 -perimeters = 2 -fill_pattern = gyroid - -[print:0.4mm 0.8 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.8 nozzle coarse*; *common predator quality* -layer_height = 0.4 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.4mm 0.8 nozzle COARSE SPEED @PREDATOR] -inherits = *common predator 0.8 nozzle coarse*; *common predator speed* -layer_height = 0.4 -max_print_speed = 90 -perimeters = 2 -fill_pattern = gyroid - -[print:0.48mm 0.8 nozzle DETAILED QUALITY @PREDATOR] -inherits = *common predator 0.8 nozzle detailed*; *common predator quality* -layer_height = 0.48 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.48mm 0.8 nozzle DETAILED SPEED @PREDATOR] -inherits = *common predator 0.8 nozzle detailed*; *common predator speed* -layer_height = 0.48 -max_print_speed = 90 -perimeters = 2 -fill_pattern = gyroid - -[print:0.48mm 0.8 nozzle COARSE QUALITY @PREDATOR] -inherits = *common predator 0.8 nozzle coarse*; *common predator quality* -layer_height = 0.48 -max_print_speed = 80 -perimeters = 2 -fill_pattern = gyroid - -[print:0.48mm 0.8 nozzle COARSE SPEED @PREDATOR] -inherits = *common predator 0.8 nozzle coarse*; *common predator speed* -layer_height = 0.48 -max_print_speed = 90 -perimeters = 2 -fill_pattern = gyroid - -######################################### -########### end print presets ########### -######################################### - -######################################### -######## begin filament presets ######### -######################################### - -# Common filament preset -[filament:*common predator*] -cooling = 0 -compatible_printers = -extrusion_multiplier = 1 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_notes = "" -filament_settings_id = "" -filament_soluble = 0 -min_print_speed = 15 -slowdown_below_layer_time = 20 -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ - -[filament:*PLA predator*] -inherits = *common predator* -bed_temperature = 60 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_max_volumetric_speed = 10 -filament_type = PLA -filament_density = 1.24 -filament_cost = 20 -first_layer_bed_temperature = 60 -first_layer_temperature = 200 -fan_always_on = 1 -cooling = 1 -max_fan_speed = 100 -min_fan_speed = 100 -bridge_fan_speed = 100 -disable_fan_first_layers = 1 -temperature = 200 - -[filament:*PET predator*] -inherits = *common predator* -bed_temperature = 70 -cooling = 1 -disable_fan_first_layers = 3 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_max_volumetric_speed = 8 -filament_type = PETG -filament_density = 1.27 -filament_cost = 30 -first_layer_bed_temperature =70 -first_layer_temperature = 240 -fan_always_on = 1 -max_fan_speed = 50 -min_fan_speed = 20 -bridge_fan_speed = 100 -temperature = 240 - -[filament:*ABS predator*] -inherits = *common predator* -bed_temperature = 100 -cooling = 0 -disable_fan_first_layers = 3 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_max_volumetric_speed = 10 -filament_type = ABS -filament_density = 1.04 -filament_cost = 20 -first_layer_bed_temperature = 100 -first_layer_temperature = 245 -fan_always_on = 0 -max_fan_speed = 0 -min_fan_speed = 0 -bridge_fan_speed = 30 -top_fan_speed = 0 -temperature = 245 - -[filament:Generic PLA @PREDATOR] -inherits = *PLA predator* -filament_vendor = Generic - -[filament:Generic PETG @PREDATOR] -inherits = *PET predator* -filament_vendor = Generic - -[filament:Generic ABS @PREDATOR] -inherits = *ABS predator* -filament_vendor = Generic - -######################################### -######### end filament presets ########## -######################################### - -######################################### -######### begin printer presets ######### -######################################### - -# Anycubic predator common printer preset -[printer:*common predator*] -printer_vendor = Anycubic -printer_model = Predator -printer_technology = FFF -printer_variant = 0.4 -thumbnails = 16x16,220x124 -bed_shape = 188.779x16.516,186.621x32.9063,183.043x49.0462,178.072x64.8128,171.745x80.0862,164.112x94.75,155.229x108.693,145.165x121.808,133.997x133.997,121.808x145.165,108.693x155.229,94.75x164.112,80.0862x171.745,64.8128x178.072,49.0462x183.043,32.9063x186.621,16.516x188.779,1.16035e-14x189.5,-16.516x188.779,-32.9063x186.621,-49.0462x183.043,-64.8128x178.072,-80.0862x171.745,-94.75x164.112,-108.693x155.229,-121.808x145.165,-133.997x133.997,-145.165x121.808,-155.229x108.693,-164.112x94.75,-171.745x80.0862,-178.072x64.8128,-183.043x49.0462,-186.621x32.9063,-188.779x16.516,-189.5x2.32071e-14,-188.779x-16.516,-186.621x-32.9063,-183.043x-49.0462,-178.072x-64.8128,-171.745x-80.0862,-164.112x-94.75,-155.229x-108.693,-145.165x-121.808,-133.997x-133.997,-121.808x-145.165,-108.693x-155.229,-94.75x-164.112,-80.0862x-171.745,-64.8128x-178.072,-49.0462x-183.043,-32.9063x-186.621,-16.516x-188.779,-3.48106e-14x-189.5,16.516x-188.779,32.9063x-186.621,49.0462x-183.043,64.8128x-178.072,80.0862x-171.745,94.75x-164.112,108.693x-155.229,121.808x-145.165,133.997x-133.997,145.165x-121.808,155.229x-108.693,164.112x-94.75,171.745x-80.0862,178.072x-64.8128,183.043x-49.0462,186.621x-32.9063,188.779x-16.516,189.5x-4.64141e-14 -max_print_height = 445 -z_offset = 0 -single_extruder_multi_material = 0 -gcode_flavor = reprap -silent_mode = 0 -remaining_times = 0 -use_relative_e_distances = 0 -use_firmware_retraction = 0 -use_volumetric_e = 0 -variable_layer_height = 1 -start_gcode = ; start_gcode | start\n\n; v11 2020-11-14_11-27 tillverka\n\n; set metric values\n\nG21\n\n; use absolute positioning\n\nG90\n\n; set extruder to absolute mode\n\nM82\n\n; start with fan off\n\nM107\n\n; set temps\n\nM104 S[first_layer_temperature]\nM140 S[first_layer_bed_temperature]\n\n; home xy\n\nG28 X0 Y0\n\n; home z\n\nG28 Z0\n\n; move the head down to Z 94mm\n\nG1 Z94.0 F2394\n\n; set and wait for temps\n\nM109 S[first_layer_temperature]\nM190 S[first_layer_bed_temperature]\n\n; zero the extruded length\n\nG92 E0\n\n; extrude 3mm of feed stock\n\nG1 F200 E3\n\n; zero the extruded length again\n\nG92 E0\n\n; set speed\n\nG1 F{travel_speed}\n\n; print preskirt\n\nG92 E0\nG1 E3.94000 F2520.00000\n\nG1 X125.464 Y-139.310\nG1 Z0.329 F3994.000\n\nG1 F994.000\n\nG1 X125.464 Y-139.310 E4.19679\nG1 X130.218 Y-134.876 E4.70359\nG1 X132.569 Y-132.567 E4.96053\nG1 X137.099 Y-127.877 E5.46890\nG1 X139.325 Y-125.447 E5.72585\nG1 X141.507 Y-122.981 E5.98254\nG1 X145.685 Y-118.002 E6.48934\nG1 X149.741 Y-112.810 E7.00296\nG1 X153.561 Y-107.552 E7.50975\nG1 X155.440 Y-104.819 E7.76827\nG1 X158.980 Y-99.367 E8.27506\nG1 X160.702 Y-96.558 E8.53201\nG1 X163.962 Y-90.911 E9.04038\nG1 X165.535 Y-88.015 E9.29732\nG1 X168.496 Y-82.205 E9.80570\nG1 X169.915 Y-79.231 E10.06264\nG1 X171.280 Y-76.235 E10.31934\nG1 X173.819 Y-70.251 E10.82613\nG1 X176.180 Y-64.101 E11.33975\nG1 X178.297 Y-57.955 E11.84654\nG1 X179.294 Y-54.793 E12.10507\nG1 X181.085 Y-48.544 E12.61186\nG1 X181.911 Y-45.354 E12.86880\nG1 X183.378 Y-39.001 E13.37718\nG1 X184.035 Y-35.771 E13.63412\nG1 X185.168 Y-29.350 E14.14250\nG1 X185.655 Y-26.091 E14.39944\nG1 X186.084 Y-22.826 E14.65614\nG1 X186.764 Y-16.362 E15.16293\nG1 X187.223 Y-9.790 E15.67655\nG1 X187.450 Y-3.294 E16.18334\nG1 X187.479 Y0.002 E16.44028\nG1 X187.450 Y3.294 E16.69698\nG1 X187.223 Y9.810 E17.20529\nG1 X187.021 Y13.100 E17.46229\nG1 X186.454 Y19.575 E17.96909\nG1 X186.079 Y22.870 E18.22761\nG1 X185.174 Y29.307 E18.73440\nG1 X184.031 Y35.794 E19.24802\nG1 X182.679 Y42.152 E19.75481\nG1 X181.910 Y45.357 E20.01176\nG1 X180.223 Y51.655 E20.52013\nG1 X179.287 Y54.815 E20.77708\nG1 X177.272 Y61.017 E21.28545\nG1 X176.172 Y64.123 E21.54239\nG1 X175.019 Y67.207 E21.79909\nG1 X172.584 Y73.234 E22.30588\nG1 X169.905 Y79.252 E22.81950\nG1 X167.055 Y85.094 E23.32629\nG1 X165.524 Y88.035 E23.58482\nG1 X162.373 Y93.721 E24.09161\nG1 X160.700 Y96.560 E24.34855\nG1 X157.245 Y102.090 E24.85693\nG1 X155.427 Y104.838 E25.11387\nG1 X151.687 Y110.180 E25.62225\nG1 X149.727 Y112.829 E25.87919\nG1 X147.722 Y115.441 E26.13588\nG1 X143.631 Y120.493 E26.64268\nG1 X139.310 Y125.464 E27.15629\nG1 X134.876 Y130.218 E27.66309\nG1 X132.567 Y132.569 E27.92003\nG1 X127.877 Y137.099 E28.42840\nG1 X125.447 Y139.325 E28.68535\nG1 X122.981 Y141.507 E28.94204\nG1 X118.002 Y145.685 E29.44883\nG1 X112.810 Y149.741 E29.96245\nG1 X107.552 Y153.561 E30.46924\nG1 X104.819 Y155.440 E30.72777\nG1 X99.367 Y158.980 E31.23456\nG1 X96.558 Y160.702 E31.49151\nG1 X90.911 Y163.962 E31.99988\nG1 X88.015 Y165.535 E32.25682\nG1 X82.205 Y168.496 E32.76520\nG1 X79.231 Y169.915 E33.02214\nG1 X76.235 Y171.280 E33.27884\nG1 X70.251 Y173.819 E33.78563\nG1 X64.101 Y176.180 E34.29925\nG1 X57.955 Y178.297 E34.80604\nG1 X54.793 Y179.294 E35.06457\nG1 X48.544 Y181.085 E35.57136\nG1 X45.354 Y181.911 E35.82830\nG1 X39.001 Y183.378 E36.33668\nG1 X35.771 Y184.035 E36.59362\nG1 X29.350 Y185.168 E37.10200\nG1 X26.091 Y185.655 E37.35894\nG1 X22.826 Y186.084 E37.61563\nG1 X16.362 Y186.764 E38.12242\nG1 X9.790 Y187.223 E38.63605\nG1 X3.294 Y187.450 E39.14283\nG1 X-0.002 Y187.479 E39.39978\nG1 X-3.294 Y187.450 E39.65648\nG1 X-9.810 Y187.223 E40.16479\nG1 X-13.100 Y187.021 E40.42179\nG1 X-19.575 Y186.454 E40.92858\nG1 X-22.870 Y186.079 E41.18711\nG1 X-29.307 Y185.174 E41.69390\nG1 X-35.794 Y184.031 E42.20752\nG1 X-42.152 Y182.679 E42.71431\nG1 X-45.357 Y181.910 E42.97126\nG1 X-51.655 Y180.223 E43.47963\nG1 X-54.815 Y179.287 E43.73657\nG1 X-61.017 Y177.272 E44.24495\nG1 X-64.123 Y176.172 E44.50189\nG1 X-67.207 Y175.019 E44.75859\nG1 X-73.234 Y172.584 E45.26538\nG1 X-79.252 Y169.905 E45.77900\nG1 X-85.094 Y167.055 E46.28579\nG1 X-88.035 Y165.524 E46.54432\nG1 X-93.721 Y162.373 E47.05111\nG1 X-96.560 Y160.700 E47.30805\nG1 X-102.090 Y157.245 E47.81643\nG1 X-104.838 Y155.427 E48.07337\nG1 X-110.180 Y151.687 E48.58174\nG1 X-112.829 Y149.727 E48.83869\nG1 X-115.441 Y147.722 E49.09538\nG1 X-120.493 Y143.631 E49.60218\nG1 X-125.464 Y139.310 E50.11579\nG1 X-130.218 Y134.876 E50.62259\nG1 X-132.569 Y132.567 E50.87953\nG1 X-137.099 Y127.877 E51.38790\nG1 X-139.325 Y125.447 E51.64485\nG1 X-141.507 Y122.981 E51.90154\nG1 X-145.685 Y118.002 E52.40833\nG1 X-149.741 Y112.810 E52.92195\nG1 X-153.561 Y107.552 E53.42874\nG1 X-155.440 Y104.819 E53.68727\nG1 X-158.980 Y99.367 E54.19406\nG1 X-160.702 Y96.558 E54.45101\nG1 X-163.962 Y90.911 E54.95938\nG1 X-165.535 Y88.015 E55.21632\nG1 X-168.496 Y82.205 E55.72470\nG1 X-169.915 Y79.231 E55.98164\nG1 X-171.280 Y76.235 E56.23834\nG1 X-173.819 Y70.251 E56.74513\nG1 X-176.180 Y64.101 E57.25875\nG1 X-178.297 Y57.955 E57.76554\nG1 X-179.294 Y54.793 E58.02407\nG1 X-181.085 Y48.544 E58.53086\nG1 X-181.911 Y45.354 E58.78780\nG1 X-183.378 Y39.001 E59.29618\nG1 X-184.035 Y35.771 E59.55312\nG1 X-185.168 Y29.350 E60.06149\nG1 X-185.655 Y26.091 E60.31844\nG1 X-186.084 Y22.826 E60.57513\nG1 X-186.764 Y16.362 E61.08192\nG1 X-187.223 Y9.790 E61.59554\nG1 X-187.450 Y3.294 E62.10233\nG1 X-187.479 Y-0.002 E62.35928\nG1 X-187.450 Y-3.294 E62.61598\nG1 X-187.223 Y-9.810 E63.12429\nG1 X-187.021 Y-13.100 E63.38129\nG1 X-186.454 Y-19.575 E63.88808\nG1 X-186.079 Y-22.870 E64.14661\nG1 X-185.174 Y-29.307 E64.65340\nG1 X-184.031 Y-35.794 E65.16702\nG1 X-182.679 Y-42.152 E65.67381\nG1 X-181.910 Y-45.357 E65.93076\nG1 X-180.223 Y-51.655 E66.43913\nG1 X-179.287 Y-54.815 E66.69607\nG1 X-177.272 Y-61.017 E67.20445\nG1 X-176.172 Y-64.123 E67.46139\nG1 X-175.019 Y-67.207 E67.71809\nG1 X-172.584 Y-73.234 E68.22488\nG1 X-169.905 Y-79.252 E68.73850\nG1 X-167.055 Y-85.094 E69.24529\nG1 X-165.524 Y-88.035 E69.50382\nG1 X-162.373 Y-93.721 E70.01061\nG1 X-160.700 Y-96.560 E70.26755\nG1 X-157.245 Y-102.090 E70.77593\nG1 X-155.427 Y-104.838 E71.03287\nG1 X-151.687 Y-110.180 E71.54124\nG1 X-149.727 Y-112.829 E71.79819\nG1 X-147.722 Y-115.441 E72.05488\nG1 X-143.631 Y-120.493 E72.56167\nG1 X-139.310 Y-125.464 E73.07529\nG1 X-134.876 Y-130.218 E73.58209\nG1 X-132.567 Y-132.569 E73.83903\nG1 X-127.877 Y-137.099 E74.34740\nG1 X-125.447 Y-139.325 E74.60435\nG1 X-122.981 Y-141.507 E74.86104\nG1 X-118.002 Y-145.685 E75.36783\nG1 X-112.810 Y-149.741 E75.88145\nG1 X-107.552 Y-153.561 E76.38824\nG1 X-104.819 Y-155.440 E76.64677\nG1 X-99.367 Y-158.980 E77.15356\nG1 X-96.558 Y-160.702 E77.41051\nG1 X-90.911 Y-163.962 E77.91888\nG1 X-88.015 Y-165.535 E78.17582\nG1 X-82.205 Y-168.496 E78.68420\nG1 X-79.231 Y-169.915 E78.94114\nG1 X-76.235 Y-171.280 E79.19784\nG1 X-70.251 Y-173.819 E79.70463\nG1 X-64.101 Y-176.180 E80.21825\nG1 X-57.955 Y-178.297 E80.72504\nG1 X-54.793 Y-179.294 E80.98356\nG1 X-48.544 Y-181.085 E81.49036\nG1 X-45.354 Y-181.911 E81.74730\nG1 X-39.001 Y-183.378 E82.25568\nG1 X-35.771 Y-184.035 E82.51262\nG1 X-29.350 Y-185.168 E83.02099\nG1 X-26.091 Y-185.655 E83.27794\nG1 X-22.826 Y-186.084 E83.53463\nG1 X-16.362 Y-186.764 E84.04142\nG1 X-9.790 Y-187.223 E84.55504\nG1 X-3.294 Y-187.450 E85.06183\nG1 X0.006 Y-187.479 E85.31908\nG1 X6.521 Y-187.366 E85.82715\nG1 X9.810 Y-187.223 E86.08379\nG1 X13.100 Y-187.021 E86.34079\nG1 X19.575 Y-186.454 E86.84758\nG1 X22.870 Y-186.079 E87.10611\nG1 X29.307 Y-185.174 E87.61290\nG1 X35.794 Y-184.031 E88.12652\nG1 X42.152 Y-182.679 E88.63331\nG1 X45.357 Y-181.910 E88.89025\nG1 X51.655 Y-180.223 E89.39863\nG1 X54.815 Y-179.287 E89.65557\nG1 X61.017 Y-177.272 E90.16395\nG1 X64.123 Y-176.172 E90.42089\nG1 X67.207 Y-175.019 E90.67759\nG1 X73.234 Y-172.584 E91.18438\nG1 X79.252 Y-169.905 E91.69800\nG1 X85.094 Y-167.055 E92.20479\nG1 X88.035 Y-165.524 E92.46332\nG1 X93.721 Y-162.373 E92.97011\nG1 X96.560 Y-160.700 E93.22705\nG1 X102.090 Y-157.245 E93.73543\nG1 X104.838 Y-155.427 E93.99237\nG1 X110.180 Y-151.687 E94.50074\nG1 X112.829 Y-149.727 E94.75768\nG1 X115.441 Y-147.722 E95.01438\nG1 X120.493 Y-143.631 E95.52117\nG1 X122.911 Y-141.529 E95.77098\n\n; end preskirt\n; start_gcode | end -end_gcode = ; end_gcode | start\n\n; v11 2020-11-14_11-27 tillverka\n\n; use relative positioning\n\nG91\n\n; retract the filament a bit before lifting the nozzle to release some of the pressure\n\nG1 E-1 F300\n\n; home\n\nG28\n\n; use absolute positioning\n\nG90\n\n; cooldown\n\nM104 S0\nM140 S0\n\n; end_gcode | end\n -before_layer_gcode = -layer_gcode = -toolchange_gcode = -between_objects_gcode = -retract_length = 4 -retract_lift = 0.3 -retract_lift_above = 0 -retract_lift_below = 449 -retract_speed = 30 -deretract_speed = 0 -retract_restart_extra = 0 -retract_before_travel = 2 -retract_layer_change = 1 -wipe = 1 -retract_before_wipe = 70% -retract_length_toolchange = 10 -retract_restart_extra_toolchange = 0 -extruder_colour = #1193FF -machine_max_acceleration_e = 3000 -machine_max_acceleration_extruding = 1000 -machine_max_acceleration_retracting = 1000 -machine_max_acceleration_x = 1500 -machine_max_acceleration_y = 1500 -machine_max_acceleration_z = 1500 -machine_max_feedrate_e = 60 -machine_max_feedrate_x = 200 -machine_max_feedrate_y = 200 -machine_max_feedrate_z = 200 -machine_max_jerk_e = 5 -machine_max_jerk_x = 5 -machine_max_jerk_y = 5 -machine_max_jerk_z = 5 -machine_min_extruding_rate = 0 -machine_min_travel_rate = 0 -printer_settings_id = -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PREDATOR\nPRINTER_HAS_BOWDEN\n -default_filament_profile = Generic PLA @PREDATOR - -[printer:Anycubic Predator 0.4 nozzle] -inherits = *common predator* -printer_model = PREDATOR -printer_variant = 0.4 -nozzle_diameter = 0.4 -min_layer_height = 0.08 -max_layer_height = 0.32 -default_print_profile = 0.16mm 0.4 nozzle DETAILED QUALITY @PREDATOR - -[printer:Anycubic Predator 0.6 nozzle] -inherits = *common predator* -printer_model = PREDATOR -printer_variant = 0.6 -nozzle_diameter = 0.6 -min_layer_height = 0.12 -max_layer_height = 0.4 -default_print_profile = 0.24mm 0.8 nozzle DETAILED QUALITY @PREDATOR - -[printer:Anycubic Predator 0.8 nozzle] -inherits = *common predator* -printer_model = PREDATOR -printer_variant = 0.8 -nozzle_diameter = 0.8 -min_layer_height = 0.16 -max_layer_height = 0.48 -default_print_profile = 0.24mm 0.8 nozzle DETAILED QUALITY @PREDATOR - -######################################### -########## end printer presets ########## -######################################### +# Print profiles for the Anycubic printers. + +[vendor] +# Vendor name will be shown by the Config Wizard. +name = Anycubic +# Configuration version of this file. Config file will only be installed, if the config_version differs. +# This means, the server may force the PrusaSlicer configuration to be downgraded. +config_version = 0.1.1 +# Where to get the updates from? +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Anycubic/ +# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% + +# The printer models will be shown by the Configuration Wizard in this order, +# also the first model installed & the first nozzle installed will be activated after install. +# Printer model name will be shown by the installation wizard. + +[printer_model:AKLP] +name = Anycubic Kossel Linear Plus +variants = 0.4 +technology = FFF +family = KOSSEL +bed_model = AKLP_Bed.stl +bed_texture = AK.svg +default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL + +[printer_model:AK] +name = Anycubic Kossel Pulley (Linear) +variants = 0.4 +technology = FFF +family = KOSSEL +bed_model = AK_Bed.stl +bed_texture = AK.svg +default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL + +[printer_model:MEGA0] +name = Anycubic Mega Zero +variants = 0.4 +technology = FFF +family = MEGA +bed_model = mega0_bed.stl +bed_texture = mega0.svg +default_materials = Generic PLA @MEGA0; Generic PETG @MEGA0; Anycubic PLA @MEGA0; Prusament PLA @MEGA0; Prusament PETG @MEGA0 + +[printer_model:I3MEGA] +name = Anycubic i3 Mega +variants = 0.4 +technology = FFF +family = MEGA +bed_model = i3megas_bed.stl +bed_texture = i3megas.svg + +[printer_model:I3MEGAS] +name = Anycubic i3 Mega S +variants = 0.4 +technology = FFF +family = MEGA +bed_model = i3megas_bed.stl +bed_texture = i3megas.svg + +[printer_model:4MAXPRO20] +name = Anycubic 4Max Pro 2.0 +variants = 0.4 +technology = FFF +family = 4Max +bed_model = 4MAXPRO20_bed.stl +bed_texture = 4MAXPRO20_texture.svg +default_materials = Generic PLA @4Max Pro 2.0; Generic TPU @4Max Pro 2.0; Generic ABS @4Max Pro 2.0 + +[printer_model:PREDATOR] +name = Anycubic Predator +variants = 0.4; 0.6; 0.8 +technology = FFF +family = PREDATOR +default_materials = Generic PLA @PREDATOR; Generic PETG @PREDATOR; Generic ABS @PREDATOR + +[printer_model:PHOTON MONO X] +name = Photon Mono X +variants = default +technology = SLA +family = PHOTON MONO +default_materials = Generic Blue Resin @MONO 0.05 + +# All presets starting with asterisk, for example *common*, are intermediate and they will +# not make it into the user interface. + +## Anycubic KOSSEL +## Author: https://github.com/tc0fh +## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4220 + +# Common print preset +[print:*common_akossel*] +avoid_crossing_perimeters = 0 +bottom_solid_min_thickness = 0.5 +bridge_angle = 0 +bridge_flow_ratio = 0.8 +bridge_speed = 30 +brim_width = 0 +clip_multipart_objects = 1 +compatible_printers = +complete_objects = 0 +dont_support_bridges = 1 +elefant_foot_compensation = 0 +ensure_vertical_shell_thickness = 1 +external_fill_pattern = rectilinear +external_perimeters_first = 0 +external_perimeter_extrusion_width = 0.45 +extra_perimeters = 0 +extruder_clearance_height = 25 +extruder_clearance_radius = 45 +extrusion_width = 0.45 +fill_angle = 45 +fill_density = 20% +fill_pattern = grid +first_layer_extrusion_width = 0.42 +first_layer_height = 0.2 +first_layer_speed = 20 +gap_fill_speed = 40 +gcode_comments = 0 +infill_every_layers = 1 +infill_extruder = 1 +infill_extrusion_width = 0.45 +infill_first = 0 +infill_only_where_needed = 0 +infill_overlap = 25% +interface_shells = 0 +max_print_speed = 200 +max_volumetric_extrusion_rate_slope_negative = 0 +max_volumetric_extrusion_rate_slope_positive = 0 +max_volumetric_speed = 0 +min_skirt_length = 4 +notes = +overhangs = 0 +only_retract_when_crossing_perimeters = 0 +ooze_prevention = 0 +output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode +perimeters = 2 +perimeter_extruder = 1 +perimeter_extrusion_width = 0.45 +perimeter_speed = 45 +post_process = +print_settings_id = +raft_layers = 0 +resolution = 0 +seam_position = nearest +single_extruder_multi_material_priming = 0 +skirts = 2 +skirt_distance = 5 +skirt_height = 1 +small_perimeter_speed = 25 +solid_infill_below_area = 0 +solid_infill_every_layers = 0 +solid_infill_extruder = 1 +solid_infill_extrusion_width = 0.45 +spiral_vase = 0 +standby_temperature_delta = -5 +support_material = 0 +support_material_extruder = 0 +support_material_extrusion_width = 0.38 +support_material_interface_extruder = 0 +support_material_angle = 0 +support_material_buildplate_only = 0 +support_material_enforce_layers = 0 +support_material_contact_distance = 0.15 +support_material_interface_contact_loops = 0 +support_material_interface_layers = 2 +support_material_interface_spacing = 0.2 +support_material_interface_speed = 100% +support_material_pattern = rectilinear +support_material_spacing = 2 +support_material_speed = 50 +support_material_synchronize_layers = 0 +support_material_threshold = 45 +support_material_with_sheath = 0 +support_material_xy_spacing = 60% +thin_walls = 0 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +top_solid_min_thickness = 0.6 +travel_speed = 180 +wipe_tower = 1 +wipe_tower_bridging = 10 +wipe_tower_rotation_angle = 0 +wipe_tower_width = 60 +wipe_tower_x = 170 +wipe_tower_y = 140 +xy_size_compensation = 0 +bridge_acceleration = 1000 +default_acceleration = 1500 +first_layer_acceleration = 1000 +infill_acceleration = 1500 +perimeter_acceleration = 800 + +[print:*0.08mm_akossel*] +inherits = *common_akossel* +bottom_solid_layers = 10 +bridge_acceleration = 300 +bridge_flow_ratio = 0.7 +bridge_speed = 20 +external_perimeter_speed = 20 +first_layer_acceleration = 500 +gap_fill_speed = 20 +infill_acceleration = 800 +infill_speed = 40 +layer_height = 0.08 +max_print_speed = 80 +perimeter_acceleration = 300 +perimeter_speed = 30 +perimeters = 3 +small_perimeter_speed = 20 +solid_infill_speed = 40 +support_material_extrusion_width = 0.3 +support_material_spacing = 1.5 +support_material_speed = 40 +top_solid_infill_speed = 30 +top_solid_layers = 12 + +[print:*0.16mm_akossel*] +inherits = *common_akossel* +bottom_solid_layers = 5 +layer_height = 0.16 +top_solid_layers = 6 + +[print:*0.20mm_akossel*] +inherits = *common_akossel* +bottom_solid_layers = 4 +bridge_flow_ratio = 0.95 +layer_height = 0.20 +top_solid_layers = 5 + +[print:*0.24mm_akossel*] +inherits = *common_akossel* +bottom_solid_layers = 4 +bridge_flow_ratio = 0.95 +layer_height = 0.24 +perimeter_speed = 50 +external_perimeter_speed = 35 +top_solid_layers = 4 +infill_speed = 100 +solid_infill_speed = 100 +top_solid_infill_speed = 40 + +[print:*0.30mm_akossel*] +inherits = *common_akossel* +bottom_solid_layers = 3 +bridge_flow_ratio = 0.95 +external_perimeter_extrusion_width = 0.6 +external_perimeter_speed = 35 +extrusion_width = 0.5 +infill_extrusion_width = 0.5 +infill_speed = 70 +layer_height = 0.30 +perimeter_extrusion_width = 0.5 +perimeter_speed = 50 +small_perimeter_speed = 30 +solid_infill_extrusion_width = 0.5 +solid_infill_speed = 70 +support_material_speed = 45 +top_infill_extrusion_width = 0.45 +top_solid_infill_speed = 50 +top_solid_layers = 3 + +[print:0.08mm ULTRADETAIL @AKOSSEL] +inherits = *0.08mm_akossel* +fill_density = 15% +fill_pattern = gyroid +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.16mm QUALITY @AKOSSEL] +inherits = *0.16mm_akossel* +external_perimeter_speed = 25 +fill_density = 15% +fill_pattern = gyroid +infill_speed = 80 +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.16mm SPEED @AKOSSEL] +inherits = *0.16mm_akossel* +external_perimeter_speed = 35 +infill_speed = 120 +perimeter_speed = 60 +solid_infill_speed = 120 +top_solid_infill_speed = 50 +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.20mm QUALITY @AKOSSEL] +inherits = *0.20mm_akossel* +external_perimeter_speed = 25 +fill_density = 15% +fill_pattern = gyroid +infill_speed = 80 +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.20mm SPEED @AKOSSEL] +inherits = *0.20mm_akossel* +external_perimeter_speed = 35 +infill_speed = 120 +perimeter_speed = 60 +solid_infill_speed = 120 +top_solid_infill_speed = 50 +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.24mm DRAFT @AKOSSEL] +inherits = *0.24mm_akossel* +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.30mm FAST @AKOSSEL] +inherits = *0.30mm_akossel* +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +# Common filament preset +[filament:*common_akossel*] +cooling = 0 +compatible_printers = +extrusion_multiplier = 1 +filament_cost = 0 +filament_density = 0 +filament_diameter = 1.75 +filament_notes = "" +filament_settings_id = "" +filament_soluble = 0 +min_print_speed = 15 +slowdown_below_layer_time = 20 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_Anycubic.*/ and printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ + +[filament:*PLA_akossel*] +inherits = *common_akossel* +bed_temperature = 60 +fan_below_layer_time = 100 +filament_colour = #FF3232 +filament_max_volumetric_speed = 10 +filament_type = PLA +filament_density = 1.24 +filament_cost = 20 +first_layer_bed_temperature = 60 +first_layer_temperature = 200 +fan_always_on = 1 +cooling = 1 +max_fan_speed = 100 +min_fan_speed = 100 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +temperature = 200 + +[filament:*PET_akossel*] +inherits = *common_akossel* +bed_temperature = 70 +cooling = 1 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #FF8000 +filament_max_volumetric_speed = 8 +filament_type = PETG +filament_density = 1.27 +filament_cost = 30 +first_layer_bed_temperature =70 +first_layer_temperature = 240 +fan_always_on = 1 +max_fan_speed = 50 +min_fan_speed = 20 +bridge_fan_speed = 100 +temperature = 240 + +[filament:*ABS_akossel*] +inherits = *common_akossel* +bed_temperature = 100 +cooling = 0 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #3A80CA +filament_max_volumetric_speed = 10 +filament_type = ABS +filament_density = 1.04 +filament_cost = 20 +first_layer_bed_temperature = 100 +first_layer_temperature = 245 +fan_always_on = 0 +max_fan_speed = 0 +min_fan_speed = 0 +bridge_fan_speed = 30 +top_fan_speed = 0 +temperature = 245 + +[filament:Generic PLA @AKOSSEL] +inherits = *PLA_akossel* +filament_vendor = Generic + +[filament:Generic PETG @AKOSSEL] +inherits = *PET_akossel* +filament_vendor = Generic + +[filament:Generic ABS @AKOSSEL] +inherits = *ABS_akossel* +filament_vendor = Generic + +# Common printer preset +[printer:*common_akossel*] +printer_technology = FFF +bed_shape = +before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z] +between_objects_gcode = +deretract_speed = 40 +extruder_colour = #FFFF00 +extruder_offset = 0x0 +gcode_flavor = marlin +silent_mode = 0 +remaining_times = 0 +machine_max_acceleration_e = 3000 +machine_max_acceleration_extruding = 1000 +machine_max_acceleration_retracting = 1000 +machine_max_acceleration_x = 1500 +machine_max_acceleration_y = 1500 +machine_max_acceleration_z = 1500 +machine_max_feedrate_e = 60 +machine_max_feedrate_x = 200 +machine_max_feedrate_y = 200 +machine_max_feedrate_z = 200 +machine_max_jerk_e = 5 +machine_max_jerk_x = 5 +machine_max_jerk_y = 5 +machine_max_jerk_z = 5 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] +max_layer_height = 0.3 +min_layer_height = 0.08 +max_print_height = 300 +nozzle_diameter = 0.4 +printer_notes = +printer_settings_id = +retract_before_travel = 2 +retract_before_wipe = 70% +retract_layer_change = 1 +retract_length = 5 +retract_length_toolchange = 1 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 60 +single_extruder_multi_material = 0 +start_gcode = +end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG28 ; home\nM84 ; disable motors +toolchange_gcode = +use_firmware_retraction = 0 +use_relative_e_distances = 1 +use_volumetric_e = 0 +variable_layer_height = 1 +wipe = 1 +z_offset = 0 +default_print_profile = 0.20mm QUALITY @AKOSSEL +default_filament_profile = Generic PLA @AKOSSEL + +[printer:Anycubic Kossel Linear Plus] +inherits = *common_akossel* +printer_model = AKLP +printer_variant = 0.4 +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_Anycubic\nPRINTER_MODEL_AKLP\nPRINTER_HAS_BOWDEN\n +bed_shape = 114.562x10.0229,113.253x19.9695,111.081x29.7642,108.065x39.3323,104.225x48.6011,99.5929x57.5,94.2025x65.9613,88.0951x73.9206,81.3173x81.3173,73.9206x88.0951,65.9613x94.2025,57.5x99.5929,48.6011x104.225,39.3323x108.065,29.7642x111.081,19.9695x113.253,10.0229x114.562,7.04172e-15x115,-10.0229x114.562,-19.9695x113.253,-29.7642x111.081,-39.3323x108.065,-48.6011x104.225,-57.5x99.5929,-65.9613x94.2025,-73.9206x88.0951,-81.3173x81.3173,-88.0951x73.9206,-94.2025x65.9613,-99.5929x57.5,-104.225x48.6011,-108.065x39.3323,-111.081x29.7642,-113.253x19.9695,-114.562x10.0229,-115x1.40834e-14,-114.562x-10.0229,-113.253x-19.9695,-111.081x-29.7642,-108.065x-39.3323,-104.225x-48.6011,-99.5929x-57.5,-94.2025x-65.9613,-88.0951x-73.9206,-81.3173x-81.3173,-73.9206x-88.0951,-65.9613x-94.2025,-57.5x-99.5929,-48.6011x-104.225,-39.3323x-108.065,-29.7642x-111.081,-19.9695x-113.253,-10.0229x-114.562,-2.11252e-14x-115,10.0229x-114.562,19.9695x-113.253,29.7642x-111.081,39.3323x-108.065,48.6011x-104.225,57.5x-99.5929,65.9613x-94.2025,73.9206x-88.0951,81.3173x-81.3173,88.0951x-73.9206,94.2025x-65.9613,99.5929x-57.5,104.225x-48.6011,108.065x-39.3323,111.081x-29.7642,113.253x-19.9695,114.562x-10.0229,115x-2.81669e-14 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home\nG1 X-54.672 Y95.203 Z0.3 F9000\nG92 E0.0\nG1 F1000\nG1 X-52.931 Y96.185 E0.300\nG1 X-50.985 Y97.231 E0.331\nG1 X-49.018 Y98.238 E0.331\nG1 X-47.032 Y99.205 E0.331\nG1 X-45.026 Y100.132 E0.331\nG1 X-43.003 Y101.019 E0.331\nG1 X-40.961 Y101.864 E0.331\nG1 X-38.904 Y102.668 E0.331\nG1 X-36.83 Y103.431 E0.331\nG1 X-34.742 Y104.152 E0.331\nG1 X-32.639 Y104.83 E0.331\nG1 X-30.523 Y105.466 E0.331\nG1 X-28.395 Y106.06 E0.331\nG1 X-26.255 Y106.61 E0.331\nG1 X-24.105 Y107.117 E0.331\nG1 X-21.945 Y107.581 E0.331\nG1 X-19.776 Y108.001 E0.331\nG1 X-17.599 Y108.377 E0.331\nG1 X-15.415 Y108.71 E0.331\nG1 X-13.224 Y108.998 E0.331\nG1 X-11.028 Y109.242 E0.331\nG1 X-8.828 Y109.442 E0.331\nG1 X-6.624 Y109.598 E0.331\nG1 X-4.418 Y109.709 E0.331\nG1 X-2.209 Y109.776 E0.332\nG1 X0 Y109.798 E0.331\nG1 X2.209 Y109.776 E0.690\nG1 X4.418 Y109.709 E0.691\nG1 X6.624 Y109.598 E0.690\nG1 X8.828 Y109.442 E0.690\nG1 X11.028 Y109.242 E0.690\nG1 X13.224 Y108.998 E0.690\nG1 X15.415 Y108.71 E0.691\nG1 X17.599 Y108.377 E0.690\nG1 X19.776 Y108.001 E0.690\nG1 X21.945 Y107.581 E0.690\nG1 X24.105 Y107.117 E0.690\nG1 X26.255 Y106.61 E0.690\nG1 X28.395 Y106.06 E0.690\nG1 X30.523 Y105.466 E0.690\nG1 X32.639 Y104.83 E0.690\nG1 X34.742 Y104.152 E0.690\nG1 X36.83 Y103.431 E0.690\nG1 X38.904 Y102.668 E0.691\nG1 X40.961 Y101.864 E0.690\nG1 X43.003 Y101.019 E0.691\nG1 X45.026 Y100.132 E0.690\nG1 X47.032 Y99.205 E0.691\nG1 X49.018 Y98.238 E0.690\nG1 X50.985 Y97.231 E0.691\nG1 X52.931 Y96.185 E0.690\nG1 X54.672 Y95.203 E0.625\nG92 E0.0\nG1 E-5 F3000 ; retract 5mm\nG1 X52.931 Y96.185 F1000 ; wipe\nG1 X50.985 Y97.231 F1000 ; wipe\nG1 X49.018 Y98.238 F1000 ; wipe\nG1 X0 Y109.798 F1000\nG1 E4.8 F1500; de-retract\nG92 E0.0 ; reset extrusion distance\nM221 S{if layer_height<0.075}100{else}95{endif} + +[printer:Anycubic Kossel Pulley (Linear)] +inherits = *common_akossel* +printer_model = AK +printer_variant = 0.4 +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_Anycubic\nPRINTER_MODEL_AK\nPRINTER_HAS_BOWDEN\n +bed_shape = 89.6575x7.84402,88.6327x15.6283,86.9333x23.2937,84.5723x30.7818,81.5677x38.0356,77.9423x45,73.7237x51.6219,68.944x57.8509,63.6396x63.6396,57.8509x68.944,51.6219x73.7237,45x77.9423,38.0356x81.5677,30.7818x84.5723,23.2937x86.9333,15.6283x88.6327,7.84402x89.6575,5.51091e-15x90,-7.84402x89.6575,-15.6283x88.6327,-23.2937x86.9333,-30.7818x84.5723,-38.0356x81.5677,-45x77.9423,-51.6219x73.7237,-57.8509x68.944,-63.6396x63.6396,-68.944x57.8509,-73.7237x51.6219,-77.9423x45,-81.5677x38.0356,-84.5723x30.7818,-86.9333x23.2937,-88.6327x15.6283,-89.6575x7.84402,-90x1.10218e-14,-89.6575x-7.84402,-88.6327x-15.6283,-86.9333x-23.2937,-84.5723x-30.7818,-81.5677x-38.0356,-77.9423x-45,-73.7237x-51.6219,-68.944x-57.8509,-63.6396x-63.6396,-57.8509x-68.944,-51.6219x-73.7237,-45x-77.9423,-38.0356x-81.5677,-30.7818x-84.5723,-23.2937x-86.9333,-15.6283x-88.6327,-7.84402x-89.6575,-1.65327e-14x-90,7.84402x-89.6575,15.6283x-88.6327,23.2937x-86.9333,30.7818x-84.5723,38.0356x-81.5677,45x-77.9423,51.6219x-73.7237,57.8509x-68.944,63.6396x-63.6396,68.944x-57.8509,73.7237x-51.6219,77.9423x-45,81.5677x-38.0356,84.5723x-30.7818,86.9333x-23.2937,88.6327x-15.6283,89.6575x-7.84402,90x-2.20436e-14 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home\nG1 X-39.672 Y69.712 Z0.3 F9000\nG92 E0.0\nG1 F1000\nG1 X-38.457 Y70.397 E0.209\nG1 X-37.043 Y71.157 E0.241\nG1 X-35.614 Y71.889 E0.241\nG1 X-34.171 Y72.591 E0.241\nG1 X-32.714 Y73.265 E0.241\nG1 X-31.244 Y73.909 E0.241\nG1 X-29.761 Y74.523 E0.241\nG1 X-28.266 Y75.108 E0.241\nG1 X-26.759 Y75.662 E0.241\nG1 X-25.242 Y76.185 E0.241\nG1 X-23.714 Y76.678 E0.241\nG1 X-22.177 Y77.14 E0.241\nG1 X-20.63 Y77.571 E0.241\nG1 X-19.076 Y77.971 E0.241\nG1 X-17.514 Y78.34 E0.241\nG1 X-15.944 Y78.677 E0.241\nG1 X-14.368 Y78.982 E0.241\nG1 X-12.786 Y79.255 E0.241\nG1 X-11.199 Y79.497 E0.241\nG1 X-9.608 Y79.706 E0.241\nG1 X-8.013 Y79.884 E0.241\nG1 X-6.414 Y80.029 E0.241\nG1 X-4.813 Y80.142 E0.241\nG1 X-3.21 Y80.223 E0.241\nG1 X-1.605 Y80.271 E0.241\nG1 X0 Y80.287 E0.241\nG1 X1.605 Y80.271 E0.502\nG1 X3.21 Y80.223 E0.502\nG1 X4.813 Y80.142 E0.502\nG1 X6.414 Y80.029 E0.502\nG1 X8.013 Y79.884 E0.502\nG1 X9.608 Y79.706 E0.502\nG1 X11.199 Y79.497 E0.501\nG1 X12.786 Y79.255 E0.502\nG1 X14.368 Y78.982 E0.502\nG1 X15.944 Y78.677 E0.502\nG1 X17.514 Y78.34 E0.502\nG1 X19.076 Y77.971 E0.502\nG1 X20.63 Y77.571 E0.501\nG1 X22.177 Y77.14 E0.502\nG1 X23.714 Y76.678 E0.502\nG1 X25.242 Y76.185 E0.502\nG1 X26.759 Y75.662 E0.501\nG1 X28.266 Y75.108 E0.502\nG1 X29.761 Y74.523 E0.502\nG1 X31.244 Y73.909 E0.502\nG1 X32.714 Y73.265 E0.502\nG1 X34.171 Y72.591 E0.502\nG1 X35.614 Y71.889 E0.501\nG1 X37.043 Y71.157 E0.502\nG1 X38.457 Y70.397 E0.502\nG1 X39.672 Y69.712 E0.436\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif} + +## Anycubic MEGA ZERO +## Author: https://github.com/kad +## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4057 + +# Common print preset +[print:*common_mega0*] +avoid_crossing_perimeters = 1 +bridge_angle = 0 +bridge_flow_ratio = 0.7 +bridge_speed = 25 +brim_width = 0 +clip_multipart_objects = 1 +compatible_printers = +complete_objects = 0 +dont_support_bridges = 1 +elefant_foot_compensation = 0 +ensure_vertical_shell_thickness = 1 +external_fill_pattern = rectilinear +external_perimeters_first = 0 +external_perimeter_extrusion_width = 0.45 +extra_perimeters = 0 +extruder_clearance_height = 25 +extruder_clearance_radius = 45 +extrusion_width = 0.45 +fill_angle = 45 +fill_density = 20% +fill_pattern = grid +first_layer_extrusion_width = 0.42 +first_layer_height = 0.2 +first_layer_speed = 20 +gap_fill_speed = 30 +gcode_comments = 0 +infill_every_layers = 1 +infill_extruder = 1 +infill_extrusion_width = 0.45 +infill_first = 0 +infill_only_where_needed = 0 +infill_overlap = 25% +interface_shells = 0 +max_print_speed = 100 +max_volumetric_extrusion_rate_slope_negative = 0 +max_volumetric_extrusion_rate_slope_positive = 0 +max_volumetric_speed = 0 +min_skirt_length = 4 +notes = +overhangs = 1 +only_retract_when_crossing_perimeters = 0 +ooze_prevention = 0 +output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode +perimeters = 2 +perimeter_extruder = 1 +perimeter_extrusion_width = 0.45 +post_process = +print_settings_id = +raft_layers = 0 +resolution = 0 +seam_position = nearest +single_extruder_multi_material_priming = 1 +skirts = 2 +skirt_distance = 2 +skirt_height = 2 +small_perimeter_speed = 25 +solid_infill_below_area = 0 +solid_infill_every_layers = 0 +solid_infill_extruder = 1 +solid_infill_extrusion_width = 0.45 +spiral_vase = 0 +standby_temperature_delta = -5 +support_material = 0 +support_material_extruder = 0 +support_material_extrusion_width = 0.4 +support_material_interface_extruder = 0 +support_material_angle = 0 +support_material_buildplate_only = 0 +support_material_enforce_layers = 0 +support_material_contact_distance = 0.15 +support_material_interface_contact_loops = 0 +support_material_interface_layers = 2 +support_material_interface_spacing = 0.2 +support_material_interface_speed = 100% +support_material_pattern = rectilinear +support_material_spacing = 2 +support_material_speed = 40 +support_material_synchronize_layers = 0 +support_material_threshold = 45 +support_material_with_sheath = 0 +support_material_xy_spacing = 60% +thin_walls = 0 +top_infill_extrusion_width = 0.45 +top_solid_infill_speed = 40 +travel_speed = 100 +wipe_tower = 0 +wipe_tower_bridging = 10 +wipe_tower_rotation_angle = 0 +wipe_tower_width = 60 +wipe_tower_x = 170 +wipe_tower_y = 140 +xy_size_compensation = 0 + +[print:*0.10mm_mega0*] +inherits = *common_mega0* +perimeter_speed = 40 +external_perimeter_speed = 25 +infill_speed = 50 +solid_infill_speed = 40 +layer_height = 0.10 +perimeters = 3 +top_infill_extrusion_width = 0.4 +bottom_solid_layers = 6 +top_solid_layers = 7 + +[print:*0.20mm_mega0*] +inherits = *common_mega0* +perimeter_speed = 40 +external_perimeter_speed = 25 +infill_speed = 50 +solid_infill_speed = 40 +layer_height = 0.20 +top_infill_extrusion_width = 0.4 +bottom_solid_layers = 4 +top_solid_layers = 5 + +[print:*0.30mm_mega0*] +inherits = *common_mega0* +perimeter_speed = 40 +external_perimeter_speed = 25 +infill_speed = 50 +solid_infill_speed = 40 +layer_height = 0.24 +top_infill_extrusion_width = 0.45 +bottom_solid_layers = 3 +top_solid_layers = 4 + +[print:0.10mm DETAIL @MEGA0] +inherits = *0.10mm_mega0* +travel_speed = 120 +infill_speed = 50 +solid_infill_speed = 40 +top_solid_infill_speed = 30 +support_material_extrusion_width = 0.38 +compatible_printers_condition = printer_model=="MEGA0" and nozzle_diameter[0]==0.4 + +[print:0.20mm NORMAL @MEGA0] +inherits = *0.20mm_mega0* +travel_speed = 120 +infill_speed = 50 +solid_infill_speed = 40 +top_solid_infill_speed = 30 +support_material_extrusion_width = 0.38 +compatible_printers_condition = printer_model=="MEGA0" and nozzle_diameter[0]==0.4 + +[print:0.30mm DRAFT @MEGA0] +inherits = *0.30mm_mega0* +travel_speed = 120 +infill_speed = 50 +solid_infill_speed = 40 +top_solid_infill_speed = 30 +support_material_extrusion_width = 0.38 +compatible_printers_condition = printer_model=="MEGA0" and nozzle_diameter[0]==0.4 + +# Common filament preset +[filament:*common_mega0*] +cooling = 0 +compatible_printers = +extrusion_multiplier = 1 +filament_cost = 0 +filament_density = 0 +filament_diameter = 1.75 +filament_notes = "" +filament_settings_id = "" +filament_soluble = 0 +min_print_speed = 15 +slowdown_below_layer_time = 20 +compatible_printers_condition = printer_model=="MEGA0" + +[filament:*PLA_mega0*] +inherits = *common_mega0* +bed_temperature = 40 +fan_below_layer_time = 100 +filament_colour = #FF3232 +filament_max_volumetric_speed = 15 +filament_type = PLA +filament_density = 1.24 +filament_cost = 20 +first_layer_bed_temperature = 40 +first_layer_temperature = 215 +fan_always_on = 1 +cooling = 1 +max_fan_speed = 100 +min_fan_speed = 100 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +temperature = 210 + +[filament:*PET_mega0*] +inherits = *common_mega0* +bed_temperature = 70 +cooling = 1 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #FF8000 +filament_max_volumetric_speed = 8 +filament_type = PETG +filament_density = 1.27 +filament_cost = 30 +first_layer_bed_temperature =70 +first_layer_temperature = 240 +fan_always_on = 1 +max_fan_speed = 50 +min_fan_speed = 20 +bridge_fan_speed = 100 +temperature = 240 + +[filament:*ABS_mega0*] +inherits = *common_mega0* +bed_temperature = 100 +cooling = 0 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #3A80CA +filament_max_volumetric_speed = 11 +filament_type = ABS +filament_density = 1.04 +filament_cost = 20 +first_layer_bed_temperature = 100 +first_layer_temperature = 245 +fan_always_on = 0 +max_fan_speed = 0 +min_fan_speed = 0 +bridge_fan_speed = 30 +top_fan_speed = 0 +temperature = 245 + +[filament:Generic PLA @MEGA0] +inherits = *PLA_mega0* +filament_vendor = Generic + +[filament:Generic PETG @MEGA0] +inherits = *PET_mega0* +filament_vendor = Generic + +[filament:Generic ABS @MEGA0] +inherits = *ABS_mega0* +filament_vendor = Generic + +[filament:Anycubic PLA @MEGA0] +inherits = *PLA_mega0* +filament_vendor = Anycubic +temperature = 190 +first_layer_temperature = 195 +filament_cost = 24.99 +filament_density = 1.25 + +[filament:Prusament PLA @MEGA0] +inherits = *PLA_mega0* +filament_vendor = Prusa Polymers +temperature = 215 +bed_temperature = 40 +first_layer_temperature = 215 +filament_cost = 24.99 +filament_density = 1.24 + +[filament:Prusament PETG @MEGA0] +inherits = *PET_mega0* +filament_vendor = Prusa Polymers +temperature = 245 +bed_temperature = 70 +first_layer_temperature = 245 +filament_cost = 24.99 +filament_density = 1.27 + +# Common printer preset +[printer:*common_mega0*] +printer_technology = FFF +bed_shape = 0x0,220x0,220x220,0x220 +before_layer_gcode = ; BEFORE_LAYER_CHANGE [layer_num] @ [layer_z]mm\nG92 E0 +between_objects_gcode = +deretract_speed = 0 +extruder_colour = #FFFF00 +extruder_offset = 0x0 +gcode_flavor = marlin +silent_mode = 0 +remaining_times = 0 +machine_max_acceleration_e = 10000 +machine_max_acceleration_extruding = 2000 +machine_max_acceleration_retracting = 1500 +machine_max_acceleration_x = 3000 +machine_max_acceleration_y = 3000 +machine_max_acceleration_z = 500 +machine_max_feedrate_e = 120 +machine_max_feedrate_x = 500 +machine_max_feedrate_y = 500 +machine_max_feedrate_z = 12 +machine_max_jerk_e = 2.5 +machine_max_jerk_x = 20 +machine_max_jerk_y = 20 +machine_max_jerk_z = 0.4 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +layer_gcode = ; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm +max_layer_height = 0.3 +min_layer_height = 0.1 +max_print_height = 200 +nozzle_diameter = 0.4 +printer_notes = +printer_settings_id = +retract_before_travel = 1 +retract_before_wipe = 0% +retract_layer_change = 1 +retract_length = 6 +retract_length_toolchange = 1 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 30 +single_extruder_multi_material = 0 +start_gcode = G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM117 Homing X/Y ...\nG28 X0 Y0 ;move X/Y to min endstops\nM117 Homing Z ...\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F240 ;move the platform down 15mm\nM117 Heating ...\nM104 S[first_layer_temperature]\n ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature]\n ; wait for extruder temp\nM117 Start cleaning ...\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nM117 Intro line ...\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z[first_layer_height] F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z[first_layer_height] F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z[first_layer_height] F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3[first_layer_height] F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 E-1 F500 ; Retract filiment by 1 mm\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F240 ; Move over to prevent blob squish\nG92 E0 ; Reset Extruder\nM117 Printing...\n +end_gcode = M117 Cooling down...\nM104 S0 ; turn off extruder\nM140 S0 ; turn off heatbed\nM107 ; Fan off\nM84 ; disable motors\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 ;X-20 Y-20 F240 ;move Z up a bit and retract filament even more\nG28 X0 ;move X to min endstops, so the head is out of the way\nG90 ;Absolute positionning\nG1 Y200 F3000 ;Present print\nM84 ;steppers off\nM300 P300 S4000\nM117 Finished.\n +toolchange_gcode = +use_firmware_retraction = 0 +use_relative_e_distances = 1 +use_volumetric_e = 0 +variable_layer_height = 1 +wipe = 1 +z_offset = 0 +printer_model = +default_print_profile = +default_filament_profile = + +[printer:Anycubic Mega Zero] +inherits = *common_mega0* +printer_model = MEGA0 +printer_variant = 0.4 +max_layer_height = 0.3 +min_layer_height = 0.1 +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_MEGA0 +bed_shape = 0x0,220x0,220x220,0x220 +max_print_height = 250 +machine_max_acceleration_e = 5000 +machine_max_acceleration_extruding = 500 +machine_max_acceleration_retracting = 500 +machine_max_acceleration_x = 500 +machine_max_acceleration_y = 500 +machine_max_acceleration_z = 100 +machine_max_feedrate_e = 25 +machine_max_feedrate_x = 500 +machine_max_feedrate_y = 500 +machine_max_feedrate_z = 5 +machine_max_jerk_e = 5 +machine_max_jerk_x = 10 +machine_max_jerk_y = 10 +machine_max_jerk_z = 0.4 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +nozzle_diameter = 0.4 +retract_before_travel = 2 +retract_layer_change = 0 +retract_length = 7 +retract_speed = 30 +retract_lift = 0.2 +deretract_speed = 30 +retract_before_wipe = 70% +default_print_profile = 0.20mm NORMAL @MEGA0 +default_filament_profile = Anycubic PLA @MEGA0 +start_gcode = G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM117 Homing X/Y ...\nG28 X0 Y0 ;move X/Y to min endstops\nM117 Homing Z ...\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F240 ;move the platform down 15mm\nM117 Heating ...\nM104 S[first_layer_temperature]\n ; set extruder temp\nM109 S[first_layer_temperature]\n ; wait for extruder temp\nM117 Start cleaning ...\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nM117 Intro line ...\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z[first_layer_height] F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z[first_layer_height] F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z[first_layer_height] F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3[first_layer_height] F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 E-1 F500 ; Retract filiment by 1 mm\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F240 ; Move over to prevent blob squish\nG92 E0 ; Reset Extruder\nM117 Printing...\n +end_gcode = M117 Cooling down...\nM104 S0 ; turn off extruder\nM107 ; Fan off\nM84 ; disable motors\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 ;X-20 Y-20 F240 ;move Z up a bit and retract filament even more\nG28 X0 ;move X to min endstops, so the head is out of the way\nG90 ;Absolute positionning\nG1 Y200 F3000 ;Present print\nM84 ;steppers off\nM300 P300 S4000\nM117 Finished.\n + +## Anycubic i3 Mega and i3 Mega S +## Author: https://github.com/Igami +## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4619 + +[print:*common_mega*] +bottom_solid_min_thickness = 0.5 +bridge_acceleration = 1000 +bridge_flow_ratio = 0.95 +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ and nozzle_diameter[0]==0.4 +default_acceleration = 1000 +ensure_vertical_shell_thickness = 1 +external_perimeter_extrusion_width = 0.45 +external_perimeter_speed = 40 +extruder_clearance_height = 35 +extruder_clearance_radius = 60 +extrusion_width = 0.45 +fill_density = 15% +fill_pattern = gyroid +first_layer_acceleration = 800 +first_layer_extrusion_width = 0.42 +first_layer_height = 0.2 +first_layer_speed = 20 +gap_fill_speed = 40 +gcode_comments = 0 +gcode_label_objects = 1 +infill_acceleration = 1000 +infill_anchor = 2.5 +infill_anchor_max = 12 +infill_extrusion_width = 0.45 +max_print_speed = 100 +min_skirt_length = 4 +only_retract_when_crossing_perimeters = 0 +output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode +perimeter_acceleration = 800 +perimeter_extrusion_width = 0.45 +perimeter_speed = 50 +perimeters = 2 +seam_position = nearest +skirt_distance = 2 +skirt_height = 3 +skirts = 1 +small_perimeter_speed = 25 +solid_infill_below_area = 0 +solid_infill_extrusion_width = 0.45 +solid_infill_speed = 50 +support_material = 0 +support_material_buildplate_only = 0 +support_material_contact_distance = 0.1 +support_material_extrusion_width = 0.35 +support_material_interface_layers = 2 +support_material_interface_spacing = 0.2 +support_material_interface_speed = 80% +support_material_spacing = 2 +support_material_speed = 50 +support_material_threshold = 50 +support_material_xy_spacing = 60% +thin_walls = 0 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +top_solid_min_thickness = 0.7 +travel_speed = 180 + +# XXXXXXXXXXXXXXXXXXXX +# XXX--- 0.15mm ---XXX +# XXXXXXXXXXXXXXXXXXXX + +[print:*0.15mm_mega*] +inherits = *common_mega* +bottom_solid_layers = 5 +bridge_flow_ratio = 1 +infill_speed = 60 +layer_height = 0.15 +top_solid_layers = 7 + +[print:0.15mm QUALITY @MEGA] +inherits = *0.15mm_mega* + +# XXXXXXXXXXXXXXXXXXXX +# XXX--- 0.20mm ---XXX +# XXXXXXXXXXXXXXXXXXXX + +[print:*0.20mm_mega*] +inherits = *common_mega* +bottom_solid_layers = 4 +infill_speed = 60 +layer_height = 0.2 +top_solid_layers = 5 + +[print:0.20mm QUALITY @MEGA] +inherits = *0.20mm_mega* + +# XXXXXXXXXXXXXXXXXXXX +# XXX--- 0.30mm ---XXX +# XXXXXXXXXXXXXXXXXXXX + +[print:*0.30mm_mega*] +inherits = *common_mega* +bottom_solid_layers = 4 +external_perimeter_extrusion_width = 0.6 +external_perimeter_speed = 35 +extrusion_width = 0.5 +fill_pattern = cubic +infill_extrusion_width = 0.5 +infill_speed = 85 +layer_height = 0.3 +perimeter_extrusion_width = 0.5 +small_perimeter_speed = 30 +solid_infill_extrusion_width = 0.5 +support_material_extrusion_width = 0.38 +support_material_speed = 45 +top_solid_layers = 4 + +[print:0.30mm DRAFT @MEGA] +inherits = *0.30mm_mega* + +# XXXXXXXXXXXXXXXXXXXXXX +# XXX--- filament ---XXX +# XXXXXXXXXXXXXXXXXXXXXX + +[filament:*common_mega*] +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ +end_filament_gcode = "; Filament-specific end gcode" +fan_always_on = 1 +fan_below_layer_time = 100 +filament_vendor = Generic +min_print_speed = 15 +slowdown_below_layer_time = 20 + +[filament:*ABS_mega*] + inherits = *common_mega* + bed_temperature = 110 + bridge_fan_speed = 25 + cooling = 0 + fan_always_on = 0 + fan_below_layer_time = 20 + filament_colour = #3A80CA + filament_cost = 27.82 + filament_density = 1.04 + filament_max_volumetric_speed = 11 + filament_ramming_parameters = "120 100 5.70968 6.03226 7 8.25806 9 9.19355 9.3871 9.77419 10.129 10.3226 10.4516 10.5161| 0.05 5.69677 0.45 6.15484 0.95 8.76774 1.45 9.20323 1.95 9.95806 2.45 10.3871 2.95 10.5677 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + filament_type = ABS + first_layer_bed_temperature = 105 + first_layer_temperature = 255 + max_fan_speed = 30 + min_fan_speed = 20 + temperature = 255 + +[filament:Generic ABS @MEGA] +inherits = *ABS_mega* + +[filament:*FLEX_mega*] +inherits = *common_mega* +bed_temperature = 50 +bridge_fan_speed = 80 +cooling = 0 +extrusion_multiplier = 1.15 +fan_always_on = 0 +filament_colour = #008000 +filament_cost = 82.00 +filament_density = 1.22 +filament_deretract_speed = 25 +filament_max_volumetric_speed = 1.2 +filament_retract_length = 0.8 +filament_type = FLEX +first_layer_bed_temperature = 55 +first_layer_temperature = 240 +max_fan_speed = 90 +min_fan_speed = 70 +temperature = 240 + +[filament:Generic FLEX @MEGA] +inherits = *FLEX_mega* + +[filament:SainSmart TPU @MEGA] +inherits = *FLEX_mega* +filament_vendor = SainSmart +bed_temperature = 50 +bridge_fan_speed = 100 +cooling = 1 +disable_fan_first_layers = 4 +filament_cost = 39.99 +filament_density = 1.21 +filament_deretract_speed = 15 +filament_max_volumetric_speed = 1.8 +filament_notes = "SainSmart TPU gains popularity among 3D Printing community for its balance of rigidity and flexibility. In addition, with a 95A Shore Hardness and improved bed adhesion, it is easier to print even with a stock elementary 3D Printer like the Creality Ender 3. SainSmart TPU will not disappoint if you are looking for flexible filament. From drone parts, phone cases, to small toys, all can be printed with ease.\n\nhttps://www.sainsmart.com/collections/tpu-filament/products/all-colors-tpu-flexible-filament-1-75mm-0-8kg-1-76lb" +filament_retract_before_travel = 5 +filament_retract_length = 4 +filament_retract_speed = 40 +filament_unloading_speed = 90 +first_layer_bed_temperature = 55 +first_layer_temperature = 235 +full_fan_speed_layer = 6 +max_fan_speed = 80 +min_fan_speed = 80 +slowdown_below_layer_time = 10 +temperature = 235 + +[filament:*PETG_mega*] +inherits = *common_mega* +bed_temperature = 90 +bridge_fan_speed = 50 +fan_below_layer_time = 20 +filament_colour = #FF8000 +filament_cost = 27.82 +filament_density = 1.27 +filament_max_volumetric_speed = 8 +filament_type = PETG +first_layer_bed_temperature = 90 +first_layer_temperature = 230 +max_fan_speed = 50 +min_fan_speed = 30 +temperature = 240 + +[filament:Generic PETG @MEGA] +inherits = *PETG_mega* + +[filament:ColorFabb XT-CF20 @MEGA] +inherits = *PETG_mega* +compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ +extrusion_multiplier = 1.05 +filament_colour = #804040 +filament_cost = 66.60 +filament_density = 1.35 +filament_deretract_speed = 25 +filament_max_volumetric_speed = 2 +filament_notes = "Based on colorFabb_XT, XT-CF20 is a carbon fiber composite material. Loaded with no less than 20% specially sourced carbon fibers we have developed a very stiff and tough 3D printing filament made for functional parts. It is truly a professional printers go-to material, especially for users looking for high melt strength, high melt viscosity and good dimensional accuracy and stability.\n\nhttps://colorfabb.com/xt-cf20" +filament_retract_before_travel = 1 +filament_retract_length = 1.4 +filament_retract_speed = 40 +filament_spool_weight = 236 +filament_vendor = ColorFabb +first_layer_temperature = 260 +full_fan_speed_layer = 5 +slowdown_below_layer_time = 15 +temperature = 260 + +[filament:ERYONE PETG @MEGA] +inherits = *PETG_mega* +filament_vendor = ERYONE +filament_cost = 20.99 +filament_notes = "https://eryone.com/petg/show/10.html" + +[filament:FormFutura HDglass @MEGA] +inherits = *PETG_mega* +filament_vendor = FormFutura +filament_cost = 46.65 +filament_notes = "HDglass is a high performance PETG type of 3D printer with unsurpassed 3D printing properties and improved mechanical strength, flexibility, toughness and heat resistance.\n\nhttps://www.formfutura.com/shop/product/hdglass-2812" + +[filament:FormFutura ReForm rPET @MEGA] +inherits = *PETG_mega* +filament_vendor = FormFutura +filament_cost = 26.65 +filament_notes = "ReForm rPET is a recycled PETG type of 3D printer filament that is made from post-industrial waste streams of a nearby located plastic bottle manufacturer.\n\nhttps://www.formfutura.com/shop/product/reform-rpet-2836" +filament_spool_weight = 176 + +[filament:Janbex transparent PETG @MEGA] +inherits = *PETG_mega* +filament_vendor = Janbex +filament_cost = 31.99 +filament_spool_weight = 222 +first_layer_temperature = 215 +min_fan_speed = 100 +temperature = 210 + +[filament:DAS FILAMENT PETG @MEGA] +inherits = *PETG_mega* +filament_vendor = DAS FILAMENT +bed_temperature = 75 +first_layer_bed_temperature = 75 +first_layer_temperature = 220 +temperature = 225 + +[filament:*PLA_mega*] +inherits = *common_mega* +bed_temperature = 60 +disable_fan_first_layers = 1 +filament_colour = #FF3232 +filament_cost = 25.40 +filament_density = 1.24 +filament_max_volumetric_speed = 10 +first_layer_bed_temperature = 65 +first_layer_temperature = 215 +min_fan_speed = 100 +temperature = 210 + +[filament:Generic PLA @MEGA] +inherits = *PLA_mega* + +[filament:3Dmensionals PLA @MEGA] +inherits = *PLA_mega* +filament_vendor = 3Dmensionals +filament_cost = 22.90 +filament_notes = "Das 3DFilaments - PLA von 3Dmensionals ist ein sehr leicht zu druckendes 3D-Drucker Filament. Dabei handelt es sich um ein etwas härteres PLA mit einer exzellenten thermischen Stabilität. Das Filament zeichnet sich vor allem durch verzugfreies 3D-Drucken aus und weist minimale bis keine Verformung nach dem Abkühlen auf. Daher ist es besonders gut für den Druck größerer Objekte geeignet. Zudem bietet 3DFilaments - PLA über die gesamte Fadenläge eine hervorragende Durchmesser- und Rundheitstoleranz.\n\nhttps://www.3dmensionals.de/3dfilaments?number=PSU3DM001V" + +[filament:3D Warhorse PLA @MEGA] +inherits = *PLA_mega* +filament_vendor = 3D Warhorse +filament_cost = 19.99 + +[filament:AMOLEN wood PLA] +inherits = *PLA_mega* +filament_vendor = AMOLEN +compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ +extrusion_multiplier = 1.1 +filament_colour = #DFC287 +filament_cost = 33.99 +filament_density = 1.23 +filament_max_volumetric_speed = 9 +filament_notes = "https://amolen.com/collections/wood/products/amolen-pla-filament-1-75mm-wood-color-3d-printer-filament-1kg2-2lb" + +[filament:FormFutura EasyFil PLA @MEGA] +inherits = *PLA_mega* +filament_vendor = FormFutura +filament_cost = 39.93 +filament_notes = "EasyFil PLA is an easy to print PLA type of 3D printer filament that is available in a wide variety of colors. Its improved flowing behavior make 3D printed layers flow more into each other.\n\nhttps://www.formfutura.com/shop/product/easyfil-pla-2801" + +[filament:FormFutura ReForm rPLA @MEGA] +inherits = *PLA_mega* +filament_vendor = FormFutura +filament_cost = 26.65 +filament_notes = "ReForm is a sustainable initiative within Formfutura to efficiently manage residual extrusion waste streams and re-use them into high-end upcycled filaments. The ideology behind ReForm is to a make 3D printing more sustainable – without having to make compromises on material properties – and yet keep it affordable.\n\nhttps://www.formfutura.com/shop/product/reform-rpla-2838" + +[filament:GIANTARM PLA @MEGA] +inherits = *PLA_mega* +filament_vendor = GIANTARM +filament_cost = 24.99 + +[filament:Prusament PLA @MEGA] +inherits = *PLA_mega* +filament_vendor = Prusa Polymers +filament_cost = 30.24 +filament_notes = "Affordable filament for everyday printing in premium quality manufactured in-house by Josef Prusa" +filament_spool_weight = 201 +temperature = 215 + +[filament:Verbatim PLA @MEGA] +inherits = *PLA_mega* +filament_vendor = Verbatim +filament_cost = 23.88 + +[printer:*common_mega*] +printer_technology = FFF +bed_shape = 0x0,210x0,210x210,0x210 +before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z] +default_filament_profile = Generic PLA @MEGA +default_print_profile = 0.15mm QUALITY @MEGA +deretract_speed = 50 +end_gcode = G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < max_print_height} Z{z_offset+min(max_layer_z+30, max_print_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors +extruder_colour = #808080 +gcode_flavor = marlin +layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] +max_layer_height = 0.36 +max_print_height = 205 +remaining_times = 1 +retract_before_travel = 1.5 +retract_before_wipe = 60% +retract_layer_change = 1 +retract_length = 6 +retract_lift = 0.075 +retract_lift_below = 204 +retract_speed = 40 +silent_mode = 0 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0 +thumbnails = 16x16,220x124 +use_relative_e_distances = 1 +wipe = 1 +machine_max_acceleration_e = 10000 +machine_max_acceleration_extruding = 1250 +machine_max_acceleration_retracting = 1250 +machine_max_acceleration_x = 3000 +machine_max_acceleration_y = 2000 +machine_max_acceleration_z = 60 +machine_max_feedrate_e = 60 +machine_max_feedrate_x = 500 +machine_max_feedrate_y = 500 +machine_max_feedrate_z = 6 +machine_max_jerk_e = 5 +machine_max_jerk_x = 10 +machine_max_jerk_y = 10 +machine_max_jerk_z = 0.4 + +[printer:Anycubic i3 Mega] +inherits = *common_mega* +printer_model = I3MEGA +printer_variant = 0.4 +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_I3_MEGA\nPRINTER_HAS_BOWDEN + +[printer:Anycubic i3 Mega S] +inherits = *common_mega* +printer_model = I3MEGAS +printer_variant = 0.4 +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_I3_MEGA_S\nPRINTER_HAS_BOWDEN +machine_max_feedrate_e = 30 +machine_max_feedrate_z = 8 + + +## Anycubic PREDATOR +## Author: https://github.com/tillverka3d +## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4960 + +######################################### +###### begin common print presets ####### +######################################### + +# Common print preset +[print:*common predator*] +spiral_vase = 0 +top_solid_min_thickness = 0.8 +bottom_solid_min_thickness = 0.6 +extra_perimeters = 0 +ensure_vertical_shell_thickness = 1 +avoid_crossing_perimeters = 0 +thin_walls = 0 +overhangs = 1 +seam_position = nearest +external_perimeters_first = 0 +fill_density = 20% +external_fill_pattern = rectilinear +infill_every_layers = 1 +infill_only_where_needed = 0 +solid_infill_every_layers = 0 +fill_angle = 45 +solid_infill_below_area = 20 +bridge_angle = 0 +only_retract_when_crossing_perimeters = 0 +infill_first = 0 +skirts = 1 +skirt_distance = 4 +skirt_height = 1 +min_skirt_length = 8 +brim_width = 0 +support_material = 0 +support_material_auto = 1 +support_material_threshold = 50 +support_material_enforce_layers = 0 +raft_layers = 0 +support_material_contact_distance = 0.1 +support_material_pattern = rectilinear +support_material_with_sheath = 0 +support_material_spacing = 2 +support_material_angle = 0 +support_material_interface_layers = 2 +support_material_interface_spacing = 0.2 +support_material_interface_contact_loops = 0 +support_material_buildplate_only = 0 +support_material_xy_spacing = 60% +dont_support_bridges = 1 +support_material_synchronize_layers = 0 +travel_speed = 94 +first_layer_speed = 15 +perimeter_acceleration = 0 +infill_acceleration = 0 +bridge_acceleration = 0 +first_layer_acceleration = 0 +default_acceleration = 0 +max_volumetric_speed = 15 +perimeter_extruder = 1 +infill_extruder = 1 +solid_infill_extruder = 1 +support_material_extruder = 0 +support_material_interface_extruder = 0 +ooze_prevention = 0 +standby_temperature_delta = -5 +wipe_tower = 0 +wipe_tower_x = 170 +wipe_tower_y = 140 +wipe_tower_width = 60 +wipe_tower_rotation_angle = 0 +wipe_tower_bridging = 10 +interface_shells = 0 +bridge_flow_ratio = 0.8 +resolution = 0 +xy_size_compensation = 0 +elefant_foot_compensation = 0.2 +clip_multipart_objects = 1 +complete_objects = 0 +extruder_clearance_radius = 45 +extruder_clearance_height = 25 +gcode_comments = 0 +output_filename_format = {input_filename_base}.gcode +post_process = +notes = +max_volumetric_extrusion_rate_slope_negative = 0 +max_volumetric_extrusion_rate_slope_positive = 0 +print_settings_id = + +# Common print preset +[print:*common predator 0.4 nozzle*] +inherits = *common predator* +first_layer_height = 0.16 +infill_overlap = 25% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ and printer_notes=~/.*PRINTER_HAS_BOWDEN.*/ and nozzle_diameter[0]==0.4 + +# Common print preset +[print:*common predator 0.6 nozzle*] +inherits = *common predator* +first_layer_height = 0.24 +infill_overlap = 27% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ and printer_notes=~/.*PRINTER_HAS_BOWDEN.*/ and nozzle_diameter[0]==0.6 + +# Common print preset +[print:*common predator 0.8 nozzle*] +inherits = *common predator* +first_layer_height = 0.32 +infill_overlap = 30% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ and printer_notes=~/.*PRINTER_HAS_BOWDEN.*/ and nozzle_diameter[0]==0.8 + +# Common print preset +[print:*common predator quality*] +perimeter_speed = 50 +small_perimeter_speed = 15 +external_perimeter_speed = 70% +infill_speed = 65 +solid_infill_speed = 85% +top_solid_infill_speed = 85% +support_material_speed = 30 +support_material_interface_speed = 85% +bridge_speed = 30 +gap_fill_speed = 40 +ironing_speed = 15 + +# Common print preset +[print:*common predator speed*] +perimeter_speed = 70 +small_perimeter_speed = 15 +external_perimeter_speed = 70% +infill_speed = 85 +solid_infill_speed = 85% +top_solid_infill_speed = 85% +support_material_speed = 30 +support_material_interface_speed = 85% +bridge_speed = 30 +gap_fill_speed = 40 +ironing_speed = 15 + +# Common print preset +[print:*common predator 0.4 nozzle detailed*] +inherits = *common predator 0.4 nozzle* +extrusion_width = 0.42 +first_layer_extrusion_width = 0.41 +perimeter_extrusion_width = 0.42 +external_perimeter_extrusion_width = 0.42 +infill_extrusion_width = 0.4 +solid_infill_extrusion_width = 0.4 +top_infill_extrusion_width = 0.4 +support_material_extrusion_width = 0.38 + +# Common print preset +[print:*common predator 0.4 nozzle coarse*] +inherits = *common predator 0.4 nozzle* +extrusion_width = 0.44 +first_layer_extrusion_width = 0.42 +perimeter_extrusion_width = 0.5 +external_perimeter_extrusion_width = 0.5 +infill_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.4 +support_material_extrusion_width = 0.38 + +# Common print preset +[print:*common predator 0.6 nozzle detailed*] +inherits = *common predator 0.6 nozzle* +extrusion_width = 0.64 +first_layer_extrusion_width = 0.62 +perimeter_extrusion_width = 0.64 +external_perimeter_extrusion_width = 0.64 +infill_extrusion_width = 0.6 +solid_infill_extrusion_width = 0.6 +top_infill_extrusion_width = 0.6 +support_material_extrusion_width = 0.56 + +# Common print preset +[print:*common predator 0.6 nozzle coarse*] +inherits = *common predator 0.6 nozzle* +extrusion_width = 0.67 +first_layer_extrusion_width = 0.64 +perimeter_extrusion_width = 0.7 +external_perimeter_extrusion_width = 0.7 +infill_extrusion_width = 0.7 +solid_infill_extrusion_width = 0.7 +top_infill_extrusion_width = 0.6 +support_material_extrusion_width = 0.56 + +# Common print preset +[print:*common predator 0.8 nozzle detailed*] +inherits = *common predator 0.8 nozzle* +extrusion_width = 0.84 +first_layer_extrusion_width = 0.82 +perimeter_extrusion_width = 0.84 +external_perimeter_extrusion_width = 0.84 +infill_extrusion_width = 0.8 +solid_infill_extrusion_width = 0.8 +top_infill_extrusion_width = 0.8 +support_material_extrusion_width = 0.72 + +# Common print preset +[print:*common predator 0.8 nozzle coarse*] +inherits = *common predator 0.8 nozzle* +extrusion_width = 0.87 +first_layer_extrusion_width = 0.84 +perimeter_extrusion_width = 0.9 +external_perimeter_extrusion_width = 0.9 +infill_extrusion_width = 0.9 +solid_infill_extrusion_width = 0.9 +top_infill_extrusion_width = 0.8 +support_material_extrusion_width = 0.72 + +######################################### +####### end common print presets ######## +######################################### + +######################################### +########## begin print presets ########## +######################################### + +[print:0.08mm 0.4 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle detailed*; *common predator quality* +layer_height = 0.08 +max_print_speed = 50 +perimeters = 3 +fill_pattern = grid + +[print:0.16mm 0.4 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle detailed*; *common predator quality* +layer_height = 0.16 +max_print_speed = 60 +perimeters = 3 +fill_pattern = grid + +[print:0.16mm 0.4 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle coarse*; *common predator quality* +layer_height = 0.16 +max_print_speed = 60 +perimeters = 3 +fill_pattern = grid + +[print:0.24mm 0.4 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle detailed*; *common predator quality* +layer_height = 0.24 +max_print_speed = 70 +perimeters = 3 +fill_pattern = grid + +[print:0.24mm 0.4 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle coarse*; *common predator quality* +layer_height = 0.24 +max_print_speed = 70 +perimeters = 3 +fill_pattern = grid + +[print:0.32mm 0.4 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle detailed*; *common predator quality* +layer_height = 0.32 +max_print_speed = 70 +perimeters = 3 +fill_pattern = grid + +[print:0.32mm 0.4 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle coarse*; *common predator quality* +layer_height = 0.32 +max_print_speed = 70 +perimeters = 3 +fill_pattern = grid + +[print:0.16mm 0.6 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator quality* +layer_height = 0.16 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.16mm 0.6 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator speed* +layer_height = 0.16 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.16mm 0.6 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator quality* +layer_height = 0.16 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.16mm 0.6 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator speed* +layer_height = 0.16 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.6 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator quality* +layer_height = 0.24 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.6 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator speed* +layer_height = 0.24 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.6 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator quality* +layer_height = 0.24 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.6 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator speed* +layer_height = 0.24 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.6 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator quality* +layer_height = 0.32 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.6 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator speed* +layer_height = 0.32 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.6 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator quality* +layer_height = 0.32 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.6 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator speed* +layer_height = 0.32 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.6 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator quality* +layer_height = 0.4 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.6 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator speed* +layer_height = 0.4 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.6 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator quality* +layer_height = 0.4 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.6 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator speed* +layer_height = 0.4 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.8 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator quality* +layer_height = 0.24 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.8 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator speed* +layer_height = 0.24 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.8 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator quality* +layer_height = 0.24 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.8 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator speed* +layer_height = 0.24 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.8 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator quality* +layer_height = 0.32 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.8 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator speed* +layer_height = 0.32 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.8 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator quality* +layer_height = 0.32 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.8 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator speed* +layer_height = 0.32 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.8 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator quality* +layer_height = 0.4 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.8 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator speed* +layer_height = 0.4 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.8 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator quality* +layer_height = 0.4 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.8 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator speed* +layer_height = 0.4 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.48mm 0.8 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator quality* +layer_height = 0.48 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.48mm 0.8 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator speed* +layer_height = 0.48 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.48mm 0.8 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator quality* +layer_height = 0.48 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.48mm 0.8 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator speed* +layer_height = 0.48 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +######################################### +########### end print presets ########### +######################################### + +######################################### +######## begin filament presets ######### +######################################### + +# Common filament preset +[filament:*common predator*] +cooling = 0 +compatible_printers = +extrusion_multiplier = 1 +filament_cost = 0 +filament_density = 0 +filament_diameter = 1.75 +filament_notes = "" +filament_settings_id = "" +filament_soluble = 0 +min_print_speed = 15 +slowdown_below_layer_time = 20 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ + +[filament:*PLA predator*] +inherits = *common predator* +bed_temperature = 60 +fan_below_layer_time = 100 +filament_colour = #FF3232 +filament_max_volumetric_speed = 10 +filament_type = PLA +filament_density = 1.24 +filament_cost = 20 +first_layer_bed_temperature = 60 +first_layer_temperature = 200 +fan_always_on = 1 +cooling = 1 +max_fan_speed = 100 +min_fan_speed = 100 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +temperature = 200 + +[filament:*PET predator*] +inherits = *common predator* +bed_temperature = 70 +cooling = 1 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #FF8000 +filament_max_volumetric_speed = 8 +filament_type = PETG +filament_density = 1.27 +filament_cost = 30 +first_layer_bed_temperature =70 +first_layer_temperature = 240 +fan_always_on = 1 +max_fan_speed = 50 +min_fan_speed = 20 +bridge_fan_speed = 100 +temperature = 240 + +[filament:*ABS predator*] +inherits = *common predator* +bed_temperature = 100 +cooling = 0 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #3A80CA +filament_max_volumetric_speed = 10 +filament_type = ABS +filament_density = 1.04 +filament_cost = 20 +first_layer_bed_temperature = 100 +first_layer_temperature = 245 +fan_always_on = 0 +max_fan_speed = 0 +min_fan_speed = 0 +bridge_fan_speed = 30 +top_fan_speed = 0 +temperature = 245 + +[filament:Generic PLA @PREDATOR] +inherits = *PLA predator* +filament_vendor = Generic + +[filament:Generic PETG @PREDATOR] +inherits = *PET predator* +filament_vendor = Generic + +[filament:Generic ABS @PREDATOR] +inherits = *ABS predator* +filament_vendor = Generic + +######################################### +######### end filament presets ########## +######################################### + +######################################### +######### begin printer presets ######### +######################################### + +# Anycubic predator common printer preset +[printer:*common predator*] +printer_vendor = Anycubic +printer_model = Predator +printer_technology = FFF +printer_variant = 0.4 +thumbnails = 16x16,220x124 +bed_shape = 188.779x16.516,186.621x32.9063,183.043x49.0462,178.072x64.8128,171.745x80.0862,164.112x94.75,155.229x108.693,145.165x121.808,133.997x133.997,121.808x145.165,108.693x155.229,94.75x164.112,80.0862x171.745,64.8128x178.072,49.0462x183.043,32.9063x186.621,16.516x188.779,1.16035e-14x189.5,-16.516x188.779,-32.9063x186.621,-49.0462x183.043,-64.8128x178.072,-80.0862x171.745,-94.75x164.112,-108.693x155.229,-121.808x145.165,-133.997x133.997,-145.165x121.808,-155.229x108.693,-164.112x94.75,-171.745x80.0862,-178.072x64.8128,-183.043x49.0462,-186.621x32.9063,-188.779x16.516,-189.5x2.32071e-14,-188.779x-16.516,-186.621x-32.9063,-183.043x-49.0462,-178.072x-64.8128,-171.745x-80.0862,-164.112x-94.75,-155.229x-108.693,-145.165x-121.808,-133.997x-133.997,-121.808x-145.165,-108.693x-155.229,-94.75x-164.112,-80.0862x-171.745,-64.8128x-178.072,-49.0462x-183.043,-32.9063x-186.621,-16.516x-188.779,-3.48106e-14x-189.5,16.516x-188.779,32.9063x-186.621,49.0462x-183.043,64.8128x-178.072,80.0862x-171.745,94.75x-164.112,108.693x-155.229,121.808x-145.165,133.997x-133.997,145.165x-121.808,155.229x-108.693,164.112x-94.75,171.745x-80.0862,178.072x-64.8128,183.043x-49.0462,186.621x-32.9063,188.779x-16.516,189.5x-4.64141e-14 +max_print_height = 445 +z_offset = 0 +single_extruder_multi_material = 0 +gcode_flavor = reprap +silent_mode = 0 +remaining_times = 0 +use_relative_e_distances = 0 +use_firmware_retraction = 0 +use_volumetric_e = 0 +variable_layer_height = 1 +start_gcode = ; start_gcode | start\n\n; v11 2020-11-14_11-27 tillverka\n\n; set metric values\n\nG21\n\n; use absolute positioning\n\nG90\n\n; set extruder to absolute mode\n\nM82\n\n; start with fan off\n\nM107\n\n; set temps\n\nM104 S[first_layer_temperature]\nM140 S[first_layer_bed_temperature]\n\n; home xy\n\nG28 X0 Y0\n\n; home z\n\nG28 Z0\n\n; move the head down to Z 94mm\n\nG1 Z94.0 F2394\n\n; set and wait for temps\n\nM109 S[first_layer_temperature]\nM190 S[first_layer_bed_temperature]\n\n; zero the extruded length\n\nG92 E0\n\n; extrude 3mm of feed stock\n\nG1 F200 E3\n\n; zero the extruded length again\n\nG92 E0\n\n; set speed\n\nG1 F{travel_speed}\n\n; print preskirt\n\nG92 E0\nG1 E3.94000 F2520.00000\n\nG1 X125.464 Y-139.310\nG1 Z0.329 F3994.000\n\nG1 F994.000\n\nG1 X125.464 Y-139.310 E4.19679\nG1 X130.218 Y-134.876 E4.70359\nG1 X132.569 Y-132.567 E4.96053\nG1 X137.099 Y-127.877 E5.46890\nG1 X139.325 Y-125.447 E5.72585\nG1 X141.507 Y-122.981 E5.98254\nG1 X145.685 Y-118.002 E6.48934\nG1 X149.741 Y-112.810 E7.00296\nG1 X153.561 Y-107.552 E7.50975\nG1 X155.440 Y-104.819 E7.76827\nG1 X158.980 Y-99.367 E8.27506\nG1 X160.702 Y-96.558 E8.53201\nG1 X163.962 Y-90.911 E9.04038\nG1 X165.535 Y-88.015 E9.29732\nG1 X168.496 Y-82.205 E9.80570\nG1 X169.915 Y-79.231 E10.06264\nG1 X171.280 Y-76.235 E10.31934\nG1 X173.819 Y-70.251 E10.82613\nG1 X176.180 Y-64.101 E11.33975\nG1 X178.297 Y-57.955 E11.84654\nG1 X179.294 Y-54.793 E12.10507\nG1 X181.085 Y-48.544 E12.61186\nG1 X181.911 Y-45.354 E12.86880\nG1 X183.378 Y-39.001 E13.37718\nG1 X184.035 Y-35.771 E13.63412\nG1 X185.168 Y-29.350 E14.14250\nG1 X185.655 Y-26.091 E14.39944\nG1 X186.084 Y-22.826 E14.65614\nG1 X186.764 Y-16.362 E15.16293\nG1 X187.223 Y-9.790 E15.67655\nG1 X187.450 Y-3.294 E16.18334\nG1 X187.479 Y0.002 E16.44028\nG1 X187.450 Y3.294 E16.69698\nG1 X187.223 Y9.810 E17.20529\nG1 X187.021 Y13.100 E17.46229\nG1 X186.454 Y19.575 E17.96909\nG1 X186.079 Y22.870 E18.22761\nG1 X185.174 Y29.307 E18.73440\nG1 X184.031 Y35.794 E19.24802\nG1 X182.679 Y42.152 E19.75481\nG1 X181.910 Y45.357 E20.01176\nG1 X180.223 Y51.655 E20.52013\nG1 X179.287 Y54.815 E20.77708\nG1 X177.272 Y61.017 E21.28545\nG1 X176.172 Y64.123 E21.54239\nG1 X175.019 Y67.207 E21.79909\nG1 X172.584 Y73.234 E22.30588\nG1 X169.905 Y79.252 E22.81950\nG1 X167.055 Y85.094 E23.32629\nG1 X165.524 Y88.035 E23.58482\nG1 X162.373 Y93.721 E24.09161\nG1 X160.700 Y96.560 E24.34855\nG1 X157.245 Y102.090 E24.85693\nG1 X155.427 Y104.838 E25.11387\nG1 X151.687 Y110.180 E25.62225\nG1 X149.727 Y112.829 E25.87919\nG1 X147.722 Y115.441 E26.13588\nG1 X143.631 Y120.493 E26.64268\nG1 X139.310 Y125.464 E27.15629\nG1 X134.876 Y130.218 E27.66309\nG1 X132.567 Y132.569 E27.92003\nG1 X127.877 Y137.099 E28.42840\nG1 X125.447 Y139.325 E28.68535\nG1 X122.981 Y141.507 E28.94204\nG1 X118.002 Y145.685 E29.44883\nG1 X112.810 Y149.741 E29.96245\nG1 X107.552 Y153.561 E30.46924\nG1 X104.819 Y155.440 E30.72777\nG1 X99.367 Y158.980 E31.23456\nG1 X96.558 Y160.702 E31.49151\nG1 X90.911 Y163.962 E31.99988\nG1 X88.015 Y165.535 E32.25682\nG1 X82.205 Y168.496 E32.76520\nG1 X79.231 Y169.915 E33.02214\nG1 X76.235 Y171.280 E33.27884\nG1 X70.251 Y173.819 E33.78563\nG1 X64.101 Y176.180 E34.29925\nG1 X57.955 Y178.297 E34.80604\nG1 X54.793 Y179.294 E35.06457\nG1 X48.544 Y181.085 E35.57136\nG1 X45.354 Y181.911 E35.82830\nG1 X39.001 Y183.378 E36.33668\nG1 X35.771 Y184.035 E36.59362\nG1 X29.350 Y185.168 E37.10200\nG1 X26.091 Y185.655 E37.35894\nG1 X22.826 Y186.084 E37.61563\nG1 X16.362 Y186.764 E38.12242\nG1 X9.790 Y187.223 E38.63605\nG1 X3.294 Y187.450 E39.14283\nG1 X-0.002 Y187.479 E39.39978\nG1 X-3.294 Y187.450 E39.65648\nG1 X-9.810 Y187.223 E40.16479\nG1 X-13.100 Y187.021 E40.42179\nG1 X-19.575 Y186.454 E40.92858\nG1 X-22.870 Y186.079 E41.18711\nG1 X-29.307 Y185.174 E41.69390\nG1 X-35.794 Y184.031 E42.20752\nG1 X-42.152 Y182.679 E42.71431\nG1 X-45.357 Y181.910 E42.97126\nG1 X-51.655 Y180.223 E43.47963\nG1 X-54.815 Y179.287 E43.73657\nG1 X-61.017 Y177.272 E44.24495\nG1 X-64.123 Y176.172 E44.50189\nG1 X-67.207 Y175.019 E44.75859\nG1 X-73.234 Y172.584 E45.26538\nG1 X-79.252 Y169.905 E45.77900\nG1 X-85.094 Y167.055 E46.28579\nG1 X-88.035 Y165.524 E46.54432\nG1 X-93.721 Y162.373 E47.05111\nG1 X-96.560 Y160.700 E47.30805\nG1 X-102.090 Y157.245 E47.81643\nG1 X-104.838 Y155.427 E48.07337\nG1 X-110.180 Y151.687 E48.58174\nG1 X-112.829 Y149.727 E48.83869\nG1 X-115.441 Y147.722 E49.09538\nG1 X-120.493 Y143.631 E49.60218\nG1 X-125.464 Y139.310 E50.11579\nG1 X-130.218 Y134.876 E50.62259\nG1 X-132.569 Y132.567 E50.87953\nG1 X-137.099 Y127.877 E51.38790\nG1 X-139.325 Y125.447 E51.64485\nG1 X-141.507 Y122.981 E51.90154\nG1 X-145.685 Y118.002 E52.40833\nG1 X-149.741 Y112.810 E52.92195\nG1 X-153.561 Y107.552 E53.42874\nG1 X-155.440 Y104.819 E53.68727\nG1 X-158.980 Y99.367 E54.19406\nG1 X-160.702 Y96.558 E54.45101\nG1 X-163.962 Y90.911 E54.95938\nG1 X-165.535 Y88.015 E55.21632\nG1 X-168.496 Y82.205 E55.72470\nG1 X-169.915 Y79.231 E55.98164\nG1 X-171.280 Y76.235 E56.23834\nG1 X-173.819 Y70.251 E56.74513\nG1 X-176.180 Y64.101 E57.25875\nG1 X-178.297 Y57.955 E57.76554\nG1 X-179.294 Y54.793 E58.02407\nG1 X-181.085 Y48.544 E58.53086\nG1 X-181.911 Y45.354 E58.78780\nG1 X-183.378 Y39.001 E59.29618\nG1 X-184.035 Y35.771 E59.55312\nG1 X-185.168 Y29.350 E60.06149\nG1 X-185.655 Y26.091 E60.31844\nG1 X-186.084 Y22.826 E60.57513\nG1 X-186.764 Y16.362 E61.08192\nG1 X-187.223 Y9.790 E61.59554\nG1 X-187.450 Y3.294 E62.10233\nG1 X-187.479 Y-0.002 E62.35928\nG1 X-187.450 Y-3.294 E62.61598\nG1 X-187.223 Y-9.810 E63.12429\nG1 X-187.021 Y-13.100 E63.38129\nG1 X-186.454 Y-19.575 E63.88808\nG1 X-186.079 Y-22.870 E64.14661\nG1 X-185.174 Y-29.307 E64.65340\nG1 X-184.031 Y-35.794 E65.16702\nG1 X-182.679 Y-42.152 E65.67381\nG1 X-181.910 Y-45.357 E65.93076\nG1 X-180.223 Y-51.655 E66.43913\nG1 X-179.287 Y-54.815 E66.69607\nG1 X-177.272 Y-61.017 E67.20445\nG1 X-176.172 Y-64.123 E67.46139\nG1 X-175.019 Y-67.207 E67.71809\nG1 X-172.584 Y-73.234 E68.22488\nG1 X-169.905 Y-79.252 E68.73850\nG1 X-167.055 Y-85.094 E69.24529\nG1 X-165.524 Y-88.035 E69.50382\nG1 X-162.373 Y-93.721 E70.01061\nG1 X-160.700 Y-96.560 E70.26755\nG1 X-157.245 Y-102.090 E70.77593\nG1 X-155.427 Y-104.838 E71.03287\nG1 X-151.687 Y-110.180 E71.54124\nG1 X-149.727 Y-112.829 E71.79819\nG1 X-147.722 Y-115.441 E72.05488\nG1 X-143.631 Y-120.493 E72.56167\nG1 X-139.310 Y-125.464 E73.07529\nG1 X-134.876 Y-130.218 E73.58209\nG1 X-132.567 Y-132.569 E73.83903\nG1 X-127.877 Y-137.099 E74.34740\nG1 X-125.447 Y-139.325 E74.60435\nG1 X-122.981 Y-141.507 E74.86104\nG1 X-118.002 Y-145.685 E75.36783\nG1 X-112.810 Y-149.741 E75.88145\nG1 X-107.552 Y-153.561 E76.38824\nG1 X-104.819 Y-155.440 E76.64677\nG1 X-99.367 Y-158.980 E77.15356\nG1 X-96.558 Y-160.702 E77.41051\nG1 X-90.911 Y-163.962 E77.91888\nG1 X-88.015 Y-165.535 E78.17582\nG1 X-82.205 Y-168.496 E78.68420\nG1 X-79.231 Y-169.915 E78.94114\nG1 X-76.235 Y-171.280 E79.19784\nG1 X-70.251 Y-173.819 E79.70463\nG1 X-64.101 Y-176.180 E80.21825\nG1 X-57.955 Y-178.297 E80.72504\nG1 X-54.793 Y-179.294 E80.98356\nG1 X-48.544 Y-181.085 E81.49036\nG1 X-45.354 Y-181.911 E81.74730\nG1 X-39.001 Y-183.378 E82.25568\nG1 X-35.771 Y-184.035 E82.51262\nG1 X-29.350 Y-185.168 E83.02099\nG1 X-26.091 Y-185.655 E83.27794\nG1 X-22.826 Y-186.084 E83.53463\nG1 X-16.362 Y-186.764 E84.04142\nG1 X-9.790 Y-187.223 E84.55504\nG1 X-3.294 Y-187.450 E85.06183\nG1 X0.006 Y-187.479 E85.31908\nG1 X6.521 Y-187.366 E85.82715\nG1 X9.810 Y-187.223 E86.08379\nG1 X13.100 Y-187.021 E86.34079\nG1 X19.575 Y-186.454 E86.84758\nG1 X22.870 Y-186.079 E87.10611\nG1 X29.307 Y-185.174 E87.61290\nG1 X35.794 Y-184.031 E88.12652\nG1 X42.152 Y-182.679 E88.63331\nG1 X45.357 Y-181.910 E88.89025\nG1 X51.655 Y-180.223 E89.39863\nG1 X54.815 Y-179.287 E89.65557\nG1 X61.017 Y-177.272 E90.16395\nG1 X64.123 Y-176.172 E90.42089\nG1 X67.207 Y-175.019 E90.67759\nG1 X73.234 Y-172.584 E91.18438\nG1 X79.252 Y-169.905 E91.69800\nG1 X85.094 Y-167.055 E92.20479\nG1 X88.035 Y-165.524 E92.46332\nG1 X93.721 Y-162.373 E92.97011\nG1 X96.560 Y-160.700 E93.22705\nG1 X102.090 Y-157.245 E93.73543\nG1 X104.838 Y-155.427 E93.99237\nG1 X110.180 Y-151.687 E94.50074\nG1 X112.829 Y-149.727 E94.75768\nG1 X115.441 Y-147.722 E95.01438\nG1 X120.493 Y-143.631 E95.52117\nG1 X122.911 Y-141.529 E95.77098\n\n; end preskirt\n; start_gcode | end +end_gcode = ; end_gcode | start\n\n; v11 2020-11-14_11-27 tillverka\n\n; use relative positioning\n\nG91\n\n; retract the filament a bit before lifting the nozzle to release some of the pressure\n\nG1 E-1 F300\n\n; home\n\nG28\n\n; use absolute positioning\n\nG90\n\n; cooldown\n\nM104 S0\nM140 S0\n\n; end_gcode | end\n +before_layer_gcode = +layer_gcode = +toolchange_gcode = +between_objects_gcode = +retract_length = 4 +retract_lift = 0.3 +retract_lift_above = 0 +retract_lift_below = 449 +retract_speed = 30 +deretract_speed = 0 +retract_restart_extra = 0 +retract_before_travel = 2 +retract_layer_change = 1 +wipe = 1 +retract_before_wipe = 70% +retract_length_toolchange = 10 +retract_restart_extra_toolchange = 0 +extruder_colour = #1193FF +machine_max_acceleration_e = 3000 +machine_max_acceleration_extruding = 1000 +machine_max_acceleration_retracting = 1000 +machine_max_acceleration_x = 1500 +machine_max_acceleration_y = 1500 +machine_max_acceleration_z = 1500 +machine_max_feedrate_e = 60 +machine_max_feedrate_x = 200 +machine_max_feedrate_y = 200 +machine_max_feedrate_z = 200 +machine_max_jerk_e = 5 +machine_max_jerk_x = 5 +machine_max_jerk_y = 5 +machine_max_jerk_z = 5 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +printer_settings_id = +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PREDATOR\nPRINTER_HAS_BOWDEN\n +default_filament_profile = Generic PLA @PREDATOR + +[printer:Anycubic Predator 0.4 nozzle] +inherits = *common predator* +printer_model = PREDATOR +printer_variant = 0.4 +nozzle_diameter = 0.4 +min_layer_height = 0.08 +max_layer_height = 0.32 +default_print_profile = 0.16mm 0.4 nozzle DETAILED QUALITY @PREDATOR + +[printer:Anycubic Predator 0.6 nozzle] +inherits = *common predator* +printer_model = PREDATOR +printer_variant = 0.6 +nozzle_diameter = 0.6 +min_layer_height = 0.12 +max_layer_height = 0.4 +default_print_profile = 0.24mm 0.8 nozzle DETAILED QUALITY @PREDATOR + +[printer:Anycubic Predator 0.8 nozzle] +inherits = *common predator* +printer_model = PREDATOR +printer_variant = 0.8 +nozzle_diameter = 0.8 +min_layer_height = 0.16 +max_layer_height = 0.48 +default_print_profile = 0.24mm 0.8 nozzle DETAILED QUALITY @PREDATOR + +## Anycubic 4MAX Pro 2.0 +## based on https://hartrusion.com/en/prusaslicer-config-for-anycubic-4max-pro-2-0/ + +[print:*common_4max*] +avoid_crossing_perimeters = 0 +avoid_crossing_perimeters_max_detour = 0 +bottom_fill_pattern = monotonic +bottom_solid_layers = 4 +bridge_acceleration = 300 +bridge_angle = 0 +bridge_flow_ratio = 0.65 +bridge_speed = 30 +brim_separation = 0 +brim_type = outer_only +brim_width = 0 +clip_multipart_objects = 1 +compatible_printers_condition = printer_model=="4MAXPRO20" and nozzle_diameter[0]==0.4 +complete_objects = 0 +default_acceleration = 900 +dont_support_bridges = 1 +draft_shield = disabled +elefant_foot_compensation = 0.2 +ensure_vertical_shell_thickness = 1 +external_perimeter_extrusion_width = 0 +external_perimeter_speed = 35 +external_perimeters_first = 0 +extra_perimeters = 0 +extruder_clearance_height = 20 +extruder_clearance_radius = 20 +extrusion_width = 0.45 +fill_angle = 45 +fill_density = 20% +fill_pattern = gyroid +first_layer_acceleration = 300 +first_layer_acceleration_over_raft = 0 +first_layer_extrusion_width = 0.65 +first_layer_height = 0.3 +first_layer_speed = 20 +first_layer_speed_over_raft = 30 +fuzzy_skin = none +fuzzy_skin_point_dist = 0.8 +fuzzy_skin_thickness = 0.3 +gap_fill_enabled = 1 +gap_fill_speed = 40 +gcode_comments = 0 +gcode_label_objects = 0 +gcode_resolution = 0.0125 +infill_acceleration = 600 +infill_anchor = 400% +infill_anchor_max = 50 +infill_every_layers = 1 +infill_extruder = 1 +infill_extrusion_width = 0 +infill_first = 0 +infill_only_where_needed = 0 +infill_overlap = 23% +infill_speed = 45 +inherits = +interface_shells = 0 +ironing = 0 +ironing_flowrate = 15% +ironing_spacing = 0.1 +ironing_speed = 15 +ironing_type = top +layer_height = 0.2 +max_print_speed = 50 +max_volumetric_speed = 0 +min_skirt_length = 0 +only_retract_when_crossing_perimeters = 0 +ooze_prevention = 0 +output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{print_time}.gcode +overhangs = 1 +perimeter_acceleration = 500 +perimeter_extruder = 1 +perimeter_extrusion_width = 0 +perimeter_speed = 45 +perimeters = 3 +post_process = +print_settings_id = +raft_contact_distance = 0.1 +raft_expansion = 1.5 +raft_first_layer_density = 90% +raft_first_layer_expansion = 3 +raft_layers = 0 +resolution = 0 +seam_position = aligned +single_extruder_multi_material_priming = 1 +skirt_distance = 5 +skirt_height = 1 +skirts = 2 +slicing_mode = regular +small_perimeter_speed = 20 +solid_infill_below_area = 0 +solid_infill_every_layers = 0 +solid_infill_extruder = 1 +solid_infill_extrusion_width = 0 +solid_infill_speed = 45 +spiral_vase = 0 +standby_temperature_delta = -5 +support_material = 0 +support_material_angle = 0 +support_material_auto = 1 +support_material_bottom_contact_distance = 0 +support_material_bottom_interface_layers = -1 +support_material_buildplate_only = 1 +support_material_closing_radius = 2 +support_material_contact_distance = 0.2 +support_material_enforce_layers = 0 +support_material_extruder = 1 +support_material_extrusion_width = 0.4 +support_material_interface_contact_loops = 0 +support_material_interface_extruder = 1 +support_material_interface_layers = 2 +support_material_interface_pattern = rectilinear +support_material_interface_spacing = 0.2 +support_material_interface_speed = 30 +support_material_pattern = rectilinear-grid +support_material_spacing = 2.5 +support_material_speed = 45 +support_material_style = grid +support_material_synchronize_layers = 0 +support_material_threshold = 45 +support_material_with_sheath = 1 +support_material_xy_spacing = 60% +thick_bridges = 1 +thin_walls = 0 +top_fill_pattern = monotonic +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 30 +top_solid_layers = 5 +travel_speed = 60 +travel_speed_z = 0 +wipe_tower = 0 +wipe_tower_bridging = 10 +wipe_tower_brim_width = 2 +wipe_tower_no_sparse_layers = 0 +wipe_tower_rotation_angle = 0 +wipe_tower_width = 60 +wipe_tower_x = 180 +wipe_tower_y = 140 +xy_size_compensation = 0 + +[print:0.15mm Detail @4Max Pro 2.0] +inherits = *common_4max* +layer_height = 0.15 +bottom_solid_layers = 5 +top_solid_layers = 7 +perimeter_speed = 40 +external_perimeter_speed = 25 + +[print:0.20mm Quality @4Max Pro 2.0] +inherits = *common_4max* +external_perimeter_speed = 25 + +[print:0.30mm Draft @4Max Pro 2.0] +inherits = *common_4max* +layer_height = 0.3 +bottom_solid_layers = 3 +top_solid_layers = 3 + +[filament:*common_4max*] +bed_temperature = 60 +bridge_fan_speed = 100 +compatible_printers_condition = printer_model=="4MAXPRO20" +cooling = 1 +disable_fan_first_layers = 1 +extrusion_multiplier = 1 +fan_always_on = 1 +fan_below_layer_time = 30 +filament_density = 1.24 +filament_diameter = 1.75 +filament_max_volumetric_speed = 0 +filament_type = PLA +first_layer_bed_temperature = 60 +first_layer_temperature = 210 +full_fan_speed_layer = 5 +max_fan_speed = 100 +min_fan_speed = 80 +min_print_speed = 10 +slowdown_below_layer_time = 15 +temperature = 205 + +[filament:*PLA_4max*] +inherits = *common_4max* + +[filament:Generic PLA @4Max Pro 2.0] +inherits = *PLA_4max* +filament_vendor = Generic + +[filament:Anycubic PLA @4Max Pro 2.0] +inherits = *PLA_4max* +first_layer_temperature = 215 +temperature = 207 +filament_vendor = Anycubic + +[filament:Generic ABS @4Max Pro 2.0] +filament_vendor = Generic +compatible_printers_condition = printer_model=="4MAXPRO20" +bed_temperature = 100 +first_layer_bed_temperature = 100 +temperature = 245 +first_layer_temperature = 245 +bridge_fan_speed = 15 +cooling = 1 +disable_fan_first_layers = 3 +extrusion_multiplier = 1 +fan_always_on = 0 +fan_below_layer_time = 60 +filament_colour = #800000 +filament_density = 1.04 +filament_diameter = 1.75 +filament_type = ABS +full_fan_speed_layer = 0 +max_fan_speed = 0 +min_fan_speed = 0 +min_print_speed = 10 +slowdown_below_layer_time = 25 + +[filament:Generic TPU @4Max Pro 2.0] +filament_vendor = Generic +bed_temperature = 60 +bridge_fan_speed = 0 +compatible_printers_condition = printer_model=="4MAXPRO20" +cooling = 1 +disable_fan_first_layers = 3 +extrusion_multiplier = 1 +fan_always_on = 0 +fan_below_layer_time = 60 +filament_colour = #211AB5 +filament_density = 1.19 +filament_deretract_speed = 20 +filament_diameter = 1.75 +filament_retract_speed = 30 +filament_type = FLEX +filament_max_volumetric_speed = 1.65 +first_layer_bed_temperature = 60 +first_layer_temperature = 215 +full_fan_speed_layer = 0 +max_fan_speed = 0 +min_fan_speed = 0 +min_print_speed = 10 +slowdown_below_layer_time = 20 +temperature = 215 + +[filament:Polymaker PolyFlex TPU95 @4Max Pro 2.0] +filament_vendor = Polymaker +bed_temperature = 45 +bridge_fan_speed = 80 +compatible_printers_condition = printer_model=="4MAXPRO20" +cooling = 1 +disable_fan_first_layers = 5 +extrusion_multiplier = 1.04 +fan_always_on = 1 +fan_below_layer_time = 45 +filament_colour = #FD7D2F +filament_density = 1.22 +filament_deretract_speed = 25 +filament_diameter = 1.75 +filament_max_volumetric_speed = 1.65 +filament_retract_length = 4 +filament_retract_restart_extra = 0.1 +filament_retract_speed = 60 +filament_type = FLEX +first_layer_bed_temperature = 55 +first_layer_temperature = 215 +full_fan_speed_layer = 8 +max_fan_speed = 50 +min_fan_speed = 25 +min_print_speed = 10 +slowdown_below_layer_time = 10 +temperature = 217 + +[printer:Anycubic 4Max Pro 2.0] +printer_model = 4MAXPRO20 +printer_variant = 0.4 +printer_technology = FFF +bed_shape = 0x0,270x0,270x210,0x210 +color_change_gcode = M600 +default_filament_profile = Generic PLA @4Max Pro 2.0 +default_print_profile = 0.20mm Quality @4Max Pro 2.0 +deretract_speed = 25 +end_gcode = M104 S0 ; turn off extruder heating\nM140 S0 ; turn off bed heating\nM107 ; turn off fans\nG91 ; relative positioning\nG0 Z+0.5 ; move Z up a tiny bit\nG90 ; absolute positioning\nG0 X135 Y105 F{machine_max_feedrate_x[0]*60} ; move extruder to center position\nG0 Z190.5 F{machine_max_feedrate_z[0]*60} ; lower the plattform to Z min\nM84 ; steppers off\nG90 ; absolute positioning\n +extruder_offset = 0x0 +gcode_flavor = marlin +machine_limits_usage = time_estimate_only +machine_max_acceleration_e = 5000 +machine_max_acceleration_extruding = 1250 +machine_max_acceleration_retracting = 1250 +machine_max_acceleration_travel = 1500 +machine_max_acceleration_x = 900 +machine_max_acceleration_y = 900 +machine_max_acceleration_z = 100 +machine_max_feedrate_e = 120 +machine_max_feedrate_x = 200 +machine_max_feedrate_y = 200 +machine_max_feedrate_z = 16 +machine_max_jerk_e = 5 +machine_max_jerk_x = 6 +machine_max_jerk_y = 6 +machine_max_jerk_z = 0.2 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +max_layer_height = 0.3 +max_print_height = 190 +min_layer_height = 0.07 +nozzle_diameter = 0.4 +pause_print_gcode = M601 +remaining_times = 0 +retract_before_travel = 2 +retract_before_wipe = 0% +retract_layer_change = 1 +retract_length = 2.5 +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 = 35 +silent_mode = 0 +single_extruder_multi_material = 0 +start_gcode = G21 ; metric values\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 X0 Y0 ; home X and Y\nG28 Z0 ; home Z\nG1 Z30 F{machine_max_feedrate_z[0]*60} ; move Z a bit down to not blow on the bed edge while heating\nG1 X10 F3900 ; let some space on x to prevent the filament cooling exhaust from beeing blocked by the servo motor\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM104 S[first_layer_temperature] ; set extruder temp\nM106 S80 ; turn on fan to prevent air nozzle melt while heating up\nM109 S[first_layer_temperature] ; wait for extruder temp\nM107 ; start with the fan off\nG28 X0 ; goto X home again\nG92 E0 ; zero the extruded length\nG1 Z0.2 F360 ; move plattform upwards\n; extrude material next to the plattform (comment or remove following lines to disable)\nG1 F180 E20 ; extrude some material next to the plattform\nG92 E0 ; zero the extruded length\nG1 E-[retract_length] F{retract_speed[0]*60} ; do a filament retract\nG92 E0 ; zero the extruded length again\nG1 X5 F3900 ; move sideways to get rid of that string\nG1 E[retract_length] F{retract_speed[0]*60} ; do a filament deretract with retract parameters\nG92 E0 ; zero the extruded length again\n; draw intro line (comment or remove following lines to disable)\nG1 X30 E5 F700 ; draw intro line\nG92 E0 ; zero the extruded length\nG1 E-[retract_length] F{retract_speed[0]*60} ; do a filament retract\nG1 X40 Z2.0 ; move away from the introline\nG92 E0 ; zero the extruded length again\nG1 E[retract_length] F{retract_speed[0]*60} ; do a filament deretract with retract parameters\n; end of intro line code\nM117 Printing...\nG5 +use_firmware_retraction = 0 +use_relative_e_distances = 0 +use_volumetric_e = 0 +variable_layer_height = 1 +wipe = 0 +z_offset = 0 + +########## SLA printer presets ########## + +[sla_print:*common print ANYCUBIC SLA*] +compatible_printers_condition = printer_notes=~/.*PHOTONMONOX.*/ +layer_height = 0.05 +output_filename_format = [input_filename_base].pwmx +pad_edge_radius = 0.5 +pad_enable = 0 +pad_max_merge_distance = 50 +pad_wall_height = 0 +pad_wall_thickness = 1 +pad_wall_slope = 45 +faded_layers = 8 +slice_closing_radius = 0.005 +support_base_diameter = 3 +support_base_height = 1 +support_critical_angle = 45 +support_density_at_45 = 250 +support_density_at_horizontal = 500 +support_head_front_diameter = 0.4 +support_head_penetration = 0.4 +support_head_width = 3 +support_max_bridge_length = 10 +support_minimal_z = 0 +support_object_elevation = 5 +support_pillar_diameter = 1 +support_pillar_connection_mode = zigzag +support_pillar_widening_factor = 0 +supports_enable = 1 +support_small_pillar_diameter_percent = 60% + +[sla_print:0.05 Normal @ANYCUBIC] +inherits = *common print ANYCUBIC SLA* +layer_height = 0.05 + +########### Materials + +[sla_material:*common ANYCUBIC SLA*] +compatible_printers_condition = printer_notes=~/.*PHOTONMONOX.*/ +compatible_prints_condition = layer_height == 0.05 +exposure_time = 7 +initial_exposure_time = 40 +initial_layer_height = 0.05 +material_correction = 1,1,1 +material_notes = LIFT_DISTANCE=8.0\nLIFT_SPEED=2.5\nRETRACT_SPEED=3.0\nBOTTOM_LIFT_SPEED=2.0\nBOTTOM_LIFT_DISTANCE=9.0\nDELAY_BEFORE_EXPOSURE=0.5 + +[sla_material:*common 0.05 ANYCUBIC SLA*] +inherits = *common ANYCUBIC SLA* + +[sla_material:Generic Blue Resin @MONO 0.05] +inherits = *common 0.05 ANYCUBIC SLA* +exposure_time = 2.5 +initial_exposure_time = 40 +material_type = Tough +material_vendor = Generic +material_colour = #6080EC +compatible_printers_condition = printer_notes=~/.*PHOTONMONOX.*/ + +########## Printers + +[printer:Anycubic Photon Mono X] +printer_technology = SLA +printer_model = PHOTON MONO X +printer_variant = default +default_sla_material_profile = Generic Blue Resin @MONO 0.05 +default_sla_print_profile = 0.05 Normal @ANYCUBIC +thumbnails = 224x168 +sla_archive_format = pwmx +bed_shape = 1.48x1.02,193.48x1.02,193.48x121.02,1.48x121.02 +display_height = 120 +display_orientation = landscape +display_mirror_x = 1 +display_mirror_y = 0 +display_pixels_x = 3840 +display_pixels_y = 2400 +display_width = 192 +max_print_height = 245 +elefant_foot_compensation = 0.2 +elefant_foot_min_width = 0.2 +min_exposure_time = 1 +max_exposure_time = 120 +min_initial_exposure_time = 1 +max_initial_exposure_time = 300 +printer_correction = 1,1,1 +gamma_correction = 1 +area_fill = 45 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONOX\n diff --git a/resources/profiles/Anycubic/4MAXPRO20_bed.stl b/resources/profiles/Anycubic/4MAXPRO20_bed.stl new file mode 100644 index 000000000..2b3534fa9 Binary files /dev/null and b/resources/profiles/Anycubic/4MAXPRO20_bed.stl differ diff --git a/resources/profiles/Anycubic/4MAXPRO20_texture.svg b/resources/profiles/Anycubic/4MAXPRO20_texture.svg new file mode 100644 index 000000000..edea26d50 --- /dev/null +++ b/resources/profiles/Anycubic/4MAXPRO20_texture.svg @@ -0,0 +1,259 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Anycubic/4MAXPRO20_thumbnail.png b/resources/profiles/Anycubic/4MAXPRO20_thumbnail.png new file mode 100644 index 000000000..2c9679483 Binary files /dev/null and b/resources/profiles/Anycubic/4MAXPRO20_thumbnail.png differ diff --git a/resources/profiles/Anycubic/PHOTON MONO X_thumbnail.png b/resources/profiles/Anycubic/PHOTON MONO X_thumbnail.png new file mode 100644 index 000000000..70ad47b63 Binary files /dev/null and b/resources/profiles/Anycubic/PHOTON MONO X_thumbnail.png differ diff --git a/resources/profiles/Creality.idx b/resources/profiles/Creality.idx index f8abfb40a..1ff148aad 100644 --- a/resources/profiles/Creality.idx +++ b/resources/profiles/Creality.idx @@ -1,3 +1,5 @@ +min_slic3r_version = 2.4.1 +0.1.4 Added Ender-3 Pro. Added M25 support for some printers. min_slic3r_version = 2.4.0-rc 0.1.3 Ender-3 S1 improvements. 0.1.2 Added alpha Ender 3 S1 profiles. diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini index 381efbe2f..0fa14d8a8 100644 --- a/resources/profiles/Creality.ini +++ b/resources/profiles/Creality.ini @@ -5,7 +5,7 @@ name = Creality # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 0.1.3 +config_version = 0.1.4 # Where to get the updates from? config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/ # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% @@ -32,6 +32,15 @@ bed_model = ender3_bed.stl bed_texture = ender3.svg default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY +[printer_model:ENDER3PRO] +name = Creality Ender-3 Pro +variants = 0.4 +technology = FFF +family = ENDER +bed_model = ender3_bed.stl +bed_texture = ender3.svg +default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY + [printer_model:ENDER3V2] name = Creality Ender-3 V2 variants = 0.4 @@ -960,8 +969,16 @@ inherits = Creality Ender-3; *fastabl* renamed_from = "Creality ENDER-3 BLTouch" printer_model = ENDER3BLTOUCH +[printer:Creality Ender-3 Pro] +inherits = *common*; *pauseprint* +renamed_from = "Creality Ender-3 Pro" +bed_shape = 5x0,215x0,215x220,5x220 +max_print_height = 250 +printer_model = ENDER3PRO +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3PRO\nPRINTER_HAS_BOWDEN + [printer:Creality Ender-3 V2] -inherits = *common* +inherits = *common*; *pauseprint* renamed_from = "Creality Ender-3V2" bed_shape = 5x0,215x0,215x220,5x220 max_print_height = 250 @@ -969,14 +986,14 @@ printer_model = ENDER3V2 printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3V2\nPRINTER_HAS_BOWDEN [printer:Creality Ender-3 S1] -inherits = *common*; *spriteextruder* +inherits = *common*; *pauseprint*; *spriteextruder* bed_shape = 5x0,215x0,215x220,5x220 max_print_height = 270 printer_model = ENDER3S1 printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3S1 [printer:Creality Ender-3 Max] -inherits = *common* +inherits = *common*; *pauseprint* retract_length = 6 bed_shape = 5x5,295x5,295x295,5x295 max_print_height = 340 diff --git a/resources/profiles/Creality/ENDER3PRO_thumbnail.png b/resources/profiles/Creality/ENDER3PRO_thumbnail.png new file mode 100644 index 000000000..68ed43b7f Binary files /dev/null and b/resources/profiles/Creality/ENDER3PRO_thumbnail.png differ diff --git a/resources/profiles/PrusaResearch.idx b/resources/profiles/PrusaResearch.idx index f90ba8279..d63336c2e 100644 --- a/resources/profiles/PrusaResearch.idx +++ b/resources/profiles/PrusaResearch.idx @@ -1,4 +1,6 @@ min_slic3r_version = 2.4.0-rc +1.4.4 Added multiple Fiberlogy filament profiles. Updated Extrudr filament profiles. +1.4.3 Added new filament profiles and SLA materials. 1.4.2 Added SLA material profiles. 1.4.1 Updated firmware version. 1.4.0 Updated for the PrusaSlicer 2.4.0-rc release. Updated SLA material colors. diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini index 71a86dde8..4af1e35ed 100644 --- a/resources/profiles/PrusaResearch.ini +++ b/resources/profiles/PrusaResearch.ini @@ -5,7 +5,7 @@ name = Prusa Research # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 1.4.2 +config_version = 1.4.4 # Where to get the updates from? config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/ changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% @@ -477,7 +477,7 @@ perimeter_acceleration = 800 perimeter_speed = 50 solid_infill_speed = 50 top_infill_extrusion_width = 0.4 -top_solid_layers = 7 +top_solid_layers = 8 bridge_flow_ratio = 1 bridge_speed = 25 @@ -1543,6 +1543,7 @@ filament_max_volumetric_speed = 13 [filament:*ABSMINI*] # inherits = *ABS* bed_temperature = 100 +first_layer_bed_temperature = 100 filament_retract_length = 2.7 filament_retract_speed = nil filament_deretract_speed = nil @@ -2049,7 +2050,7 @@ compatible_printers_condition = nozzle_diameter[0]!=0.8 and printer_model!="MK2S inherits = Fillamentum ASA filament_vendor = Extrudr bed_temperature = 90 -filament_cost = 25.98 +filament_cost = 34.64 filament_density = 1.05 filament_notes = "https://www.extrudr.com/en/products/catalogue/?material=120" first_layer_bed_temperature = 90 @@ -2082,8 +2083,8 @@ filament_vendor = Extrudr [filament:Extrudr XPETG CF] inherits = Extrudr PETG -filament_cost = 49.99 -filament_density = 1.41 +filament_cost = 62.49 +filament_density = 1.29 filament_notes = "https://www.extrudr.com/en/products/catalogue/?material=198" first_layer_temperature = 235 temperature = 235 @@ -2124,7 +2125,7 @@ filament_spool_weight = 230 [filament:Extrudr Flax] inherits = *PLA* filament_vendor = Extrudr -filament_cost = 56.23 +filament_cost = 50.91 filament_density = 1.45 filament_notes = "High Performance Filament for decorative parts.\nPrints as easily as PLA with much higher strength and temperature resistance.\nFully biodegradable with a nice matt finish.\n\nhttps://www.extrudr.com/en/products/catalogue/?material=131" first_layer_temperature = 190 @@ -2139,13 +2140,13 @@ filament_spool_weight = 262 [filament:Extrudr GreenTEC] inherits = *PLA* filament_vendor = Extrudr -filament_cost = 56 +filament_cost = 50.91 filament_density = 1.3 -filament_notes = "https://www.extrudr.com/en/products/catalogue/?material=106" +filament_notes = "https://www.extrudr.com/en/products/catalogue/?ignorechildren=1&material=106" first_layer_temperature = 208 temperature = 208 slowdown_below_layer_time = 20 -filament_spool_weight = 230 +filament_spool_weight = 262 [filament:Extrudr GreenTEC Pro] inherits = *PLA* @@ -2163,7 +2164,7 @@ filament_spool_weight = 230 [filament:Extrudr GreenTEC Pro Carbon] inherits = *PLA* filament_vendor = Extrudr -filament_cost = 56.23 +filament_cost = 62.49 filament_density = 1.2 filament_notes = "High Performance Filament for technical parts.\nPrints as easily as PLA with much higher stregnth and temperature resistance.\nFully biodegradable with a nice matt finish.\n\nhttps://www.extrudr.com/en/products/catalogue/?material=138" first_layer_temperature = 225 @@ -2220,8 +2221,8 @@ extrusion_multiplier = 1.2 filament_cost = 39.98 filament_density = 1.19 filament_deretract_speed = nil -filament_max_volumetric_speed = 2 -filament_notes = "https://www.extrudr.com/en/products/catalogue/?material=115" +filament_max_volumetric_speed = 3 +filament_notes = "https://www.extrudr.com/en/products/catalogue/?material=117" filament_retract_length = 0.4 filament_wipe = nil filament_spool_weight = 230 @@ -2235,8 +2236,8 @@ extrusion_multiplier = 1.2 filament_cost = 39.98 filament_density = 1.18 filament_deretract_speed = nil -filament_max_volumetric_speed = 1.2 -filament_notes = "https://www.extrudr.com/en/products/catalogue/?material=115" +filament_max_volumetric_speed = 1.8 +filament_notes = "https://www.extrudr.com/en/products/catalogue/?material=116" filament_retract_length = 0.4 filament_wipe = nil filament_spool_weight = 230 @@ -2914,6 +2915,7 @@ inherits = *PET* filament_vendor = BASF filament_cost = filament_density = 1.33 +filament_colour = #F7F7F7 first_layer_temperature = 220 first_layer_bed_temperature = 70 temperature = 215 @@ -2925,7 +2927,7 @@ bridge_fan_speed = 100 filament_type = PET disable_fan_first_layers = 1 full_fan_speed_layer = 3 -filament_notes = "BASF Forward AM Ultrafuse PET\nMaterial profile version 1.0\n\nMaterial Description\nUltrafuse PET is made from a premium PET and prints as easy as PLA, but is much stronger. The filament has a large operating window for printing (temperature vs. speed), so it can be used on every 3D-printer. PET will give you outstanding printing results: a good layer adhesion, a high resolution and it is easy to handle. Ultrafuse PET can be 100% recycled, is watertight and has great colors and finish.\n\nPrinting Recommendations:\nUltrafuse PET can be printed directly onto a clean build plate. For challenging prints, use 3dLac to improve adhesion.\n" +filament_notes = "Material Description\nUltrafuse PET is made from a premium PET and prints as easy as PLA, but is much stronger. The filament has a large operating window for printing (temperature vs. speed), so it can be used on every 3D-printer. PET will give you outstanding printing results: a good layer adhesion, a high resolution and it is easy to handle. Ultrafuse PET can be 100% recycled, is watertight and has great colors and finish.\n\nPrinting Recommendations:\nUltrafuse PET can be printed directly onto a clean build plate. For challenging prints, use 3dLac to improve adhesion." filament_retract_length = 2 filament_retract_speed = 40 filament_retract_before_travel = 2 @@ -2943,7 +2945,7 @@ filament_cost = filament_density = 1.25 filament_spool_weight = 0 filament_colour = #FFFFFF -filament_notes = "BASF Forward AM Ultrafuse PLA PRO1\nMaterial profile version 1.0\n\nMaterial Description\nPLA PRO1 is an extremely versatile tough PLA filament made for professionals. It reduces your printing time by 30% – 80%, (subject to printer and object limitations) and the strength exceeds overall mechanical properties of printed ABS parts. Printer settings can be tuned to achieve blazing fast speeds or an unrivaled surface finish. The excellent quality control ensures the highest levels of consistency between colors and batches, it will perform as expected, every time.\n\nPrinting Recommendations:\nUltrafuse PLA PRO1 can be printed directly onto a clean build plate.\n" +filament_notes = "Material Description\nPLA PRO1 is an extremely versatile tough PLA filament made for professionals. It reduces your printing time by 30% – 80%, (subject to printer and object limitations) and the strength exceeds overall mechanical properties of printed ABS parts. Printer settings can be tuned to achieve blazing fast speeds or an unrivaled surface finish. The excellent quality control ensures the highest levels of consistency between colors and batches, it will perform as expected, every time.\n\nPrinting Recommendations:\nUltrafuse PLA PRO1 can be printed directly onto a clean build plate." filament_retract_length = 2 filament_retract_lift = 0 filament_retract_speed = 40 @@ -2969,15 +2971,303 @@ max_fan_speed = 20 bed_temperature = 100 disable_fan_first_layers = 3 filament_colour = #FFFFFF -filament_notes = "BASF Forward AM Ultrafuse ABS\nMaterial profile version 1.0\n\nMaterial Description\nABS is the second most used 3D printing material. It is strong, flexible and has a high heat resistance. ABS is a preferred plastic for engineers and professional applications. ABS can be smoothened with acetone. To make a proper 3D print with ABS you will need a heated print bed. The filament is available in 9 colors.\n\nPrinting Recommendations:\n\nApply Tape, adhesion spray or glue to a clean build plate to improve adhesion.\n" -filament_retract_length = 2 -filament_retract_speed = 40 +filament_notes = "Material Description\nABS is the second most used 3D printing material. It is strong, flexible and has a high heat resistance. ABS is a preferred plastic for engineers and professional applications. ABS can be smoothened with acetone. To make a proper 3D print with ABS you will need a heated print bed. The filament is available in 9 colors.\n\nPrinting Recommendations:\n\nApply Tape, adhesion spray or glue to a clean build plate to improve adhesion." filament_retract_before_travel = 2 filament_wipe = 0 filament_retract_layer_change = 0 [filament:Ultrafuse ABS @MINI] inherits = Ultrafuse ABS; *ABSMINI* +filament_retract_layer_change = nil + +[filament:Ultrafuse ABS Fusion+] +inherits = Ultrafuse ABS +filament_density = 1.08 +first_layer_bed_temperature = 105 +temperature = 250 +filament_colour = #FFF8D9 +filament_notes = "Material Description\nABS Fusion+ made with Polyscope XILOY™ 3D is an engineering filament which has been optimized for 3D-printing. This special grade has been developed in collaboration with Polyscope Polymers - renowned for its material solutions in the automotive industry. ABS is a thermoplastic which is used in many applications. Although ABS has been classified as a standard material in 3D-printing it is known to be quite challenging to process. ABS Fusion+ combines the properties of ABS with an improved processability. The filament is based on an ABS grade which can be directly printed on glass without any adhesives or tape and has a higher success rate of prints due to extreme low warping." +filament_retract_before_travel = 2 +filament_wipe = nil +filament_retract_layer_change = 0 +filament_retract_lift = 0 + +[filament:Ultrafuse ABS Fusion+ @MINI] +inherits = Ultrafuse ABS Fusion+; *ABSMINI* +first_layer_bed_temperature = 100 +filament_retract_layer_change = nil + +[filament:Ultrafuse ASA] +inherits = Ultrafuse ABS Fusion+ +filament_density = 1.07 +filament_colour = #FFF4CA +first_layer_temperature = 275 +temperature = 275 +first_layer_bed_temperature = 110 +bed_temperature = 105 +filament_type = ASA +min_fan_speed = 25 +max_fan_speed = 50 +bridge_fan_speed = 100 +disable_fan_first_layers = 4 +filament_max_volumetric_speed = 5 +filament_notes = "Material Description\nUltrafuse ASA is a high-performance thermoplastic with similar mechanical properties as ABS. ASA offers additional benefits such as high outdoor weather resistance. The UV resistance, toughness, and rigidity make it an ideal material to 3D-print outdoor fixtures and appliances without losing its properties or color. When also taking into account the high heat resistance and high chemical resistance, this filament is a good choice for many types of applications.\n\nPrinting Recommendations:\nApply Magigoo PC, 3D lac or Dimafix to a clean build plate to improve adhesion." + +[filament:Ultrafuse ASA @MINI] +inherits = Ultrafuse ASA; *ABSMINI* +filament_type = ASA + +[filament:Ultrafuse HIPS] +inherits = Ultrafuse ABS +temperature = 250 +filament_density = 1.02 +filament_type = HIPS +min_fan_speed = 20 +max_fan_speed = 20 +filament_soluble = 1 +filament_notes = "Material Description\nUltrafuse HIPS is a high-quality engineering thermoplastic, which is well known in the 3D-printing industry as a support material for ABS. But this material has additional properties to offer like good impact resistance, good dimensional stability, and easy post-processing. HiPS is a great material to use as a support for ABS because there is a good compatibility between the two materials, and HIPS is an easy breakaway support. Now you have the opportunity to create ABS models with complex geometry. HIPS is easy to post process with glue or with sanding paper." + +[filament:Ultrafuse HIPS @MINI] +inherits = Ultrafuse HIPS; *ABSMINI* +filament_type = HIPS +min_fan_speed = 20 +max_fan_speed = 20 + +[filament:Ultrafuse PA] +inherits = Fillamentum Nylon FX256 +filament_vendor = BASF +filament_density = 1.12 +filament_colour = #ECFAFF +first_layer_temperature = 240 +temperature = 240 +first_layer_bed_temperature = 80 +bed_temperature = 70 +min_fan_speed = 0 +max_fan_speed = 0 +bridge_fan_speed = 0 +fan_below_layer_time = 30 +slowdown_below_layer_time = 20 +min_print_speed = 15 +filament_max_volumetric_speed = 11 +filament_retract_length = 1 +filament_retract_lift = 0 +filament_retract_before_travel = 2 +filament_retract_layer_change = 0 +filament_cost = 0 +filament_spool_weight = 0 +compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) +start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.02{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0" +filament_notes = "Material Description\nThe key features of Ultrafuse PA are the high strength and high modulus. Furthermore, Ultrafuse PA shows a good thermal distortion stability.\n\nPrinting Recommendations:\nApply PVA glue, Kapton tape or PA adhesive to a clean buildplate to improve adhesion." + +[filament:Ultrafuse PA6 GF30] +inherits = Ultrafuse PA +filament_density = 1.17 +first_layer_temperature = 270 +temperature = 270 +first_layer_bed_temperature = 100 +bed_temperature = 100 +filament_colour = #404040 +fan_always_on = 1 +min_fan_speed = 0 +max_fan_speed = 50 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +full_fan_speed_layer = 3 +slowdown_below_layer_time = 15 +filament_max_volumetric_speed = 10 +filament_retract_length = 1.2 +filament_retract_speed = 40 +filament_deretract_speed = 30 +filament_retract_lift = nil +filament_wipe = 0 +filament_notes = "Material Description\nUltrafuse® PA6 GF30 is a unique compound specifically developed for FFF printing. Due to the glass fiber content of 30%, parts tend to warp less. In addition the excellent layer adhesion and its compatibility with the water soluble support Ultrafuse® BVOH make this material the perfect solution to develop industrial applications on an FFF printer.\n\nWith its high wear and chemical resistance, high stiffness and strength, Ultrafuse® PA6 GF30 is perfect for a wide variety of applications in automotive, electronics or transportation.\n\nUltrafuse PA6 GF30 is designed for functional prototyping and demanding applications such as industrial tooling, transportation, electronics, small appliances, sports & leisure\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened or Ruby nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nUltrafuse PA6 GF30 can be printed directly onto a clean build plate. For challenging prints, use Magigoo PA gluestick to improve adhesion." +compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) + +[filament:Ultrafuse PAHT-CF15] +inherits = Ultrafuse PA6 GF30 +filament_density = 1.23 +filament_notes = "Material Description\nPAHT CF15 is a high-performance 3D printing filament that opens new application fields in FFF printing. In parallel to its advanced mechanical properties, dimensional stability, and chemical resistance, it has very good processability. It works in any FFF printer with a hardened nozzle. In addition to that, it is compatible with water-soluble support material and HiPS, which allow printing complex geometries that work in challenging environments. PAHT CF15 has high heat resistance up to 130 °C and low moisture absorption.\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened or Ruby nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nUltrafuse PAHT-CF can be printed directly onto a clean build plate. For challenging prints, use 3dLac to improve adhesion." + +[filament:Ultrafuse PC-ABS-FR] +inherits = Ultrafuse ABS +filament_colour = #505050 +filament_density = 1.17 +first_layer_temperature = 275 +temperature = 275 +first_layer_bed_temperature = 110 +bed_temperature = 105 +filament_type = PC +filament_max_volumetric_speed = 8 +filament_wipe = nil +min_fan_speed = 20 +max_fan_speed = 20 +bridge_fan_speed = 30 +disable_fan_first_layers = 4 +compatible_printers_condition = printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) +filament_notes = "Material Description\nUltrafuse® PC/ABS FR Black is a V-0 flame retardant blend of Polycarbonate and ABS – two of the most used thermoplastics for engineering & electrical applications. The combination of these two materials results in a premium material with a mix of the excellent mechanical properties of PC and the comparably low printing temperature of ABS. Combined with a halogen free flame retardant, parts printed with Ultrafuse® PC/ABS FR Black feature great tensile and impact strength, higher thermal resistance than ABS and can fulfill the requirements of the UL94 V-0 standard.\n\nPrinting Recommendations:\nApply Magigoo PC to a clean build plate to improve adhesion." +start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.07{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0" + +[filament:Ultrafuse PET-CF15] +inherits = Ultrafuse PET +filament_density = 1.36 +filament_colour = #404040 +first_layer_temperature = 270 +temperature = 270 +first_layer_bed_temperature = 75 +bed_temperature = 75 +min_fan_speed = 60 +max_fan_speed = 100 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +full_fan_speed_layer = 3 +slowdown_below_layer_time = 15 +fan_below_layer_time = 30 +filament_max_volumetric_speed = 10 +filament_retract_length = 1.2 +filament_retract_speed = 40 +filament_deretract_speed = 30 +filament_retract_lift = nil +filament_wipe = 0 +start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K18{elsif nozzle_diameter[0]==0.8};{else}M900 K30{endif} ; Filament gcode LA 1.0" +filament_notes = "Material Description\nPET CF15 is a Carbon Fiber reinforced PET which has precisely tuned material properties, for a wide range of technical applications. The filament is very strong and stiff and has high heat resistance. With its high dimensional stability and low abrasiveness, the filament offers an easy to print experience which allows direct printing on glass or a PEI sheet. It is compatible with HiPS for breakaway support and water soluble support and has an excellent surface finish.\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened or Ruby nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nUltrafuse PET-CF15 can be printed directly onto a clean build plate. For challenging prints, use 3dLac to improve adhesion." +compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) + +[filament:Ultrafuse PLA] +inherits = *PLA* +filament_vendor = BASF +filament_density = 1.25 +full_fan_speed_layer = 3 +filament_notes = "Material Description\nPLA is one of the most used materials for 3D printing. Ultrafuse PLA is available in a wide range of colors. The glossy feel often attracts those who print display models or items for household use. Many appreciate the plant-based origin of this material. When properly cooled, PLA has a high maximum printing speed and sharp printed corners. Combining this with low warping of the print makes it a popular plastic for home printers, hobbyists, prototyping and schools.\n\nPrinting Recommendations:\nUltrafuse PLA can be printed directly onto a clean build plate." + +[filament:Ultrafuse PP] +inherits = Ultrafuse ABS +filament_density = 0.91 +filament_colour = #F0F0F0 +first_layer_temperature = 240 +temperature = 240 +first_layer_bed_temperature = 80 +bed_temperature = 70 +min_fan_speed = 100 +max_fan_speed = 100 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +full_fan_speed_layer = 3 +fan_below_layer_time = 60 +slowdown_below_layer_time = 20 +min_print_speed = 10 +filament_type = PP +filament_max_volumetric_speed = 2.5 +filament_retract_speed = 25 +filament_deretract_speed = 25 +filament_retract_layer_change = 0 +filament_wipe = nil +filament_notes = "Material Description\nUltrafuse PP is high-performance thermoplastic with low density, high elasticity and high resistance to fatigue. The mechanical properties make it an ideal material for 3D-printing applications which have to endure high stress or strain. The filament has high chemical resistance and a high isolation value. PP is one of the most used materials in the world, due to its versatility and ability to engineer lightweight tough parts.\n\nPrinting Recommendations:\nApply PP tape or Magigoo PP adhesive to the buildplate for optimal adhesion." +compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) + +[filament:Ultrafuse PP-GF30] +inherits = Ultrafuse PP +filament_density = 1.07 +filament_colour = #404040 +first_layer_temperature = 260 +temperature = 250 +first_layer_bed_temperature = 90 +bed_temperature = 40 +min_fan_speed = 40 +max_fan_speed = 75 +fan_always_on = 1 +fan_below_layer_time = 30 +slowdown_below_layer_time = 15 +min_print_speed = 15 +filament_retract_length = 1.2 +filament_retract_speed = 40 +filament_deretract_speed = 30 +filament_retract_lift = nil +filament_wipe = 0 +filament_notes = "Ultrafuse PP GF30 is polypropylene, reinforced with 30% glass fiber content. The fibers in this compound are specially designed for 3D-printing filaments and are compatible with a wide range of standard FFF 3D-printers. The extreme stiffness makes this material highly suitable for demanding applications. Other key properties of PPGF30 are high heat resistance and improved UV-resistance. All these excellent properties make this filament highly suitable in an industrial environment.\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened or Ruby nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nApply PP strapping tape or PPGF adhesive to a clean build plate for optimal adhesion." +compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) + +[filament:Ultrafuse TPC-45D] +inherits = *FLEX* +filament_vendor = BASF +extrusion_multiplier = 1 +filament_density = 1.15 +filament_colour = #0035EC +first_layer_temperature = 235 +temperature = 235 +first_layer_bed_temperature = 60 +bed_temperature = 60 +min_fan_speed = 10 +max_fan_speed = 50 +bridge_fan_speed = 80 +fan_below_layer_time = 30 +slowdown_below_layer_time = 15 +min_print_speed = 15 +fan_always_on = 1 +cooling = 1 +filament_max_volumetric_speed = 1.2 +filament_retract_length = 1.2 +filament_retract_speed = 25 +filament_deretract_speed = 25 +filament_retract_lift = 0 +filament_wipe = nil +filament_retract_before_wipe = nil +filament_retract_before_travel = 2 +filament_retract_layer_change = 0 +filament_notes = "Material Description\nTPC 45D is a flexible, shore 45D, rubber-like Thermoplastic Copolyester Elastomer (TPE-C), which is derived from rapeseed oil and combines the best properties of elastomers (rubbers) and polyesters. The material delivers excellent adhesion in the Z-direction, meaning that the printed layers do not detach - even with extreme deformation.\n\nPrinting Recommendations:\nApply Magigoo Flex to a clean build plate to improve adhesion." + +## [filament:Ultrafuse TPS-90A] +## inherits = Ultrafuse TPC-45D +## filament_density = 1.04 +## extrusion_multiplier = 1.02 +## filament_colour = #FFFFFF +## first_layer_temperature = 270 +## temperature = 265 +## first_layer_bed_temperature = 30 +## bed_temperature = 30 +## min_fan_speed = 20 +## max_fan_speed = 75 +## filament_notes = "Material Description\nUltrafuse® TPS 90A is an elastomer based on the raw material SEBS. The combination of durable and flexible building blocks leads to a very versatile material. Compared to other flexible 3D printing materials it shows more rubber-like soft touch haptics and better non-slip properties. Furthermore, the material shows a reduced moisture uptake, which allows for printing without pre-drying. Parts printed with Ultrafuse® TPS 90A show almost no visible layers or warpage, which makes it an excellent material choice for end-use parts. Producing multi-material parts is possible by printing it together with ABS.\n\nPrinting Recommendations:\nApply Tape, adhesion spray or glue to a clean build plate to improve adhesion." + +[filament:Ultrafuse TPU-64D] +inherits = Ultrafuse TPC-45D +filament_density = 1.16 +first_layer_temperature = 230 +temperature = 225 +first_layer_bed_temperature = 40 +bed_temperature = 40 +min_fan_speed = 20 +max_fan_speed = 100 +filament_notes = "Material Description\nUltrafuse® TPU 64D is the hardest elastomer in BASF Forward AM’s flexible productline. The material shows a relatively high rigidity while maintaining a certain flexibility. This filament is the perfect match for industrial applications requiring rigid parts being resistant to impact, wear and tear. Due to its property profile, the material can be used as an alternative for parts made from ABS and rubbers. Ultrafuse® TPU 64D is easy to print on direct drive and bowden style printers and is compatible with soluble BVOH support to realize the most complex geometries.\n\nPrinting Recommendations:\nUltrafuse TPU can be printed directly onto a clean build plate. A small amount of 3Dlac can make removal easier after printing." + +[filament:Ultrafuse TPU-85A] +inherits = Ultrafuse TPU-64D +filament_density = 1.11 +first_layer_temperature = 225 +temperature = 220 +filament_notes = "Material Description\nUltrafuse® TPU 85A comes in its natural white color. Chemical properties (e.g. resistance against particular substances) and tolerance for solvents can be made available, if these factors are relevant for a specific application. Generally, these properties correspond to publicly available data on polyether based TPUs. This material is not FDA conform. Good flexibility at low temperature, good wear performance and good damping behavior are the key features of Ultrafuse® TPU 85A.\n\nPrinting Recommendations:\nUltrafuse TPU can be printed directly onto a clean build plate. A small amount of 3Dlac can make removal easier after printing." + +[filament:Ultrafuse TPU-95A] +inherits = Ultrafuse TPU-85A +filament_density = 1.14 +first_layer_temperature = 230 +temperature = 225 +filament_notes = "Material Description\nUltrafuse® TPU 95A comes with a well-balanced profile of flexibility and durability. On top of that, it allows for easier and faster printing then softer TPU grades. Parts printed with Ultrafuse® TPU 95A show a high elongation, good impact resistance, excellent layer adhesion and a good resistance to oils and common industrially used chemicals. Due to its good printing behavior, Ultrafuse® TPU 95A is a good choice for starting printing flexible materials on both direct drive and bowden style printers.\n\nPrinting Recommendations:\nUltrafuse TPU can be printed directly onto a clean build plate. A small amount of 3Dlac can make removal easier after printing." + +[filament:Ultrafuse rPET] +inherits = Ultrafuse PET +filament_density = 1.27 +filament_colour = #9DC5FF +first_layer_temperature = 235 +temperature = 235 +first_layer_bed_temperature = 80 +bed_temperature = 75 +min_fan_speed = 50 +max_fan_speed = 100 +fan_below_layer_time = 15 +filament_notes = "Material Description\nPET is mainly known by the well-known PET bottle material. This recycled has a natural transparent blueish look. It has excellent 3D printing properties and good mechanical characteristics." +filament_retract_length = 1.2 +filament_retract_lift = 0.6 +filament_wipe = nil [filament:Ultrafuse Metal] inherits = *ABSC* @@ -3221,13 +3511,6 @@ filament_density = 1.27 filament_spool_weight = 235 compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) -[filament:Fiberlogy PETG] -inherits = *PET* -filament_vendor = Fiberlogy -filament_cost = 21.50 -filament_density = 1.27 -compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) - [filament:Prusament PETG] inherits = *PET* filament_vendor = Prusa Polymers @@ -3290,8 +3573,9 @@ filament_density = 1.27 filament_spool_weight = 235 filament_type = PETG -[filament:Fiberlogy PETG @0.6 nozzle] +[filament:Fiberlogy Easy PET-G @0.6 nozzle] inherits = *PET06* +renamed_from = Fiberlogy PETG @0.6 nozzle filament_vendor = Fiberlogy first_layer_temperature = 230 temperature = 240 @@ -3383,11 +3667,297 @@ filament_density = 1.24 filament_spool_weight = 230 compatible_printers_condition = nozzle_diameter[0]!=0.8 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) -[filament:Fiberlogy PLA] +[filament:Fiberlogy Easy PLA] inherits = *PLA* +renamed_from = Fiberlogy PLA filament_vendor = Fiberlogy -filament_cost = 25.4 +filament_cost = 20 filament_density = 1.24 +first_layer_temperature = 220 +temperature = 220 +filament_spool_weight = 330 + +[filament:Fiberlogy Easy PET-G] +inherits = *PET* +renamed_from = Fiberlogy PETG +filament_vendor = Fiberlogy +filament_spool_weight = 330 +filament_cost = 20 +filament_density = 1.27 +compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) +first_layer_bed_temperature = 80 +bed_temperature = 80 +first_layer_temperature = 235 +temperature = 235 +min_fan_speed = 15 +max_fan_speed = 30 +bridge_fan_speed = 60 +disable_fan_first_layers = 5 +full_fan_speed_layer = 5 +slowdown_below_layer_time = 15 + +[filament:Fiberlogy ASA] +inherits = *ABS* +filament_vendor = Fiberlogy +filament_cost = 33 +filament_density = 1.07 +filament_spool_weight = 330 +fan_always_on = 0 +cooling = 1 +min_fan_speed = 10 +max_fan_speed = 15 +bridge_fan_speed = 30 +min_print_speed = 15 +slowdown_below_layer_time = 15 +first_layer_temperature = 260 +temperature = 260 +first_layer_bed_temperature = 105 +bed_temperature = 110 +filament_type = ASA +fan_below_layer_time = 30 +disable_fan_first_layers = 5 + +[filament:Fiberlogy ASA @MINI] +inherits = Fiberlogy ASA; *ABSMINI* + +[filament:Fiberlogy Easy ABS] +inherits = Fiberlogy ASA +filament_cost = 22.67 +filament_density = 1.09 +fan_always_on = 0 +cooling = 1 +min_fan_speed = 10 +max_fan_speed = 15 +min_print_speed = 15 +slowdown_below_layer_time = 15 +first_layer_temperature = 250 +temperature = 250 +first_layer_bed_temperature = 100 +bed_temperature = 100 +filament_type = ABS +fan_below_layer_time = 25 +disable_fan_first_layers = 5 + +[filament:Fiberlogy Easy ABS @MINI] +inherits = Fiberlogy Easy ABS; *ABSMINI* + +[filament:Fiberlogy CPE HT] +inherits = *PET* +filament_vendor = Fiberlogy +filament_cost = 42.67 +filament_density = 1.18 +extrusion_multiplier = 0.98 +filament_spool_weight = 330 +fan_always_on = 1 +cooling = 1 +min_fan_speed = 0 +max_fan_speed = 0 +bridge_fan_speed = 50 +min_print_speed = 15 +first_layer_temperature = 275 +temperature = 275 +first_layer_bed_temperature = 105 +bed_temperature = 110 +filament_type = CPE +fan_below_layer_time = 20 +slowdown_below_layer_time = 15 +disable_fan_first_layers = 5 + +[filament:Fiberlogy PCTG] +inherits = Fiberlogy CPE HT +filament_vendor = Fiberlogy +filament_cost = 29.41 +filament_density = 1.23 +extrusion_multiplier = 0.98 +min_fan_speed = 10 +max_fan_speed = 15 +bridge_fan_speed = 50 +min_print_speed = 15 +first_layer_temperature = 265 +temperature = 265 +first_layer_bed_temperature = 90 +bed_temperature = 90 +filament_type = CPE +fan_below_layer_time = 20 +slowdown_below_layer_time = 15 +disable_fan_first_layers = 5 + +[filament:Fiberlogy FiberFlex 40D] +inherits = *FLEX* +filament_vendor = Fiberlogy +fan_always_on = 1 +filament_max_volumetric_speed = 1.5 +extrusion_multiplier = 1.12 +first_layer_temperature = 230 +first_layer_bed_temperature = 60 +temperature = 230 +bed_temperature = 60 +bridge_fan_speed = 75 +min_fan_speed = 25 +max_fan_speed = 75 +filament_retract_before_travel = 2 +filament_cost = 39.41 +filament_density = 1.16 +filament_retract_length = 1.2 +filament_retract_speed = nil +filament_deretract_speed = 20 +filament_retract_lift = 0 +filament_wipe = 0 +disable_fan_first_layers = 5 +full_fan_speed_layer = 5 +min_print_speed = 15 +cooling = 1 +filament_spool_weight = 330 + +[filament:Fiberlogy FiberFlex 40D @MINI] +inherits = *FLEXMINI* +filament_vendor = Fiberlogy +filament_max_volumetric_speed = 1.5 +fan_always_on = 1 +first_layer_temperature = 240 +first_layer_bed_temperature = 60 +temperature = 240 +bed_temperature = 60 +filament_retract_length = 4 +filament_retract_before_travel = 5 +bridge_fan_speed = 80 +min_fan_speed = 25 +max_fan_speed = 60 +min_print_speed = 15 +slowdown_below_layer_time = 10 +cooling = 1 +filament_cost = 84.68 + +[filament:Fiberlogy MattFlex 40D] +inherits = Fiberlogy FiberFlex 40D +filament_vendor = Fiberlogy +fan_always_on = 1 +filament_max_volumetric_speed = 1.35 +extrusion_multiplier = 1.1 +filament_retract_before_travel = 2 +filament_cost = 49.11 +filament_retract_length = 1.2 + +[filament:Fiberlogy FiberFlex 30D] +inherits = Fiberlogy FiberFlex 40D +filament_max_volumetric_speed = 1.2 +extrusion_multiplier = 1.15 +first_layer_temperature = 240 +temperature = 240 +min_fan_speed = 25 +max_fan_speed = 60 +filament_density = 1.07 +filament_retract_length = 1.2 + +[filament:Fiberlogy FiberSatin] +inherits = Fiberlogy Easy PLA +first_layer_temperature = 215 +temperature = 215 +extrusion_multiplier = 1.03 +filament_density = 1.2 +filament_cost = 32.35 + +[filament:Fiberlogy FiberSilk] +inherits = Fiberlogy FiberSatin +first_layer_temperature = 230 +temperature = 230 +extrusion_multiplier = 0.97 +filament_density = 1.22 +filament_cost = 32.35 + +[filament:Fiberlogy FiberWood] +inherits = Fiberlogy Easy PLA +first_layer_temperature = 185 +temperature = 185 +extrusion_multiplier = 1 +filament_density = 1.23 +filament_cost = 38.66 +filament_max_volumetric_speed = 8 + +[filament:Fiberlogy HD PLA] +inherits = Fiberlogy Easy PLA +first_layer_temperature = 230 +temperature = 230 +extrusion_multiplier = 1 +filament_density = 1.24 +filament_cost = 30.59 + +[filament:Fiberlogy PLA Mineral] +inherits = Fiberlogy Easy PLA +first_layer_temperature = 195 +temperature = 190 +extrusion_multiplier = 0.98 +filament_density = 1.38 +filament_cost = 37.64 +filament_max_volumetric_speed = 10 + +[filament:Fiberlogy Impact PLA] +inherits = Fiberlogy HD PLA +filament_density = 1.22 +filament_cost = 27.65 + +[filament:Fiberlogy Nylon PA12] +inherits = Fiberlogy ASA +filament_type = NYLON +filament_density = 1.01 +filament_cost = 48 +first_layer_bed_temperature = 105 +bed_temperature = 110 +first_layer_temperature = 265 +temperature = 265 +min_fan_speed = 10 +max_fan_speed = 15 +fan_below_layer_time = 20 +bridge_fan_speed = 30 +fan_always_on = 0 +filament_retract_lift = 0.2 +filament_max_volumetric_speed = 6 +start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.08{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K26{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0" + +[filament:Fiberlogy Nylon PA12+CF15] +inherits = Fiberlogy Nylon PA12 +extrusion_multiplier = 0.97 +filament_density = 1.07 +filament_cost = 87.5 +first_layer_bed_temperature = 105 +bed_temperature = 110 +first_layer_temperature = 265 +temperature = 265 +min_fan_speed = 10 +max_fan_speed = 15 +fan_below_layer_time = 20 +bridge_fan_speed = 30 +fan_always_on = 0 +filament_max_volumetric_speed = 8 +compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material) + +[filament:Fiberlogy Nylon PA12+GF15] +inherits = Fiberlogy Nylon PA12+CF15 +filament_density = 1.13 +filament_max_volumetric_speed = 8 + +[filament:Fiberlogy PP] +inherits = *ABS* +filament_vendor = Fiberlogy +filament_cost = 36.67 +filament_density = 1.05 +extrusion_multiplier = 1.05 +filament_spool_weight = 330 +fan_always_on = 1 +cooling = 1 +min_fan_speed = 0 +max_fan_speed = 25 +bridge_fan_speed = 70 +min_print_speed = 15 +slowdown_below_layer_time = 15 +first_layer_temperature = 245 +temperature = 245 +first_layer_bed_temperature = 0 +bed_temperature = 0 +filament_type = PP +fan_below_layer_time = 100 +disable_fan_first_layers = 5 +filament_max_volumetric_speed = 5 [filament:Filament PM PLA] inherits = *PLA* @@ -3446,7 +4016,7 @@ filament_density = 1.24 inherits = *PLA* filament_vendor = Prusa Polymers temperature = 215 -filament_cost = 30.24 +filament_cost = 36.29 filament_density = 1.24 filament_spool_weight = 201 filament_notes = "Affordable filament for everyday printing in premium quality manufactured in-house by Josef Prusa" @@ -3500,7 +4070,7 @@ filament_spool_weight = 230 [filament:Prusament PLA @MMU2] inherits = *PLA MMU2* filament_vendor = Prusa Polymers -filament_cost = 30.24 +filament_cost = 36.29 filament_density = 1.24 filament_spool_weight = 201 @@ -3834,8 +4404,9 @@ renamed_from = "Plasty Mladec PETG @MMU1" [filament:Verbatim PETG @MMU1] inherits = Verbatim PETG; *PETMMU1* -[filament:Fiberlogy PETG @MMU1] -inherits = Fiberlogy PETG; *PETMMU1* +[filament:Fiberlogy Easy PET-G @MMU1] +inherits = Fiberlogy Easy PET-G; *PETMMU1* +renamed_from = Fiberlogy PETG @MMU1 [filament:Prusa PETG @MMU1] inherits = Prusa PETG; *PETMMU1* @@ -3925,8 +4496,9 @@ compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0. inherits = Verbatim PETG; *PETMINI* compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6 -[filament:Fiberlogy PETG @MINI] -inherits = Fiberlogy PETG; *PETMINI* +[filament:Fiberlogy Easy PET-G @MINI] +inherits = Fiberlogy Easy PET-G; *PETMINI* +renamed_from = Fiberlogy PETG @MINI compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6 [filament:Generic ABS @MINI] @@ -4013,8 +4585,9 @@ renamed_from = "Plasty Mladec PETG @0.6 nozzle MINI" [filament:Verbatim PETG @0.6 nozzle MINI] inherits = Verbatim PETG; *PETMINI06* -[filament:Fiberlogy PETG @0.6 nozzle MINI] -inherits = Fiberlogy PETG; *PETMINI06* +[filament:Fiberlogy Easy PET-G @0.6 nozzle MINI] +inherits = Fiberlogy Easy PET-G; *PETMINI06* +renamed_from = Fiberlogy PETG @0.6 nozzle MINI [filament:Prusament ASA @MINI] inherits = Prusament ASA; *ABSMINI* @@ -4629,7 +5202,7 @@ material_colour = #FF8040 inherits = *common 0.025* exposure_time = 12 initial_exposure_time = 30 -material_type = Tough +material_type = Casting material_vendor = 3DM material_colour = #B0B000 @@ -5084,6 +5657,38 @@ material_type = Tough material_vendor = Ameralabs material_colour = #C0C0C0 +[sla_material:PrimaCreator Tough Light Grey @0.025] +inherits = *common 0.025* +exposure_time = 6 +initial_exposure_time = 35 +material_type = Tough +material_vendor = PrimaCreator +material_colour = #C0C0C0 + +[sla_material:PrimaCreator Tough Clear @0.025] +inherits = *common 0.025* +exposure_time = 5 +initial_exposure_time = 35 +material_type = Tough +material_vendor = PrimaCreator +material_colour = #F8F8F8 + +[sla_material:PrimaCreator Tough White @0.025] +inherits = *common 0.025* +exposure_time = 5 +initial_exposure_time = 35 +material_type = Tough +material_vendor = PrimaCreator +material_colour = #FFFFFF + +[sla_material:PrimaCreator Flex Clear @0.025] +inherits = *common 0.025* +exposure_time = 4.5 +initial_exposure_time = 30 +material_type = Flexible +material_vendor = PrimaCreator +material_colour = #F8F8F8 + [sla_material:Siraya Tech Simple Clear @0.025] inherits = *common 0.025* exposure_time = 8 @@ -5371,7 +5976,7 @@ inherits = *common 0.05* exposure_time = 12 initial_exposure_time = 45 material_type = Tough -material_vendor = Monocure +material_vendor = 3DM material_colour = #EC0000 [sla_material:Esun Bio-Photopolymer Resin White @0.05] @@ -5550,6 +6155,38 @@ material_type = Tough material_vendor = Photocentric material_colour = #C0C0C0 +[sla_material:PrimaCreator Tough Light Grey @0.05] +inherits = *common 0.05* +exposure_time = 8.5 +initial_exposure_time = 35 +material_type = Tough +material_vendor = PrimaCreator +material_colour = #C0C0C0 + +[sla_material:PrimaCreator Tough Clear @0.05] +inherits = *common 0.05* +exposure_time = 7 +initial_exposure_time = 35 +material_type = Tough +material_vendor = PrimaCreator +material_colour = #F8F8F8 + +[sla_material:PrimaCreator Tough White @0.05] +inherits = *common 0.05* +exposure_time = 7.5 +initial_exposure_time = 35 +material_type = Tough +material_vendor = PrimaCreator +material_colour = #FFFFFF + +[sla_material:PrimaCreator Flex Clear @0.05] +inherits = *common 0.05* +exposure_time = 6.5 +initial_exposure_time = 30 +material_type = Flexible +material_vendor = PrimaCreator +material_colour = #F8F8F8 + [sla_material:Siraya Tech Simple Clear @0.05] inherits = *common 0.05* exposure_time = 10 @@ -6270,6 +6907,38 @@ material_type = Tough material_vendor = Made for Prusa material_colour = #FF8040 +[sla_material:PrimaCreator Tough Light Grey @0.1] +inherits = *common 0.1* +exposure_time = 14 +initial_exposure_time = 45 +material_type = Tough +material_vendor = PrimaCreator +material_colour = #C0C0C0 + +[sla_material:PrimaCreator Tough Clear @0.1] +inherits = *common 0.1* +exposure_time = 13 +initial_exposure_time = 45 +material_type = Tough +material_vendor = PrimaCreator +material_colour = #F8F8F8 + +[sla_material:PrimaCreator Tough White @0.1] +inherits = *common 0.1* +exposure_time = 13 +initial_exposure_time = 45 +material_type = Tough +material_vendor = PrimaCreator +material_colour = #FFFFFF + +[sla_material:PrimaCreator Flex Clear @0.1] +inherits = *common 0.1* +exposure_time = 12 +initial_exposure_time = 35 +material_type = Flexible +material_vendor = PrimaCreator +material_colour = #F8F8F8 + ## SL1S materials ## ## 0.025 SL1S @@ -6916,6 +7585,310 @@ material_type = Tough material_vendor = Peopoly material_colour = #F8F8F8 +[sla_material:3DM-ABS @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.6 +initial_exposure_time = 25 +material_type = Tough +material_vendor = 3DM +material_colour = #FF8040 + +[sla_material:3DM-DENT @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.3 +initial_exposure_time = 36 +material_type = Dental +material_vendor = 3DM +material_colour = #FFEEE6 + +[sla_material:3DM-HR Green @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 5 +initial_exposure_time = 28 +material_type = Tough +material_vendor = 3DM +material_colour = #00B900 + +[sla_material:3DM-HR Red Wine @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 6 +initial_exposure_time = 32 +material_type = Tough +material_vendor = 3DM +material_colour = #EC0000 + +[sla_material:3DM-Vulcan Gold @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 5 +initial_exposure_time = 24 +material_type = Casting +material_vendor = 3DM +material_colour = #B0B000 + +[sla_material:3DM-XPRO White @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3 +initial_exposure_time = 28 +material_type = Tough +material_vendor = 3DM +material_colour = #FFFFFF + +[sla_material:Asiga Denta Model @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 5 +initial_exposure_time = 24 +material_type = Dental +material_vendor = Asiga +material_colour = #FFEEE6 + +[sla_material:Asiga PlasGRAY @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 9.7 +initial_exposure_time = 48 +material_type = Tough +material_vendor = Asiga +material_colour = #C0C0C0 + +[sla_material:BlueCast EcoGray @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.3 +initial_exposure_time = 28 +material_type = Tough +material_vendor = BlueCast +material_colour = #808080 + +[sla_material:BlueCast Phrozen Wax @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 5.3 +initial_exposure_time = 40 +material_type = Tough +material_vendor = BlueCast +material_colour = #007EFD + +[sla_material:NextDent Model 2.0 Grey @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 4 +initial_exposure_time = 28 +material_type = Dental +material_vendor = NextDent +material_colour = #C0C0C0 + +[sla_material:NextDent Cast Purple @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3 +initial_exposure_time = 16 +material_type = Casting +material_vendor = NextDent +material_colour = #E800E8 + +[sla_material:Siraya Tech Tenacious @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.7 +initial_exposure_time = 28 +material_type = Tough +material_vendor = Siraya Tech +material_colour = #F8F8F8 + +[sla_material:Siraya Tech Blu Clear V2 @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3.3 +initial_exposure_time = 24 +material_type = Tough +material_vendor = Siraya Tech +material_colour = #F8F8F8 + +[sla_material:Siraya Tech Blu Blue @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 4 +initial_exposure_time = 28 +material_type = Tough +material_vendor = Siraya Tech +material_colour = #007EFD + +[sla_material:Siraya Tech Fast Black @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3 +initial_exposure_time = 28 +material_type = Tough +material_vendor = Siraya Tech +material_colour = #595959 + +[sla_material:Siraya Tech Fast Grey @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3.3 +initial_exposure_time = 28 +material_type = Tough +material_vendor = Siraya Tech +material_colour = #C0C0C0 + +[sla_material:Siraya Tech Simple Clear @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3.3 +initial_exposure_time = 28 +material_type = Tough +material_vendor = Siraya Tech +material_colour = #F8F8F8 + +[sla_material:Siraya Tech Sculpt @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.7 +initial_exposure_time = 28 +material_type = Tough +material_vendor = Siraya Tech +material_colour = #C0C0C0 + +[sla_material:Harz Labs Model Resin Cherry @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 4.3 +initial_exposure_time = 16 +material_type = Tough +material_vendor = Harz Labs +material_colour = #EC0000 + +[sla_material:Harz Labs Model Resin Black @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 4.3 +initial_exposure_time = 16 +material_type = Tough +material_vendor = Harz Labs +material_colour = #595959 + +[sla_material:Harz Labs Basic Resin Red @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 4.3 +initial_exposure_time = 16 +material_type = Tough +material_vendor = Harz Labs +material_colour = #EC0000 + +[sla_material:Resinworks 3D Violet @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 5.7 +initial_exposure_time = 24 +material_type = Tough +material_vendor = Resinworks 3D +material_colour = #E800E8 + +[sla_material:FunToDo Industrial Blend Unpigmented @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 1.3 +initial_exposure_time = 28 +material_type = Tough +material_vendor = FunToDo +material_colour = #F8F8F8 + +[sla_material:FunToDo Snow White @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3.3 +initial_exposure_time = 28 +material_type = Tough +material_vendor = FunToDo +material_colour = #FFFFFF + +[sla_material:FunToDo Ash Grey @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3 +initial_exposure_time = 32 +material_type = Tough +material_vendor = FunToDo +material_colour = #808080 + +[sla_material:Ameralabs AMD 3 LED @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 1.7 +initial_exposure_time = 24 +material_type = Tough +material_vendor = Ameralabs +material_colour = #808080 + +[sla_material:Dragon Resin Metalshine Metal Grey @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 10 +initial_exposure_time = 40 +material_type = Tough +material_vendor = Dragon Resin +material_colour = #808080 + +[sla_material:Dragon Resin Metalshine Dark Brass @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 10 +initial_exposure_time = 40 +material_type = Tough +material_vendor = Dragon Resin +material_colour = #B0B000 + +[sla_material:Dragon Resin Metalshine Brass @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 10 +initial_exposure_time = 40 +material_type = Tough +material_vendor = Dragon Resin +material_colour = #B0B000 + +[sla_material:Esun Bio-Photopolymer Resin White @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.7 +initial_exposure_time = 24 +material_type = Tough +material_vendor = Esun +material_colour = #FFFFFF + +[sla_material:Esun Standard Resin Black @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.3 +initial_exposure_time = 24 +material_type = Tough +material_vendor = Esun +material_colour = #595959 + +[sla_material:Monocure 3D Black Rapid Resin @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2 +initial_exposure_time = 28 +material_type = Tough +material_vendor = Monocure +material_colour = #595959 + +[sla_material:Monocure 3D Blue Rapid Resin @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.3 +initial_exposure_time = 28 +material_type = Tough +material_vendor = Monocure +material_colour = #007EFD + +[sla_material:Monocure 3D Clear Rapid Resin @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2.7 +initial_exposure_time = 32 +material_type = Tough +material_vendor = Monocure +material_colour = #F8F8F8 + +[sla_material:Monocure 3D Grey Rapid Resin @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3.3 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Monocure +material_colour = #C0C0C0 + +[sla_material:Monocure 3D White Rapid Resin @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3.3 +initial_exposure_time = 28 +material_type = Tough +material_vendor = Monocure +material_colour = #FFFFFF + +[sla_material:Photocentric Hard Grey @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 5 +initial_exposure_time = 24 +material_type = Tough +material_vendor = Photocentric +material_colour = #808080 + ## 0.1 SL1S ## Prusa Polymers 0.1 diff --git a/resources/profiles/Snapmaker.idx b/resources/profiles/Snapmaker.idx new file mode 100644 index 000000000..03488b17c --- /dev/null +++ b/resources/profiles/Snapmaker.idx @@ -0,0 +1,2 @@ +min_slic3r_version = 2.4.1 +1.0.0 Initial Snapmaker bundle diff --git a/resources/profiles/Snapmaker.ini b/resources/profiles/Snapmaker.ini new file mode 100644 index 000000000..68e32910b --- /dev/null +++ b/resources/profiles/Snapmaker.ini @@ -0,0 +1,473 @@ +# Snapmaker profiles + +# Based on the profiles from: https://github.com/nivekmai/snapmaker-prusa by nivekmai, WilliamBosacker, mrworf + +[vendor] +# Vendor name will be shown by the Config Wizard. +name = Snapmaker +# Configuration version of this file. Config file will only be installed, if the config_version differs. +# This means, the server may force the Slic3r configuration to be downgraded. +config_version = 1.0.0 +# Where to get the updates from? +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Snapmaker/ +# The printer models will be shown by the Configuration Wizard in this order, + +[printer_model:A250] +name = Snapmaker A250 +variants = 0.4 +technology = FFF +bed_model = A250_bed.stl +bed_texture = A250_texture.svg +default_materials = Generic PLA @Snapmaker; Generic PETG @Snapmaker + +[printer_model:A350] +name = Snapmaker A350 +variants = 0.4 +technology = FFF +bed_model = A350_bed.stl +bed_texture = A350_texture.svg +default_materials = Generic PLA @Snapmaker; Generic PETG @Snapmaker + +[print:*common*] +avoid_crossing_perimeters = 1 +avoid_crossing_perimeters_max_detour = 0 +bottom_fill_pattern = monotonic +bottom_solid_layers = 4 +bottom_solid_min_thickness = 0 +bridge_acceleration = 0 +bridge_angle = 0 +bridge_flow_ratio = 1 +bridge_speed = 60 +brim_separation = 0 +brim_type = outer_only +brim_width = 0 +clip_multipart_objects = 1 +complete_objects = 0 +default_acceleration = 0 +dont_support_bridges = 1 +draft_shield = disabled +elefant_foot_compensation = 0.1 +ensure_vertical_shell_thickness = 1 +external_perimeter_extrusion_width = 0.45 +external_perimeter_speed = 50% +external_perimeters_first = 0 +extra_perimeters = 0 +extruder_clearance_height = 25 +extruder_clearance_radius = 75 +extrusion_width = 0.45 +fill_angle = 45 +fill_density = 20% +fill_pattern = gyroid +first_layer_acceleration = 0 +first_layer_acceleration_over_raft = 0 +first_layer_extrusion_width = 0.45 +first_layer_height = 0.2 +first_layer_speed = 15 +first_layer_speed_over_raft = 30 +fuzzy_skin = none +fuzzy_skin_point_dist = 0.8 +fuzzy_skin_thickness = 0.3 +gap_fill_enabled = 1 +gap_fill_speed = 20 +gcode_comments = 0 +gcode_label_objects = 0 +gcode_resolution = 0.0125 +gcode_substitutions = +infill_acceleration = 0 +infill_anchor = 600% +infill_anchor_max = 50 +infill_every_layers = 1 +infill_extruder = 1 +infill_extrusion_width = 0.45 +infill_first = 0 +infill_only_where_needed = 0 +infill_overlap = 25% +infill_speed = 100 +inherits = +interface_shells = 0 +ironing = 0 +ironing_flowrate = 15% +ironing_spacing = 0.25 +ironing_speed = 15 +ironing_type = top +layer_height = 0.2 +max_print_speed = 100 +max_volumetric_speed = 0 +min_skirt_length = 4 +mmu_segmented_region_max_width = 0 +notes = +only_retract_when_crossing_perimeters = 0 +ooze_prevention = 0 +output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode +overhangs = 0 +perimeter_acceleration = 0 +perimeter_extruder = 1 +perimeter_extrusion_width = 0.45 +perimeter_speed = 60 +perimeters = 2 +post_process = +print_settings_id = +raft_contact_distance = 0.1 +raft_expansion = 1.5 +raft_first_layer_density = 90% +raft_first_layer_expansion = 3 +raft_layers = 0 +resolution = 0 +seam_position = nearest +single_extruder_multi_material_priming = 1 +skirt_distance = 5 +skirt_height = 1 +skirts = 3 +slice_closing_radius = 0.049 +slicing_mode = regular +small_perimeter_speed = 25% +solid_infill_below_area = 0 +solid_infill_every_layers = 0 +solid_infill_extruder = 1 +solid_infill_extrusion_width = 0.45 +solid_infill_speed = 80% +spiral_vase = 0 +standby_temperature_delta = -5 +support_material = 0 +support_material_angle = 0 +support_material_auto = 1 +support_material_bottom_contact_distance = 0 +support_material_bottom_interface_layers = -1 +support_material_buildplate_only = 0 +support_material_closing_radius = 2 +support_material_contact_distance = 0.15 +support_material_enforce_layers = 0 +support_material_extruder = 0 +support_material_extrusion_width = 0.38 +support_material_interface_contact_loops = 0 +support_material_interface_extruder = 0 +support_material_interface_layers = 2 +support_material_interface_pattern = rectilinear +support_material_interface_spacing = 0.2 +support_material_interface_speed = 100% +support_material_pattern = rectilinear +support_material_spacing = 2 +support_material_speed = 60 +support_material_style = grid +support_material_synchronize_layers = 0 +support_material_threshold = 45 +support_material_with_sheath = 0 +support_material_xy_spacing = 60% +thick_bridges = 1 +thin_walls = 0 +threads = 8 +top_fill_pattern = monotonic +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 60% +top_solid_layers = 4 +top_solid_min_thickness = 0 +travel_speed = 150 +travel_speed_z = 0 +wipe_tower = 0 +wipe_tower_bridging = 10 +wipe_tower_brim_width = 2 +wipe_tower_no_sparse_layers = 0 +wipe_tower_rotation_angle = 0 +wipe_tower_width = 60 +wipe_tower_x = 170 +wipe_tower_y = 140 +xy_size_compensation = 0 +compatible_printers_condition = nozzle_diameter[0]==0.4 + +[print:0.10mm HIGHDETAIL @SnapmakerA350] +inherits = *common* +layer_height = 0.1 +bottom_solid_layers = 7 +top_solid_layers = 8 +top_solid_min_thickness = 0.8 +bottom_solid_min_thickness = 0.8 +bridge_speed = 40 +infill_speed = 50 +perimeter_speed = 40 +support_material_speed = 40 +max_print_speed = 50 +skirt_distance = 10 +first_layer_speed = 25% +compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="A350" + +[print:0.16mm OPTIMAL @SnapmakerA350] +inherits = *common* +layer_height = 0.16 +top_solid_layers = 6 +bottom_solid_layers = 6 +first_layer_speed = 25% +max_print_speed = 60 +compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="A350" + +[print:0.20mm NORMAL @SnapmakerA350] +inherits = *common* +compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="A350" + +[print:0.20mm FAST @SnapmakerA350] +inherits = 0.20mm NORMAL @SnapmakerA350 +bridge_speed = 80 +gap_fill_speed = 30 +infill_speed = 120 +ironing_speed = 20 +perimeter_speed = 80 +support_material_speed = 80 +compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="A350" + +[print:0.08mm DETAIL @SnapmakerA250] +inherits = 0.20mm NORMAL @SnapmakerA250 +layer_height = 0.08 +infill_speed = 40 +external_perimeter_speed = 10 +perimeter_speed = 15 +top_solid_infill_speed = 20 +travel_speed = 70 +first_layer_extrusion_width = 0.45 +perimeter_extrusion_width = 0.4 +external_perimeter_extrusion_width = 0.4 +infill_extrusion_width = 0.4 +solid_infill_extrusion_width = 0.4 +top_infill_extrusion_width = 0.4 + +[print:0.20mm NORMAL @SnapmakerA250] +inherits = *common* +compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="A250" +first_layer_speed = 15 +gap_fill_speed = 15 +infill_speed = 50 +perimeter_speed = 25 +small_perimeter_speed = 20 +external_perimeter_speed = 15 +support_material_speed = 25 +top_solid_infill_speed = 25 +travel_speed = 80 +max_print_speed = 80 +skirt_distance = 3 +min_skirt_length = 25 + +[print:0.24mm FAST @SnapmakerA250] +inherits = 0.20mm NORMAL @SnapmakerA250 +layer_height = 0.24 +infill_speed = 60 +external_perimeter_speed = 20 +top_solid_infill_speed = 30 + +[filament:*common*] +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 = 1 +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 = 0 +filament_deretract_speed = nil +filament_diameter = 1.75 +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_settings_id = "" +filament_soluble = 0 +filament_spool_weight = 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 = 210 +full_fan_speed_layer = 0 +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 = 210 + +[filament:*PLA*] +inherits = *common* + +[filament:*PETG*] +inherits = *common* +first_layer_bed_temperature = 80 +bed_temperature = 75 +first_layer_temperature = 245 +temperature = 245 +filament_density = 1.27 +disable_fan_first_layers = 3 +min_fan_speed = 20 +max_fan_speed = 50 +fan_below_layer_time = 20 +min_print_speed = 20 +filament_max_volumetric_speed = 8 +filament_type = PETG + +[filament:Generic PLA @Snapmaker] +inherits = *PLA* +filament_vendor = Generic + +[filament:Generic PETG @Snapmaker] +inherits = *PETG* +filament_vendor = Generic + +[filament:Snapmaker PLA @Snapmaker] +inherits = *PLA* +filament_vendor = Snapmaker + +[filament:Overture PLA @Snapmaker] +inherits = *PLA* +filament_vendor = Overture +bed_temperature = 50 +first_layer_temperature = 205 +temperature = 205 +filament_density = 1.24 +disable_fan_first_layers = 1 +min_fan_speed = 100 +max_fan_speed = 100 +full_fan_speed_layer = 3 +fan_below_layer_time = 100 +min_print_speed = 15 +filament_max_volumetric_speed = 0 + +[filament:MatterHackers Build Translucent @Snapmaker] +inherits = *PETG* +filament_vendor = MatterHackers + +[filament:MatterHackers Build White @Snapmaker] +inherits = MatterHackers Build Translucent @Snapmaker +bed_temperature = 65 +first_layer_bed_temperature = 70 +first_layer_temperature = 260 +temperature = 255 +filament_density = 1.28 +disable_fan_first_layers = 3 +full_fan_speed_layer = 5 +min_fan_speed = 40 +max_fan_speed = 100 +fan_below_layer_time = 60 +min_print_speed = 10 + +[filament:Overture TPU @Snapmaker] +inherits = *common* +filament_vendor = Overture +filament_type = FLEX +first_layer_temperature = 220 +temperature = 220 +filament_density = 1.22 +disable_fan_first_layers = 1 +min_fan_speed = 100 +max_fan_speed = 100 +fan_below_layer_time = 100 +min_print_speed = 15 +filament_retract_speed = 40 +filament_deretract_speed = 25 +filament_retract_length = 1.8 +filament_max_volumetric_speed = 3 + +# Common printer preset +[printer:*common*] +bed_shape = 0x0,320x0,320x350,0x350 +color_change_gcode = M600 +cooling_tube_length = 5 +cooling_tube_retraction = 91.5 +default_filament_profile = "" +default_print_profile = +end_gcode = ;End GCode begin\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off\nG90 ;absolute positioning\nG92 E0\nG1 E-2 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG28 X0 Y0 ; home\nM84 ;steppers off\nM107 ;fan off\nM82 ;absolute extrusion mode\n;End GCode end +extra_loading_move = -2 +extruder_colour = "" +extruder_offset = 0x0 +gcode_flavor = marlin +high_current_on_filament_swap = 0 +machine_limits_usage = time_estimate_only +machine_max_acceleration_e = 10000 +machine_max_acceleration_extruding = 1000 +machine_max_acceleration_retracting = 1000 +machine_max_acceleration_travel = 1500 +machine_max_acceleration_x = 3000 +machine_max_acceleration_y = 3000 +machine_max_acceleration_z = 100 +machine_max_feedrate_e = 25 +machine_max_feedrate_x = 150 +machine_max_feedrate_y = 150 +machine_max_feedrate_z = 50 +machine_max_jerk_e = 2.5 +machine_max_jerk_x = 10 +machine_max_jerk_y = 10 +machine_max_jerk_z = 0.2 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +max_layer_height = 0.3 +max_print_height = 330 +min_layer_height = 0.08 +nozzle_diameter = 0.4 +parking_pos_retraction = 92 +pause_print_gcode = +printer_technology = FFF +remaining_times = 0 +retract_before_travel = 2 +retract_before_wipe = 0% +retract_layer_change = 1 +retract_length = 3 +retract_length_toolchange = 10 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 328 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 60 +deretract_speed = 40 +silent_mode = 0 +single_extruder_multi_material = 0 +start_gcode = M82 ;absolute extrusion mode\n;Start GCode begin\nM140 S[first_layer_bed_temperature] ;Start warming Bed\nM104 S[first_layer_temperature] ;Start warming Nozzle\nG28 ; home all axes\nG90 ;absolute positioning\nG1 X-10 Y-10 F3000\nG1 Z0 F1800\nM190 S[first_layer_bed_temperature] ;Wait For Bed Temperature\nM109 S[first_layer_temperature] ;Wait for Hotend Temperature\nG92 E0\nG1 E20 F200 ; Prime extrude for wipe\nG92 E0 +thumbnails = 16x16,220x124 +use_firmware_retraction = 0 +use_relative_e_distances = 0 +use_volumetric_e = 0 +variable_layer_height = 1 +wipe = 0 +z_offset = 0 + +[printer:Snapmaker A350] +inherits = *common* +printer_model = A350 +printer_variant = 0.4 +default_filament_profile = Generic PLA @Snapmaker +default_print_profile = 0.20mm NORMAL @SnapmakerA350 + +[printer:Snapmaker A250] +inherits = *common* +printer_model = A250 +printer_variant = 0.4 +bed_shape = 0x0,230x0,230x250,0x250 +thumbnails = +variable_layer_height = 0 +retract_lift_below = 0 +max_print_height = 235 +start_gcode = M82 ;absolute extrusion mode\n;Start GCode begin\nM140 S[first_layer_bed_temperature] ;Start Warming Bed\nM104 S160 ;Preheat Nozzle\nG28 ; home all axes\nG90 ;absolute positioning\nG1 X-10 Y-10 F3000\nG1 Z0 F1800\nG1 Z5 F5000 ; lift nozzle\nM190 S[first_layer_bed_temperature] ;Wait For Bed Temperature\nM109 S[first_layer_temperature] ;Wait for Hotend Temperature\nG92 E0\nG1 E10 F200\nG1 E-2 F300\nG92 E0\n;Start GCode end\nG1 F3600 E-2 +end_gcode = M140 S0\n;End GCode begin\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG90 ;absolute positioning\nG92 E0\nG1 E-2 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z330 E-1 F80 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y250 F3000 ;so the head is out of the way and Plate is moved forward\nM84 ;steppers off\n;End GCode end\nM82 ;absolute extrusion mode\nM104 S0\nM107\n;End of Gcode +default_filament_profile = Generic PLA @Snapmaker +default_print_profile = 0.20mm NORMAL @SnapmakerA250 diff --git a/resources/profiles/Snapmaker/A250_bed.stl b/resources/profiles/Snapmaker/A250_bed.stl new file mode 100644 index 000000000..c783af9ac Binary files /dev/null and b/resources/profiles/Snapmaker/A250_bed.stl differ diff --git a/resources/profiles/Snapmaker/A250_texture.svg b/resources/profiles/Snapmaker/A250_texture.svg new file mode 100644 index 000000000..7f20598c3 --- /dev/null +++ b/resources/profiles/Snapmaker/A250_texture.svg @@ -0,0 +1,279 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Snapmaker/A250_thumbnail.png b/resources/profiles/Snapmaker/A250_thumbnail.png new file mode 100644 index 000000000..ffc7619e6 Binary files /dev/null and b/resources/profiles/Snapmaker/A250_thumbnail.png differ diff --git a/resources/profiles/Snapmaker/A350_bed.stl b/resources/profiles/Snapmaker/A350_bed.stl new file mode 100644 index 000000000..ee418a68d Binary files /dev/null and b/resources/profiles/Snapmaker/A350_bed.stl differ diff --git a/resources/profiles/Snapmaker/A350_texture.svg b/resources/profiles/Snapmaker/A350_texture.svg new file mode 100644 index 000000000..8e8c47b65 --- /dev/null +++ b/resources/profiles/Snapmaker/A350_texture.svg @@ -0,0 +1,383 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Snapmaker/A350_thumbnail.png b/resources/profiles/Snapmaker/A350_thumbnail.png new file mode 100644 index 000000000..598039a83 Binary files /dev/null and b/resources/profiles/Snapmaker/A350_thumbnail.png differ diff --git a/resources/profiles/Ultimaker.idx b/resources/profiles/Ultimaker.idx index a593d2fb4..605b87e07 100644 --- a/resources/profiles/Ultimaker.idx +++ b/resources/profiles/Ultimaker.idx @@ -1,2 +1,4 @@ min_slic3r_version = 2.4.0-beta0 +1.0.2 Fixed start g-code. +1.0.1 Updated start g-code. 1.0.0 Initial version diff --git a/resources/profiles/Ultimaker.ini b/resources/profiles/Ultimaker.ini index 363e0dec8..f3e30db40 100644 --- a/resources/profiles/Ultimaker.ini +++ b/resources/profiles/Ultimaker.ini @@ -9,7 +9,7 @@ name = Ultimaker # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 1.0.0 +config_version = 1.0.2 # Where to get the updates from? config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Ultimaker/ @@ -396,5 +396,5 @@ printer_notes = Dont remove the following keywords! These keywords are used in t nozzle_diameter = 0.4 default_print_profile = 0.20mm NORMAL @ULTIMAKER2 default_filament_profile = Generic PLA @ULTIMAKER2 -start_gcode = ; Printer_Settings_ID: [printer_settings_id]\n\n; # # # # # # START Header\nG21 ; metric values\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nM107 ; start with the fan off\n\nG28 X0 Y0 Z0 ; move X/Y/Z to endstops\nG1 X1 Y6 F15000 ; move X/Y to start position\nG1 Z35 F9000 ; move Z to start position\n\n; Heat up bed and nozzle\nM190 S{first_layer_bed_temperature[0] - 5} ; wait for bed temperature - 5\nM140 S[first_layer_bed_temperature] ; continue bed heating\nM109 S[first_layer_temperature] ; wait for nozzle temperature\n\nG92 E0 ; zero the extruded length\nG1 F150 E22 ; purge nozzle with filament\nG92 E0 ; zero the extruded length again\nG1 F75 E7 ; additional priming\nG92 E0 ; zero the extruded length again\n\n; # # # # # # END Header +start_gcode = ; Printer_Settings_ID: [printer_settings_id]\n\n; # # # # # # START Header\nG21 ; metric values\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nM107 ; start with the fan off\n\nM140 S[first_layer_bed_temperature] ; start bed heating\n\nG28 X0 Y0 Z0 ; move X/Y/Z to endstops\nG1 X1 Y6 F15000 ; move X/Y to start position\nG1 Z35 F9000 ; move Z to start position\n\n; Wait for bed and nozzle temperatures\nM190 S{first_layer_bed_temperature[0] - 5} ; wait for bed temperature - 5\nM140 S[first_layer_bed_temperature] ; continue bed heating\nM109 S[first_layer_temperature] ; wait for nozzle temperature\n\n; Purge and prime\nM83 ; set extruder to relative mode\nG92 E0 ; reset extrusion distance\nG0 X0 Y1 F10000\nG1 F150 E20 ; compress the bowden tube\nG1 E-8 F1200\nG0 X30 Y1 F5000 \nG0 F1200 Z{first_layer_height/2} ; Cut the connection to priming blob\nG0 X100 F10000 ; disconnect with the prime blob\nG0 X50 ; Avoid the metal clip holding the Ultimaker glass plate\nG0 Z0.2 F720\nG1 E8 F1200\nG1 X80 E3 F1000 ; intro line 1\nG1 X110 E4 F1000 ; intro line 2\nG1 X140 F600 ; drag filament to decompress bowden tube\nG1 X100 F3200 ; wipe backwards a bit\nG1 X150 F3200 ; back to where there is no plastic: avoid dragging\nG92 E0 ; reset extruder reference\nM82 ; set extruder to absolute mode\n\n; # # # # # # END Header end_gcode = ; # # # # # # START Footer\nG91 ; relative coordinates\n;G1 E-1 F1200 ; retract the filament\nG1 Z+15 X-10 Y-10 E-7 F6000 ; move Z a bit\n; G1 X-10 Y-10 F6000 ; move XY a bit\nG1 E-5.5 F300 ; retract the filament\nG28 X0 Y0 ; move X/Y to min endstops, so the head is out of the way\nM104 S0 ; extruder heater off\nM140 S0 ; heated bed heater off (if you have it)\nM84 ; disable motors\n; # # # # # # END Footer\n diff --git a/resources/profiles/Voron/Voron_v1_350_afterburner_thumbnail.png b/resources/profiles/Voron/Voron_v1_350_afterburner_thumbnail.png new file mode 100644 index 000000000..07c3202ca Binary files /dev/null and b/resources/profiles/Voron/Voron_v1_350_afterburner_thumbnail.png differ diff --git a/resources/profiles/Voron/printbed-v1-350.stl b/resources/profiles/Voron/printbed-v1-350.stl new file mode 100644 index 000000000..3a7e16b99 Binary files /dev/null and b/resources/profiles/Voron/printbed-v1-350.stl differ diff --git a/resources/profiles/Zonestar.idx b/resources/profiles/Zonestar.idx new file mode 100644 index 000000000..7259ff432 --- /dev/null +++ b/resources/profiles/Zonestar.idx @@ -0,0 +1,2 @@ +min_slic3r_version = 2.4.1 +1.0.0 Initial version diff --git a/resources/profiles/Zonestar.ini b/resources/profiles/Zonestar.ini new file mode 100644 index 000000000..286000f19 --- /dev/null +++ b/resources/profiles/Zonestar.ini @@ -0,0 +1,744 @@ +# Zonestar print profiles + +# based on https://github.com/slic3r/slic3r-profiles/pull/19 by @ZONESTAR3D + +[vendor] +# Vendor name will be shown by the Config Wizard. +name = Zonestar +# Configuration version of this file. Config file will only be installed, if the config_version differs. +# This means, the server may force the PrusaSlicer configuration to be downgraded. +config_version = 1.0.0 +# Where to get the updates from? +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Zonestar/ + +# The printer models will be shown by the Configuration Wizard in this order, +# also the first model installed & the first nozzle installed will be activated after install. +# Printer model name will be shown by the installation wizard. + +[printer_model:Z5] +name = Zonestar Z5 +variants = 0.4 +technology = FFF +bed_model = bed_220.stl +bed_texture = 220_texture.svg +default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar + +[printer_model:Z6] +name = Zonestar Z6 +variants = 0.4 +technology = FFF +bed_model = bed_150.stl +bed_texture = 150_texture.svg +default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar + +[printer_model:Z5X] +name = Zonestar Z5X +variants = 0.4 +technology = FFF +bed_model = bed_310.stl +bed_texture = 310_texture.svg +default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar + +[printer_model:Z8] +name = Zonestar Z8 +variants = 0.4 +technology = FFF +bed_model = bed_310.stl +bed_texture = 310_texture.svg +default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar + +[printer_model:Z9] +name = Zonestar Z9 +variants = 0.4 +technology = FFF +bed_model = bed_310.stl +bed_texture = 310_texture.svg +default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar + +################### +#### print #### +################### + +[print:*common*] +avoid_crossing_perimeters = 0 +avoid_crossing_perimeters_max_detour = 0 +bottom_fill_pattern = monotonic +bottom_solid_layers = 4 +bottom_solid_min_thickness = 0 +bridge_acceleration = 0 +bridge_angle = 0 +bridge_flow_ratio = 1 +bridge_speed = 60 +brim_separation = 0 +brim_type = outer_only +brim_width = 4 +clip_multipart_objects = 1 +complete_objects = 0 +default_acceleration = 0 +dont_support_bridges = 1 +draft_shield = disabled +elefant_foot_compensation = 0 +ensure_vertical_shell_thickness = 1 +external_perimeter_extrusion_width = 0.45 +external_perimeter_speed = 50% +external_perimeters_first = 0 +extra_perimeters = 0 +extruder_clearance_height = 20 +extruder_clearance_radius = 20 +extrusion_width = 0.45 +fill_angle = 45 +fill_density = 20% +fill_pattern = grid +first_layer_acceleration = 0 +first_layer_acceleration_over_raft = 0 +first_layer_extrusion_width = 0.45 +first_layer_height = 0.3 +first_layer_speed = 25 +first_layer_speed_over_raft = 30 +fuzzy_skin = none +fuzzy_skin_point_dist = 0.8 +fuzzy_skin_thickness = 0.3 +gap_fill_enabled = 1 +gap_fill_speed = 20 +gcode_comments = 0 +gcode_label_objects = 0 +gcode_resolution = 0.0125 +gcode_substitutions = +infill_acceleration = 0 +infill_anchor = 600% +infill_anchor_max = 50 +infill_every_layers = 1 +infill_extruder = 1 +infill_extrusion_width = 0.45 +infill_first = 0 +infill_only_where_needed = 0 +infill_overlap = 25% +infill_speed = 60 +inherits = +interface_shells = 0 +ironing = 0 +ironing_flowrate = 15% +ironing_spacing = 0.1 +ironing_speed = 15 +ironing_type = top +layer_height = 0.2 +max_print_speed = 80 +max_volumetric_speed = 0 +min_skirt_length = 0 +mmu_segmented_region_max_width = 0 +notes = +only_retract_when_crossing_perimeters = 0 +ooze_prevention = 0 +output_filename_format = {printer_model}_{input_filename_base}.gcode +overhangs = 1 +perimeter_acceleration = 0 +perimeter_extruder = 1 +perimeter_extrusion_width = 0.45 +perimeter_speed = 50 +perimeters = 3 +post_process = +print_settings_id = +raft_contact_distance = 0.1 +raft_expansion = 1.5 +raft_first_layer_density = 90% +raft_first_layer_expansion = 3 +raft_layers = 0 +resolution = 0 +seam_position = aligned +single_extruder_multi_material_priming = 0 +skirt_distance = 6 +skirt_height = 1 +skirts = 0 +slice_closing_radius = 0.049 +slicing_mode = regular +small_perimeter_speed = 15 +solid_infill_below_area = 0 +solid_infill_every_layers = 0 +solid_infill_extruder = 1 +solid_infill_extrusion_width = 0.45 +solid_infill_speed = 20 +spiral_vase = 0 +standby_temperature_delta = -5 +support_material = 0 +support_material_angle = 0 +support_material_auto = 1 +support_material_bottom_contact_distance = 0 +support_material_bottom_interface_layers = -1 +support_material_buildplate_only = 0 +support_material_closing_radius = 2 +support_material_contact_distance = 0.2 +support_material_enforce_layers = 0 +support_material_extruder = 1 +support_material_extrusion_width = 0.35 +support_material_interface_contact_loops = 0 +support_material_interface_extruder = 1 +support_material_interface_layers = 3 +support_material_interface_pattern = rectilinear +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_style = grid +support_material_synchronize_layers = 0 +support_material_threshold = 0 +support_material_with_sheath = 1 +support_material_xy_spacing = 50% +thick_bridges = 1 +thin_walls = 0 +threads = 4 +top_fill_pattern = monotonic +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 15 +top_solid_layers = 5 +top_solid_min_thickness = 0 +travel_speed = 100 +travel_speed_z = 0 +wipe_tower = 0 +xy_size_compensation = 0 +compatible_printers_condition = nozzle_diameter[0]==0.4 and num_extruders==1 + +[print:0.20mm @Zonestar MULTI] +inherits = *common* +wipe_tower = 1 +wipe_tower_x = 125 +wipe_tower_y = 195 +compatible_printers_condition = nozzle_diameter[0]==0.4 and num_extruders>1 + + +[print:0.20mm @Zonestar SINGLE] +inherits = *common* + +################### +#### filament #### +################### +[filament:Generic ABS @Zonestar] +bed_temperature = 100 +bridge_fan_speed = 30 +cooling = 1 +disable_fan_first_layers = 3 +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 = 0 +filament_diameter = 1.75 +filament_load_time = 0 +filament_loading_speed = 28 +filament_loading_speed_start = 3 +filament_minimal_purge_on_wipe_tower = 50 +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_type = ABS +filament_unloading_speed = 40 +filament_unloading_speed_start = 60 +filament_vendor = Generic +first_layer_bed_temperature = 100 +first_layer_temperature = 245 +max_fan_speed = 0 +min_fan_speed = 0 +min_print_speed = 15 +slowdown_below_layer_time = 25 +temperature = 245 + +[filament:Generic PETG @Zonestar] +bed_temperature = 70 +bridge_fan_speed = 100 +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 = 1 +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_diameter = 1.75 +filament_loading_speed = 28 +filament_loading_speed_start = 3 +filament_max_volumetric_speed = 0 +filament_minimal_purge_on_wipe_tower = 50 +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_spool_weight = 0 +filament_toolchange_delay = 0 +filament_type = PETG +filament_unloading_speed = 40 +filament_unloading_speed_start = 60 +filament_vendor = Generic +first_layer_bed_temperature = 70 +first_layer_temperature = 210 +full_fan_speed_layer = 0 +max_fan_speed = 50 +min_fan_speed = 25 +min_print_speed = 10 +slowdown_below_layer_time = 5 +start_filament_gcode = "; Filament gcode\n" +temperature = 210 + +[filament:Generic PLA @Zonestar] +bed_temperature = 60 +bridge_fan_speed = 100 +cooling = 1 +disable_fan_first_layers = 3 +extrusion_multiplier = 1 +fan_always_on = 1 +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 = 0 +filament_diameter = 1.75 +filament_loading_speed = 28 +filament_loading_speed_start = 3 +filament_max_volumetric_speed = 0 +filament_minimal_purge_on_wipe_tower = 50 +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_toolchange_delay = 0 +filament_type = PLA +filament_unloading_speed = 40 +filament_unloading_speed_start = 60 +filament_vendor = Generic +filament_wipe = nil +first_layer_bed_temperature = 60 +first_layer_temperature = 200 +full_fan_speed_layer = 5 +max_fan_speed = 100 +min_fan_speed = 50 +min_print_speed = 10 +slowdown_below_layer_time = 5 +temperature = 200 + +[filament:Generic TPU @Zonestar] +bed_temperature = 50 +bridge_fan_speed = 100 +cooling = 1 +disable_fan_first_layers = 3 +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_diameter = 1.75 +filament_loading_speed = 28 +filament_loading_speed_start = 3 +filament_max_volumetric_speed = 3 +filament_minimal_purge_on_wipe_tower = 50 +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_toolchange_delay = 0 +filament_type = FLEX +filament_unloading_speed = 30 +filament_unloading_speed_start = 30 +filament_vendor = Generic +first_layer_bed_temperature = 50 +first_layer_temperature = 225 +full_fan_speed_layer = 0 +max_fan_speed = 100 +min_fan_speed = 50 +min_print_speed = 10 +slowdown_below_layer_time = 5 +temperature = 225 + +################### +#### printer #### +################### +[printer:*common*] +printer_technology = FFF +before_layer_gcode = +between_objects_gcode = +color_change_gcode = M600 +cooling_tube_retraction = 35 +default_filament_profile = +default_print_profile = +deretract_speed = +end_gcode = +extra_loading_move = -2 +gcode_flavor = marlin2 +high_current_on_filament_swap = 0 +host_type = octoprint +layer_gcode = +machine_limits_usage = ignore +machine_max_acceleration_e = 10000 +machine_max_acceleration_extruding = 1500 +machine_max_acceleration_retracting = 1500 +machine_max_acceleration_travel = 1500 +machine_max_acceleration_x = 9000 +machine_max_acceleration_y = 9000 +machine_max_acceleration_z = 500 +machine_max_feedrate_e = 120 +machine_max_feedrate_x = 500 +machine_max_feedrate_y = 500 +machine_max_feedrate_z = 12 +machine_max_jerk_e = 2.5 +machine_max_jerk_x = 10 +machine_max_jerk_y = 10 +machine_max_jerk_z = 0.2 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +max_layer_height = 0.3 +min_layer_height = 0.1 +nozzle_diameter = 0.4 +pause_print_gcode = +remaining_times = 0 +retract_speed = 40 +silent_mode = 0 +single_extruder_multi_material = 0 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 +use_firmware_retraction = 0 +use_relative_e_distances = 1 +use_volumetric_e = 0 +variable_layer_height = 0 +wipe = 0 +z_offset = 0 + +[printer:Zonestar Z5+M2 HOTEND] +inherits = *common* +printer_model = Z5 +printer_variant = 0.4 +bed_shape = 0x0,220x0,220x220,0x220 +default_filament_profile = Generic PLA @Zonestar +default_print_profile = 0.20mm @Zonestar MULTI +deretract_speed = 30,30 +before_layer_gcode = G92 E0 +end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #FF0000;#00FF00 +extruder_offset = 0x0,0x0 +max_layer_height = 0.3,0.3 +max_print_height = 220 +min_layer_height = 0.15,0.15 +nozzle_diameter = 0.4,0.4 +retract_before_travel = 2,2 +retract_before_wipe = 0% +retract_layer_change = 0 +retract_length = 10,10 +retract_length_toolchange = 0,0 +retract_lift = 0,0 +retract_lift_above = 0,0 +retract_lift_below = 0,0 +retract_restart_extra = 0,0 +retract_restart_extra_toolchange = 0,0 +retract_speed = 35,35 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 +use_relative_e_distances = 1 +wipe = 0,0 + + +[printer:Zonestar Z6] +inherits = *common* +printer_model = Z6 +printer_variant = 0.4 +bed_shape = 0x0,150x0,150x150,0x150 +default_filament_profile = Generic PLA @Zonestar +default_print_profile = 0.20mm @Zonestar SINGLE +deretract_speed = 30 +end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #00FF00 +extruder_offset = 0x0 +min_layer_height = 0.1 +max_layer_height = 0.3 +max_print_height = 150 +nozzle_diameter = 0.4 +retract_before_travel = 2 +retract_before_wipe = 0% +retract_layer_change = 0 +retract_length = 6.5 +retract_length_toolchange = 0 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 40 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000; lift nozzle\nG1 X5 Y5 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y100 E8 F600 ; prime nozzle\nG1 Y50 F5000 ; quick wipe\nG92 E0 +use_relative_e_distances = 0 + +[printer:Zonestar Z5X] +inherits = *common* +printer_model = Z5X +printer_variant = 0.4 +bed_shape = 0x0,310x0,310x310,0x310 +default_filament_profile = Generic PLA @Zonestar +default_print_profile = 0.20mm @Zonestar SINGLE +deretract_speed = 30 +end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #00FF00 +extruder_offset = 0x0 +min_layer_height = 0.1 +max_layer_height = 0.3 +max_print_height = 400 +nozzle_diameter = 0.4 +retract_before_travel = 2 +retract_before_wipe = 0% +retract_layer_change = 0 +retract_length = 6.5 +retract_length_toolchange = 0 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 40 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000; lift nozzle\nG1 X5 Y5 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y50 F5000 ; quick wipe\nG92 E0 +use_relative_e_distances = 0 + +#Z8 with different types of hotend +[printer:Zonestar Z8+M3 HOTEND] +inherits = *common* +printer_model = Z8 +printer_variant = 0.4 +bed_shape = 0x0,310x0,310x310,0x310 +default_filament_profile = Generic PLA @Zonestar +default_print_profile = 0.20mm @Zonestar MULTI +deretract_speed = 30,30,30 +before_layer_gcode = G92 E0 +end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #FF0000;#00FF00;#0000FF +extruder_offset = 0x0,0x0,0x0 +max_layer_height = 0.3,0.3,0.3 +max_print_height = 400 +min_layer_height = 0.15,0.15,0.15 +nozzle_diameter = 0.4,0.4,0.4 +retract_before_travel = 2,2,2 +retract_before_wipe = 0%,0%,0% +retract_layer_change = 0,0,0 +retract_length = 10,10,10 +retract_length_toolchange = 0,0,0 +retract_lift = 0,0,0 +retract_lift_above = 0,0,0 +retract_lift_below = 0,0,0 +retract_restart_extra = 0,0,0 +retract_restart_extra_toolchange = 0,0,0 +retract_speed = 35,35,35 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 +use_relative_e_distances = 1 +wipe = 0,0,0 +layer_gcode = G92 E0 + +[printer:Zonestar Z8+M4 HOTEND] +inherits = *common* +printer_model = Z8 +printer_variant = 0.4 +bed_shape = 0x0,310x0,310x310,0x310 +default_filament_profile = Generic PLA @Zonestar +default_print_profile = 0.20mm @Zonestar MULTI +deretract_speed = 30,30,30,30 +before_layer_gcode = G92 E0 +end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #E0E0E0;#FF0000;#00FF00;#0000FF +extruder_offset = 0x0,0x0,0x0,0x0 +max_layer_height = 0.3,0.3,0.3,0.3 +max_print_height = 400 +min_layer_height = 0.15,0.15,0.15,0.15 +nozzle_diameter = 0.4,0.4,0.4,0.4 +retract_before_travel = 2,2,2,2 +retract_before_wipe = 0%,0%,0%,0% +retract_layer_change = 0,0,0,0 +retract_length = 10,10,10,10 +retract_length_toolchange = 0,0,0,0 +retract_lift = 0,0,0,0 +retract_lift_above = 0,0,0,0 +retract_lift_below = 0,0,0,0 +retract_restart_extra = 0,0,0,0 +retract_restart_extra_toolchange = 0,0,0,0 +retract_speed = 35,35,35,35 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 +use_relative_e_distances = 1 +wipe = 0,0,0,0 +layer_gcode = G92 E0 + +[printer:Zonestar Z8+E4 HOTEND] +inherits = *common* +printer_model = Z8 +printer_variant = 0.4 +bed_shape = 0x0,310x0,310x310,0x310 +default_filament_profile = Generic PLA @Zonestar +default_print_profile = 0.20mm @Zonestar MULTI +deretract_speed = 30,30,30,30 +before_layer_gcode = G92 E0 +end_gcode = G1 E-30 F2100 ;pull out filament\nG28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #E0E0E0;#FF0000;#00FF00;#0000FF +extruder_offset = 0x0,0x0,0x0,0x0 +max_layer_height = 0.3,0.3,0.3,0.3 +max_print_height = 400 +min_layer_height = 0.1,0.1,0.1,0.1 +nozzle_diameter = 0.4,0.4,0.4,0.4 +retract_before_travel = 2,2,2,2 +retract_before_wipe = 0%,0%,0%,0% +retract_layer_change = 0,0,0,0 +retract_length = 8,8,8,8 +retract_length_toolchange = 0,0,0,0 +retract_lift = 0,0,0,0 +retract_lift_above = 0,0,0,0 +retract_lift_below = 0,0,0,0 +retract_restart_extra = 0,0,0,0 +retract_restart_extra_toolchange = 0,0,0,0 +retract_speed = 35,35,35,35 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 +toolchange_gcode = G92 E0\nG1 E-30 F1200;pull filament\nG92 E0\nT[next_extruder];Change extruder\nG92 E0\nG1 E15 F1800; push filament-1\nG1 E25 F900; pushfilament-2\nG1 E29 F1200; push filament-3\nG92 E0 +use_relative_e_distances = 1 +wipe = 0,0,0,0 +layer_gcode = G92 E0 + +[printer:Zonestar Z8+DDE] +inherits = *common* +printer_model = Z8 +printer_variant = 0.4 +bed_shape = 0x0,310x0,310x310,0x310 +default_filament_profile = Generic TPU @Zonestar +default_print_profile = 0.20mm @Zonestar SINGLE +deretract_speed = 30 +end_gcode = G28 X\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #00FF00 +extruder_offset = 0x0 +max_layer_height = 0.3 +max_print_height = 400 +min_layer_height = 0.1 +nozzle_diameter = 0.4 +retract_before_travel = 2 +retract_before_wipe = 0% +retract_layer_change = 0 +retract_length = 6.5 +retract_length_toolchange = 0 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 40 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 +use_relative_e_distances = 0 + +#Z9 with different types of hotend +[printer:Zonestar Z9+M3 HOTEND] +inherits = *common* +printer_model = Z9 +printer_variant = 0.4 +bed_shape = 0x0,310x0,310x310,0x310 +default_filament_profile = Generic PLA @Zonestar +default_print_profile = 0.20mm @Zonestar MULTI +deretract_speed = 30,30,30 +before_layer_gcode = G92 E0 +end_gcode = G28 XY\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #FF0000;#00FF00;#0000FF +extruder_offset = 0x0,0x0,0x0 +max_layer_height = 0.3,0.3,0.3 +max_print_height = 400 +min_layer_height = 0.15,0.15,0.15 +nozzle_diameter = 0.4,0.4,0.4 +retract_before_travel = 2,2,2 +retract_before_wipe = 0%,0%,0% +retract_layer_change = 0,0,0 +retract_length = 10,10,10 +retract_length_toolchange = 0,0,0 +retract_lift = 0,0,0 +retract_lift_above = 0,0,0 +retract_lift_below = 0,0,0 +retract_restart_extra = 0,0,0 +retract_restart_extra_toolchange = 0,0,0 +retract_speed = 35,35,35 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 +use_relative_e_distances = 1 +wipe = 0,0,0 +layer_gcode = G92 E0 + +[printer:Zonestar Z9+M4 HOTEND] +inherits = *common* +printer_model = Z9 +printer_variant = 0.4 +bed_shape = 0x0,310x0,310x310,0x310 +default_filament_profile = Generic PLA @Zonestar +default_print_profile = 0.20mm @Zonestar MULTI +deretract_speed = 30,30,30,30 +before_layer_gcode = G92 E0 +end_gcode = G28 XY\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #E0E0E0;#FF0000;#00FF00;#0000FF +extruder_offset = 0x0,0x0,0x0,0x0 +max_layer_height = 0.3,0.3,0.3,0.3 +max_print_height = 400 +min_layer_height = 0.15,0.15,0.15,0.15 +nozzle_diameter = 0.4,0.4,0.4,0.4 +retract_before_travel = 2,2,2,2 +retract_before_wipe = 0%,0%,0%,0% +retract_layer_change = 0,0,0,0 +retract_length = 10,10,10,10 +retract_length_toolchange = 0,0,0,0 +retract_lift = 0,0,0,0 +retract_lift_above = 0,0,0,0 +retract_lift_below = 0,0,0,0 +retract_restart_extra = 0,0,0,0 +retract_restart_extra_toolchange = 0,0,0,0 +retract_speed = 35,35,35,35 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 +use_relative_e_distances = 1 +wipe = 0,0,0,0 +layer_gcode = G92 E0 + +[printer:Zonestar Z9+E4 HOTEND] +inherits = *common* +printer_model = Z9 +printer_variant = 0.4 +bed_shape = 0x0,310x0,310x310,0x310 +default_filament_profile = Generic PLA @Zonestar +default_print_profile = 0.20mm @Zonestar MULTI +deretract_speed = 30,30,30,30 +before_layer_gcode = G92 E0 +end_gcode = G1 E-30 F2100 ;pull out filament\nG28 XY\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #E0E0E0;#FF0000;#00FF00;#0000FF +extruder_offset = 0x0,0x0,0x0,0x0 +max_layer_height = 0.3,0.3,0.3,0.3 +max_print_height = 400 +min_layer_height = 0.1,0.1,0.1,0.1 +nozzle_diameter = 0.4,0.4,0.4,0.4 +retract_before_travel = 2,2,2,2 +retract_before_wipe = 0%,0%,0%,0% +retract_layer_change = 0,0,0,0 +retract_length = 8,8,8,8 +retract_length_toolchange = 0,0,0,0 +retract_lift = 0,0,0,0 +retract_lift_above = 0,0,0,0 +retract_lift_below = 0,0,0,0 +retract_restart_extra = 0,0,0,0 +retract_restart_extra_toolchange = 0,0,0,0 +retract_speed = 35,35,35,35 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nT[initial_tool]\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 +toolchange_gcode = G92 E0\nG1 E-30 F1200;pull filament\nG92 E0\nT[next_extruder];Change extruder\nG92 E0\nG1 E15 F1800; push filament-1\nG1 E25 F900; pushfilament-2\nG1 E29 F1200; push filament-3\nG92 E0 +use_relative_e_distances = 1 +wipe = 0,0,0,0 +layer_gcode = G92 E0 + +[printer:Zonestar Z9+DDE] +inherits = *common* +printer_model = Z9 +printer_variant = 0.4 +bed_shape = 0x0,310x0,310x310,0x310 +default_filament_profile = Generic TPU @Zonestar +default_print_profile = 0.20mm @Zonestar SINGLE +deretract_speed = 30 +end_gcode = G28 XY\nM106 S0 ; turn off FAN\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors +extruder_colour = #00FF00 +extruder_offset = 0x0 +max_layer_height = 0.3 +max_print_height = 400 +min_layer_height = 0.1 +nozzle_diameter = 0.4 +retract_before_travel = 2 +retract_before_wipe = 0% +retract_layer_change = 0 +retract_length = 6.5 +retract_length_toolchange = 0 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 40 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 +use_relative_e_distances = 0 diff --git a/resources/profiles/Zonestar/150_texture.svg b/resources/profiles/Zonestar/150_texture.svg new file mode 100644 index 000000000..32e4ec4a3 --- /dev/null +++ b/resources/profiles/Zonestar/150_texture.svg @@ -0,0 +1,142 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Zonestar/220_texture.svg b/resources/profiles/Zonestar/220_texture.svg new file mode 100644 index 000000000..079e498ec --- /dev/null +++ b/resources/profiles/Zonestar/220_texture.svg @@ -0,0 +1,198 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Zonestar/310_texture.svg b/resources/profiles/Zonestar/310_texture.svg new file mode 100644 index 000000000..1d6039019 --- /dev/null +++ b/resources/profiles/Zonestar/310_texture.svg @@ -0,0 +1,270 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Zonestar/Z5X_thumbnail.png b/resources/profiles/Zonestar/Z5X_thumbnail.png new file mode 100644 index 000000000..5abdfea42 Binary files /dev/null and b/resources/profiles/Zonestar/Z5X_thumbnail.png differ diff --git a/resources/profiles/Zonestar/Z5_thumbnail.png b/resources/profiles/Zonestar/Z5_thumbnail.png new file mode 100644 index 000000000..5a7fc70c4 Binary files /dev/null and b/resources/profiles/Zonestar/Z5_thumbnail.png differ diff --git a/resources/profiles/Zonestar/Z6_thumbnail.png b/resources/profiles/Zonestar/Z6_thumbnail.png new file mode 100644 index 000000000..62f25553e Binary files /dev/null and b/resources/profiles/Zonestar/Z6_thumbnail.png differ diff --git a/resources/profiles/Zonestar/Z8_thumbnail.png b/resources/profiles/Zonestar/Z8_thumbnail.png new file mode 100644 index 000000000..24c065756 Binary files /dev/null and b/resources/profiles/Zonestar/Z8_thumbnail.png differ diff --git a/resources/profiles/Zonestar/Z9_thumbnail.png b/resources/profiles/Zonestar/Z9_thumbnail.png new file mode 100644 index 000000000..e8b093cc5 Binary files /dev/null and b/resources/profiles/Zonestar/Z9_thumbnail.png differ diff --git a/resources/profiles/Zonestar/bed_150.stl b/resources/profiles/Zonestar/bed_150.stl new file mode 100644 index 000000000..bb1854271 Binary files /dev/null and b/resources/profiles/Zonestar/bed_150.stl differ diff --git a/resources/profiles/Zonestar/bed_220.stl b/resources/profiles/Zonestar/bed_220.stl new file mode 100644 index 000000000..8610b8ff6 Binary files /dev/null and b/resources/profiles/Zonestar/bed_220.stl differ diff --git a/resources/profiles/Zonestar/bed_310.stl b/resources/profiles/Zonestar/bed_310.stl new file mode 100644 index 000000000..2e5f54442 Binary files /dev/null and b/resources/profiles/Zonestar/bed_310.stl differ diff --git a/resources/shaders/110/background.fs b/resources/shaders/110/background.fs new file mode 100644 index 000000000..b14844089 --- /dev/null +++ b/resources/shaders/110/background.fs @@ -0,0 +1,11 @@ +#version 110 + +uniform vec4 top_color; +uniform vec4 bottom_color; + +varying vec2 tex_coord; + +void main() +{ + gl_FragColor = mix(bottom_color, top_color, tex_coord.y); +} diff --git a/resources/shaders/110/background.vs b/resources/shaders/110/background.vs new file mode 100644 index 000000000..9b56ab43a --- /dev/null +++ b/resources/shaders/110/background.vs @@ -0,0 +1,12 @@ +#version 110 + +attribute vec3 v_position; +attribute vec2 v_tex_coord; + +varying vec2 tex_coord; + +void main() +{ + tex_coord = v_tex_coord; + gl_Position = vec4(v_position, 1.0); +} diff --git a/resources/shaders/options_110.fs b/resources/shaders/110/flat.fs similarity index 100% rename from resources/shaders/options_110.fs rename to resources/shaders/110/flat.fs diff --git a/resources/shaders/110/flat.vs b/resources/shaders/110/flat.vs new file mode 100644 index 000000000..d9063f0c7 --- /dev/null +++ b/resources/shaders/110/flat.vs @@ -0,0 +1,11 @@ +#version 110 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +attribute vec3 v_position; + +void main() +{ + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/110/flat_clip.fs b/resources/shaders/110/flat_clip.fs new file mode 100644 index 000000000..ececb8eb1 --- /dev/null +++ b/resources/shaders/110/flat_clip.fs @@ -0,0 +1,15 @@ +#version 110 + +const vec3 ZERO = vec3(0.0, 0.0, 0.0); + +uniform vec4 uniform_color; + +varying vec3 clipping_planes_dots; + +void main() +{ + if (any(lessThan(clipping_planes_dots, ZERO))) + discard; + + gl_FragColor = uniform_color; +} diff --git a/resources/shaders/110/flat_clip.vs b/resources/shaders/110/flat_clip.vs new file mode 100644 index 000000000..cdf7d4b3b --- /dev/null +++ b/resources/shaders/110/flat_clip.vs @@ -0,0 +1,23 @@ +#version 110 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat4 volume_world_matrix; + +// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane. +uniform vec2 z_range; +// Clipping plane - general orientation. Used by the SLA gizmo. +uniform vec4 clipping_plane; + +attribute vec3 v_position; + +varying vec3 clipping_planes_dots; + +void main() +{ + // Fill in the scalars for fragment shader clipping. Fragments with any of these components lower than zero are discarded. + vec4 world_pos = volume_world_matrix * vec4(v_position, 1.0); + clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z); + + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/110/flat_texture.fs b/resources/shaders/110/flat_texture.fs new file mode 100644 index 000000000..ffe193b1c --- /dev/null +++ b/resources/shaders/110/flat_texture.fs @@ -0,0 +1,10 @@ +#version 110 + +uniform sampler2D uniform_texture; + +varying vec2 tex_coord; + +void main() +{ + gl_FragColor = texture2D(uniform_texture, tex_coord); +} diff --git a/resources/shaders/110/flat_texture.vs b/resources/shaders/110/flat_texture.vs new file mode 100644 index 000000000..dc4868b04 --- /dev/null +++ b/resources/shaders/110/flat_texture.vs @@ -0,0 +1,15 @@ +#version 110 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +attribute vec3 v_position; +attribute vec2 v_tex_coord; + +varying vec2 tex_coord; + +void main() +{ + tex_coord = v_tex_coord; + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/110/gouraud.fs b/resources/shaders/110/gouraud.fs new file mode 100644 index 000000000..0742f6cc8 --- /dev/null +++ b/resources/shaders/110/gouraud.fs @@ -0,0 +1,86 @@ +#version 110 + +const vec3 ZERO = vec3(0.0, 0.0, 0.0); +const float EPSILON = 0.0001; + +struct PrintVolumeDetection +{ + // 0 = rectangle, 1 = circle, 2 = custom, 3 = invalid + int type; + // type = 0 (rectangle): + // x = min.x, y = min.y, z = max.x, w = max.y + // type = 1 (circle): + // x = center.x, y = center.y, z = radius + vec4 xy_data; + // x = min z, y = max z + vec2 z_data; +}; + +struct SlopeDetection +{ + bool actived; + float normal_z; + mat3 volume_world_normal_matrix; +}; + +uniform vec4 uniform_color; +uniform SlopeDetection slope; + +uniform bool offset_depth_buffer; + +#ifdef ENABLE_ENVIRONMENT_MAP + uniform sampler2D environment_tex; + uniform bool use_environment_tex; +#endif // ENABLE_ENVIRONMENT_MAP + +uniform PrintVolumeDetection print_volume; + +varying vec3 clipping_planes_dots; + +// x = diffuse, y = specular; +varying vec2 intensity; + +varying vec4 world_pos; +varying float world_normal_z; +varying vec3 eye_normal; + +void main() +{ + if (any(lessThan(clipping_planes_dots, ZERO))) + discard; + vec3 color = uniform_color.rgb; + float alpha = uniform_color.a; + + if (slope.actived && world_normal_z < slope.normal_z - EPSILON) { + color = vec3(0.7, 0.7, 1.0); + alpha = 1.0; + } + + // if the fragment is outside the print volume -> use darker color + vec3 pv_check_min = ZERO; + vec3 pv_check_max = ZERO; + if (print_volume.type == 0) { + // rectangle + pv_check_min = world_pos.xyz - vec3(print_volume.xy_data.x, print_volume.xy_data.y, print_volume.z_data.x); + pv_check_max = world_pos.xyz - vec3(print_volume.xy_data.z, print_volume.xy_data.w, print_volume.z_data.y); + } + else if (print_volume.type == 1) { + // circle + float delta_radius = print_volume.xy_data.z - distance(world_pos.xy, print_volume.xy_data.xy); + pv_check_min = vec3(delta_radius, 0.0, world_pos.z - print_volume.z_data.x); + pv_check_max = vec3(0.0, 0.0, world_pos.z - print_volume.z_data.y); + } + color = (any(lessThan(pv_check_min, ZERO)) || any(greaterThan(pv_check_max, ZERO))) ? mix(color, ZERO, 0.3333) : color; + +#ifdef ENABLE_ENVIRONMENT_MAP + if (use_environment_tex) + gl_FragColor = vec4(0.45 * texture2D(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color * intensity.x, alpha); + else +#endif + gl_FragColor = vec4(vec3(intensity.y) + color * intensity.x, alpha); + + // In the support painting gizmo and the seam painting gizmo are painted triangles rendered over the already + // rendered object. To resolved z-fighting between previously rendered object and painted triangles, values + // inside the depth buffer are offset by small epsilon for painted triangles inside those gizmos. + gl_FragDepth = gl_FragCoord.z - (offset_depth_buffer ? EPSILON : 0.0); +} diff --git a/resources/shaders/110/gouraud.vs b/resources/shaders/110/gouraud.vs new file mode 100644 index 000000000..70f71f886 --- /dev/null +++ b/resources/shaders/110/gouraud.vs @@ -0,0 +1,77 @@ +#version 110 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SPECULAR (0.0 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SHININESS 5.0 + +#define INTENSITY_AMBIENT 0.3 + +const vec3 ZERO = vec3(0.0, 0.0, 0.0); + +struct SlopeDetection +{ + bool actived; + float normal_z; + mat3 volume_world_normal_matrix; +}; + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 normal_matrix; +uniform mat4 volume_world_matrix; +uniform SlopeDetection slope; + +// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane. +uniform vec2 z_range; +// Clipping plane - general orientation. Used by the SLA gizmo. +uniform vec4 clipping_plane; + +attribute vec3 v_position; +attribute vec3 v_normal; + +// x = diffuse, y = specular; +varying vec2 intensity; + +varying vec3 clipping_planes_dots; + +varying vec4 world_pos; +varying float world_normal_z; +varying vec3 eye_normal; + +void main() +{ + // First transform the normal into camera space and normalize the result. + eye_normal = normalize(normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(eye_normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 position = view_model_matrix * vec4(v_position, 1.0); + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position.xyz), reflect(-LIGHT_TOP_DIR, eye_normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + // Point in homogenous coordinates. + world_pos = volume_world_matrix * vec4(v_position, 1.0); + + // z component of normal vector in world coordinate used for slope shading + world_normal_z = slope.actived ? (normalize(slope.volume_world_normal_matrix * v_normal)).z : 0.0; + + gl_Position = projection_matrix * position; + // Fill in the scalars for fragment shader clipping. Fragments with any of these components lower than zero are discarded. + clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z); +} diff --git a/resources/shaders/110/gouraud_light.fs b/resources/shaders/110/gouraud_light.fs new file mode 100644 index 000000000..970185a00 --- /dev/null +++ b/resources/shaders/110/gouraud_light.fs @@ -0,0 +1,12 @@ +#version 110 + +uniform vec4 uniform_color; +uniform float emission_factor; + +// x = tainted, y = specular; +varying vec2 intensity; + +void main() +{ + gl_FragColor = vec4(vec3(intensity.y) + uniform_color.rgb * (intensity.x + emission_factor), uniform_color.a); +} diff --git a/resources/shaders/110/gouraud_light.vs b/resources/shaders/110/gouraud_light.vs new file mode 100644 index 000000000..a03653b8a --- /dev/null +++ b/resources/shaders/110/gouraud_light.vs @@ -0,0 +1,45 @@ +#version 110 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 normal_matrix; + +attribute vec3 v_position; +attribute vec3 v_normal; + +// x = tainted, y = specular; +varying vec2 intensity; + +void main() +{ + // First transform the normal into camera space and normalize the result. + vec3 normal = normalize(normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 position = view_model_matrix * vec4(v_position, 1.0); + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position.xyz), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + gl_Position = projection_matrix * position; +} diff --git a/resources/shaders/110/gouraud_light_instanced.fs b/resources/shaders/110/gouraud_light_instanced.fs new file mode 100644 index 000000000..970185a00 --- /dev/null +++ b/resources/shaders/110/gouraud_light_instanced.fs @@ -0,0 +1,12 @@ +#version 110 + +uniform vec4 uniform_color; +uniform float emission_factor; + +// x = tainted, y = specular; +varying vec2 intensity; + +void main() +{ + gl_FragColor = vec4(vec3(intensity.y) + uniform_color.rgb * (intensity.x + emission_factor), uniform_color.a); +} diff --git a/resources/shaders/110/gouraud_light_instanced.vs b/resources/shaders/110/gouraud_light_instanced.vs new file mode 100644 index 000000000..87748ce6f --- /dev/null +++ b/resources/shaders/110/gouraud_light_instanced.vs @@ -0,0 +1,50 @@ +#version 110 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 normal_matrix; + +// vertex attributes +attribute vec3 v_position; +attribute vec3 v_normal; +// instance attributes +attribute vec3 i_offset; +attribute vec2 i_scales; + +// x = tainted, y = specular; +varying vec2 intensity; + +void main() +{ + // First transform the normal into camera space and normalize the result. + vec3 eye_normal = normalize(normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(eye_normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 world_position = vec4(v_position * vec3(vec2(1.5 * i_scales.x), 1.5 * i_scales.y) + i_offset - vec3(0.0, 0.0, 0.5 * i_scales.y), 1.0); + vec4 eye_position = view_model_matrix * world_position; + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(eye_position.xyz), reflect(-LIGHT_TOP_DIR, eye_normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + gl_Position = projection_matrix * eye_position; +} diff --git a/resources/shaders/110/imgui.fs b/resources/shaders/110/imgui.fs new file mode 100644 index 000000000..4b0e27ce9 --- /dev/null +++ b/resources/shaders/110/imgui.fs @@ -0,0 +1,11 @@ +#version 110 + +uniform sampler2D Texture; + +varying vec2 Frag_UV; +varying vec4 Frag_Color; + +void main() +{ + gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV.st); +} \ No newline at end of file diff --git a/resources/shaders/110/imgui.vs b/resources/shaders/110/imgui.vs new file mode 100644 index 000000000..100813e2b --- /dev/null +++ b/resources/shaders/110/imgui.vs @@ -0,0 +1,17 @@ +#version 110 + +uniform mat4 ProjMtx; + +attribute vec2 Position; +attribute vec2 UV; +attribute vec4 Color; + +varying vec2 Frag_UV; +varying vec4 Frag_Color; + +void main() +{ + Frag_UV = UV; + Frag_Color = Color; + gl_Position = ProjMtx * vec4(Position.xy, 0.0, 1.0); +} \ No newline at end of file diff --git a/resources/shaders/110/mm_contour.fs b/resources/shaders/110/mm_contour.fs new file mode 100644 index 000000000..14477a59e --- /dev/null +++ b/resources/shaders/110/mm_contour.fs @@ -0,0 +1,13 @@ +#version 110 + +const float EPSILON = 0.0001; + +uniform vec4 uniform_color; + +void main() +{ + gl_FragColor = uniform_color; + // Values inside depth buffer for fragments of the contour of a selected area are offset + // by small epsilon to solve z-fighting between painted triangles and contour lines. + gl_FragDepth = gl_FragCoord.z - EPSILON; +} diff --git a/resources/shaders/110/mm_contour.vs b/resources/shaders/110/mm_contour.vs new file mode 100644 index 000000000..d9063f0c7 --- /dev/null +++ b/resources/shaders/110/mm_contour.vs @@ -0,0 +1,11 @@ +#version 110 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +attribute vec3 v_position; + +void main() +{ + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/110/mm_gouraud.fs b/resources/shaders/110/mm_gouraud.fs new file mode 100644 index 000000000..78181e1d7 --- /dev/null +++ b/resources/shaders/110/mm_gouraud.fs @@ -0,0 +1,63 @@ +#version 110 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +const vec3 ZERO = vec3(0.0, 0.0, 0.0); +const float EPSILON = 0.0001; + +uniform vec4 uniform_color; + +uniform bool volume_mirrored; + +uniform mat4 view_model_matrix; +uniform mat3 normal_matrix; + +varying vec3 clipping_planes_dots; +varying vec4 model_pos; + +void main() +{ + if (any(lessThan(clipping_planes_dots, ZERO))) + discard; + vec3 color = uniform_color.rgb; + float alpha = uniform_color.a; + + vec3 triangle_normal = normalize(cross(dFdx(model_pos.xyz), dFdy(model_pos.xyz))); +#ifdef FLIP_TRIANGLE_NORMALS + triangle_normal = -triangle_normal; +#endif + + if (volume_mirrored) + triangle_normal = -triangle_normal; + + // First transform the normal into camera space and normalize the result. + vec3 eye_normal = normalize(normal_matrix * triangle_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(eye_normal, LIGHT_TOP_DIR), 0.0); + + // x = diffuse, y = specular; + vec2 intensity = vec2(0.0); + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec3 position = (view_model_matrix * model_pos).xyz; + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position), reflect(-LIGHT_TOP_DIR, eye_normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + gl_FragColor = vec4(vec3(intensity.y) + color * intensity.x, alpha); +} diff --git a/resources/shaders/110/mm_gouraud.vs b/resources/shaders/110/mm_gouraud.vs new file mode 100644 index 000000000..10c25239f --- /dev/null +++ b/resources/shaders/110/mm_gouraud.vs @@ -0,0 +1,28 @@ +#version 110 + +const vec3 ZERO = vec3(0.0, 0.0, 0.0); + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +uniform mat4 volume_world_matrix; +// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane. +uniform vec2 z_range; +// Clipping plane - general orientation. Used by the SLA gizmo. +uniform vec4 clipping_plane; + +attribute vec3 v_position; + +varying vec3 clipping_planes_dots; +varying vec4 model_pos; + +void main() +{ + model_pos = vec4(v_position, 1.0); + // Point in homogenous coordinates. + vec4 world_pos = volume_world_matrix * model_pos; + + gl_Position = projection_matrix * view_model_matrix * model_pos; + // Fill in the scalars for fragment shader clipping. Fragments with any of these components lower than zero are discarded. + clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z); +} diff --git a/resources/shaders/110/printbed.fs b/resources/shaders/110/printbed.fs new file mode 100644 index 000000000..833dff08f --- /dev/null +++ b/resources/shaders/110/printbed.fs @@ -0,0 +1,34 @@ +#version 110 + +const vec3 back_color_dark = vec3(0.235, 0.235, 0.235); +const vec3 back_color_light = vec3(0.365, 0.365, 0.365); + +uniform sampler2D texture; +uniform bool transparent_background; +uniform bool svg_source; + +varying vec2 tex_coord; + +vec4 svg_color() +{ + // takes foreground from texture + vec4 fore_color = texture2D(texture, tex_coord); + + // calculates radial gradient + vec3 back_color = vec3(mix(back_color_light, back_color_dark, smoothstep(0.0, 0.5, length(abs(tex_coord.xy) - vec2(0.5))))); + + // blends foreground with background + return vec4(mix(back_color, fore_color.rgb, fore_color.a), transparent_background ? fore_color.a : 1.0); +} + +vec4 non_svg_color() +{ + // takes foreground from texture + vec4 color = texture2D(texture, tex_coord); + return vec4(color.rgb, transparent_background ? color.a * 0.25 : color.a); +} + +void main() +{ + gl_FragColor = svg_source ? svg_color() : non_svg_color(); +} \ No newline at end of file diff --git a/resources/shaders/110/printbed.vs b/resources/shaders/110/printbed.vs new file mode 100644 index 000000000..dc4868b04 --- /dev/null +++ b/resources/shaders/110/printbed.vs @@ -0,0 +1,15 @@ +#version 110 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +attribute vec3 v_position; +attribute vec2 v_tex_coord; + +varying vec2 tex_coord; + +void main() +{ + tex_coord = v_tex_coord; + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/110/toolpaths_cog.fs b/resources/shaders/110/toolpaths_cog.fs new file mode 100644 index 000000000..668fe03ec --- /dev/null +++ b/resources/shaders/110/toolpaths_cog.fs @@ -0,0 +1,19 @@ +#version 110 + +const vec4 BLACK = vec4(vec3(0.1), 1.0); +const vec4 WHITE = vec4(vec3(1.0), 1.0); + +const float emission_factor = 0.25; + +uniform vec3 world_center; + +// x = tainted, y = specular; +varying vec2 intensity; +varying vec3 world_position; + +void main() +{ + vec3 delta = world_position - world_center; + vec4 color = delta.x * delta.y * delta.z > 0.0 ? BLACK : WHITE; + gl_FragColor = vec4(vec3(intensity.y) + color.rgb * (intensity.x + emission_factor), 1.0); +} diff --git a/resources/shaders/110/toolpaths_cog.vs b/resources/shaders/110/toolpaths_cog.vs new file mode 100644 index 000000000..38d2f7944 --- /dev/null +++ b/resources/shaders/110/toolpaths_cog.vs @@ -0,0 +1,47 @@ +#version 110 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 normal_matrix; + +attribute vec3 v_position; +attribute vec3 v_normal; + +// x = tainted, y = specular; +varying vec2 intensity; +varying vec3 world_position; + +void main() +{ + // First transform the normal into camera space and normalize the result. + vec3 normal = normalize(normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 position = view_model_matrix * vec4(v_position, 1.0); + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position.xyz), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + world_position = v_position; + gl_Position = projection_matrix * position; +} diff --git a/resources/shaders/110/variable_layer_height.fs b/resources/shaders/110/variable_layer_height.fs new file mode 100644 index 000000000..693c1c6a0 --- /dev/null +++ b/resources/shaders/110/variable_layer_height.fs @@ -0,0 +1,41 @@ +#version 110 + +#define M_PI 3.1415926535897932384626433832795 + +// 2D texture (1D texture split by the rows) of color along the object Z axis. +uniform sampler2D z_texture; +// Scaling from the Z texture rows coordinate to the normalized texture row coordinate. +uniform float z_to_texture_row; +uniform float z_texture_row_to_normalized; +uniform float z_cursor; +uniform float z_cursor_band_width; + +// x = tainted, y = specular; +varying vec2 intensity; + +varying float object_z; + +void main() +{ + float object_z_row = z_to_texture_row * object_z; + // Index of the row in the texture. + float z_texture_row = floor(object_z_row); + // Normalized coordinate from 0. to 1. + float z_texture_col = object_z_row - z_texture_row; + float z_blend = 0.25 * cos(min(M_PI, abs(M_PI * (object_z - z_cursor) * 1.8 / z_cursor_band_width))) + 0.25; + // Calculate level of detail from the object Z coordinate. + // This makes the slowly sloping surfaces to be shown with high detail (with stripes), + // and the vertical surfaces to be shown with low detail (no stripes) + float z_in_cells = object_z_row * 190.; + // Gradient of Z projected on the screen. + float dx_vtc = dFdx(z_in_cells); + float dy_vtc = dFdy(z_in_cells); + float lod = clamp(0.5 * log2(max(dx_vtc * dx_vtc, dy_vtc * dy_vtc)), 0., 1.); + // Sample the Z texture. Texture coordinates are normalized to <0, 1>. + vec4 color = vec4(0.25, 0.25, 0.25, 1.0); + if (z_texture_row >= 0.0) + color = mix(texture2D(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row + 0.5 )), -10000.), + texture2D(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row * 2. + 1.)), 10000.), lod); + // Mix the final color. + gl_FragColor = vec4(vec3(intensity.y), 1.0) + intensity.x * mix(color, vec4(1.0, 1.0, 0.0, 1.0), z_blend); +} diff --git a/resources/shaders/110/variable_layer_height.vs b/resources/shaders/110/variable_layer_height.vs new file mode 100644 index 000000000..e6c88fa80 --- /dev/null +++ b/resources/shaders/110/variable_layer_height.vs @@ -0,0 +1,60 @@ +#version 110 + +#define INTENSITY_CORRECTION 0.6 + +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SPECULAR (0.0 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SHININESS 5.0 + +#define INTENSITY_AMBIENT 0.3 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 normal_matrix; +uniform mat4 volume_world_matrix; +uniform float object_max_z; + +attribute vec3 v_position; +attribute vec3 v_normal; +attribute vec2 v_tex_coord; + +// x = tainted, y = specular; +varying vec2 intensity; + +varying float object_z; + +void main() +{ + // ===================================================== + // NOTE: + // when object_max_z > 0.0 we are rendering the overlay + // when object_max_z == 0.0 we are rendering the volumes + // ===================================================== + + // First transform the normal into camera space and normalize the result. + vec3 normal = (object_max_z > 0.0) ? vec3(0.0, 0.0, 1.0) : normalize(normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 position = view_model_matrix * vec4(v_position, 1.0); + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position.xyz), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular) + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + // Scaled to widths of the Z texture. + object_z = (object_max_z > 0.0) ? object_max_z * v_tex_coord.y : (volume_world_matrix * vec4(v_position, 1.0)).z; + + gl_Position = projection_matrix * position; +} diff --git a/resources/shaders/140/background.fs b/resources/shaders/140/background.fs new file mode 100644 index 000000000..c21f3a70c --- /dev/null +++ b/resources/shaders/140/background.fs @@ -0,0 +1,11 @@ +#version 140 + +uniform vec4 top_color; +uniform vec4 bottom_color; + +in vec2 tex_coord; + +void main() +{ + gl_FragColor = mix(bottom_color, top_color, tex_coord.y); +} diff --git a/resources/shaders/140/background.vs b/resources/shaders/140/background.vs new file mode 100644 index 000000000..13609b3a2 --- /dev/null +++ b/resources/shaders/140/background.vs @@ -0,0 +1,12 @@ +#version 140 + +in vec3 v_position; +in vec2 v_tex_coord; + +out vec2 tex_coord; + +void main() +{ + tex_coord = v_tex_coord; + gl_Position = vec4(v_position, 1.0); +} diff --git a/resources/shaders/140/flat.fs b/resources/shaders/140/flat.fs new file mode 100644 index 000000000..e74124dca --- /dev/null +++ b/resources/shaders/140/flat.fs @@ -0,0 +1,8 @@ +#version 140 + +uniform vec4 uniform_color; + +void main() +{ + gl_FragColor = uniform_color; +} diff --git a/resources/shaders/140/flat.vs b/resources/shaders/140/flat.vs new file mode 100644 index 000000000..7042671de --- /dev/null +++ b/resources/shaders/140/flat.vs @@ -0,0 +1,11 @@ +#version 140 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +in vec3 v_position; + +void main() +{ + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/140/flat_clip.fs b/resources/shaders/140/flat_clip.fs new file mode 100644 index 000000000..b77e0bfaa --- /dev/null +++ b/resources/shaders/140/flat_clip.fs @@ -0,0 +1,17 @@ +#version 140 + +const vec3 ZERO = vec3(0.0, 0.0, 0.0); + +uniform vec4 uniform_color; + +in vec3 clipping_planes_dots; + +out vec4 out_color; + +void main() +{ + if (any(lessThan(clipping_planes_dots, ZERO))) + discard; + + out_color = uniform_color; +} diff --git a/resources/shaders/140/flat_clip.vs b/resources/shaders/140/flat_clip.vs new file mode 100644 index 000000000..40cddf1e5 --- /dev/null +++ b/resources/shaders/140/flat_clip.vs @@ -0,0 +1,23 @@ +#version 140 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat4 volume_world_matrix; + +// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane. +uniform vec2 z_range; +// Clipping plane - general orientation. Used by the SLA gizmo. +uniform vec4 clipping_plane; + +in vec3 v_position; + +out vec3 clipping_planes_dots; + +void main() +{ + // Fill in the scalars for fragment shader clipping. Fragments with any of these components lower than zero are discarded. + vec4 world_pos = volume_world_matrix * vec4(v_position, 1.0); + clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z); + + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/140/flat_texture.fs b/resources/shaders/140/flat_texture.fs new file mode 100644 index 000000000..dec946721 --- /dev/null +++ b/resources/shaders/140/flat_texture.fs @@ -0,0 +1,10 @@ +#version 140 + +uniform sampler2D uniform_texture; + +in vec2 tex_coord; + +void main() +{ + gl_FragColor = texture(uniform_texture, tex_coord); +} diff --git a/resources/shaders/140/flat_texture.vs b/resources/shaders/140/flat_texture.vs new file mode 100644 index 000000000..57d8ca3b7 --- /dev/null +++ b/resources/shaders/140/flat_texture.vs @@ -0,0 +1,15 @@ +#version 140 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +in vec3 v_position; +in vec2 v_tex_coord; + +out vec2 tex_coord; + +void main() +{ + tex_coord = v_tex_coord; + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/140/gouraud.fs b/resources/shaders/140/gouraud.fs new file mode 100644 index 000000000..beb3a947b --- /dev/null +++ b/resources/shaders/140/gouraud.fs @@ -0,0 +1,86 @@ +#version 140 + +const vec3 ZERO = vec3(0.0, 0.0, 0.0); +const float EPSILON = 0.0001; + +struct PrintVolumeDetection +{ + // 0 = rectangle, 1 = circle, 2 = custom, 3 = invalid + int type; + // type = 0 (rectangle): + // x = min.x, y = min.y, z = max.x, w = max.y + // type = 1 (circle): + // x = center.x, y = center.y, z = radius + vec4 xy_data; + // x = min z, y = max z + vec2 z_data; +}; + +struct SlopeDetection +{ + bool actived; + float normal_z; + mat3 volume_world_normal_matrix; +}; + +uniform vec4 uniform_color; +uniform SlopeDetection slope; + +uniform bool offset_depth_buffer; + +#ifdef ENABLE_ENVIRONMENT_MAP + uniform sampler2D environment_tex; + uniform bool use_environment_tex; +#endif // ENABLE_ENVIRONMENT_MAP + +uniform PrintVolumeDetection print_volume; + +in vec3 clipping_planes_dots; + +// x = diffuse, y = specular; +in vec2 intensity; + +in vec4 world_pos; +in float world_normal_z; +in vec3 eye_normal; + +void main() +{ + if (any(lessThan(clipping_planes_dots, ZERO))) + discard; + vec3 color = uniform_color.rgb; + float alpha = uniform_color.a; + + if (slope.actived && world_normal_z < slope.normal_z - EPSILON) { + color = vec3(0.7, 0.7, 1.0); + alpha = 1.0; + } + + // if the fragment is outside the print volume -> use darker color + vec3 pv_check_min = ZERO; + vec3 pv_check_max = ZERO; + if (print_volume.type == 0) { + // rectangle + pv_check_min = world_pos.xyz - vec3(print_volume.xy_data.x, print_volume.xy_data.y, print_volume.z_data.x); + pv_check_max = world_pos.xyz - vec3(print_volume.xy_data.z, print_volume.xy_data.w, print_volume.z_data.y); + } + else if (print_volume.type == 1) { + // circle + float delta_radius = print_volume.xy_data.z - distance(world_pos.xy, print_volume.xy_data.xy); + pv_check_min = vec3(delta_radius, 0.0, world_pos.z - print_volume.z_data.x); + pv_check_max = vec3(0.0, 0.0, world_pos.z - print_volume.z_data.y); + } + color = (any(lessThan(pv_check_min, ZERO)) || any(greaterThan(pv_check_max, ZERO))) ? mix(color, ZERO, 0.3333) : color; + +#ifdef ENABLE_ENVIRONMENT_MAP + if (use_environment_tex) + gl_FragColor = vec4(0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color * intensity.x, alpha); + else +#endif + gl_FragColor = vec4(vec3(intensity.y) + color * intensity.x, alpha); + + // In the support painting gizmo and the seam painting gizmo are painted triangles rendered over the already + // rendered object. To resolved z-fighting between previously rendered object and painted triangles, values + // inside the depth buffer are offset by small epsilon for painted triangles inside those gizmos. + gl_FragDepth = gl_FragCoord.z - (offset_depth_buffer ? EPSILON : 0.0); +} diff --git a/resources/shaders/140/gouraud.vs b/resources/shaders/140/gouraud.vs new file mode 100644 index 000000000..aaf251c42 --- /dev/null +++ b/resources/shaders/140/gouraud.vs @@ -0,0 +1,77 @@ +#version 140 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SPECULAR (0.0 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SHININESS 5.0 + +#define INTENSITY_AMBIENT 0.3 + +const vec3 ZERO = vec3(0.0, 0.0, 0.0); + +struct SlopeDetection +{ + bool actived; + float normal_z; + mat3 volume_world_normal_matrix; +}; + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 normal_matrix; +uniform mat4 volume_world_matrix; +uniform SlopeDetection slope; + +// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane. +uniform vec2 z_range; +// Clipping plane - general orientation. Used by the SLA gizmo. +uniform vec4 clipping_plane; + +in vec3 v_position; +in vec3 v_normal; + +// x = diffuse, y = specular; +out vec2 intensity; + +out vec3 clipping_planes_dots; + +out vec4 world_pos; +out float world_normal_z; +out vec3 eye_normal; + +void main() +{ + // First transform the normal into camera space and normalize the result. + eye_normal = normalize(normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(eye_normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 position = view_model_matrix * vec4(v_position, 1.0); + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position.xyz), reflect(-LIGHT_TOP_DIR, eye_normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + // Point in homogenous coordinates. + world_pos = volume_world_matrix * vec4(v_position, 1.0); + + // z component of normal vector in world coordinate used for slope shading + world_normal_z = slope.actived ? (normalize(slope.volume_world_normal_matrix * v_normal)).z : 0.0; + + gl_Position = projection_matrix * position; + // Fill in the scalars for fragment shader clipping. Fragments with any of these components lower than zero are discarded. + clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z); +} diff --git a/resources/shaders/140/gouraud_light.fs b/resources/shaders/140/gouraud_light.fs new file mode 100644 index 000000000..de616e066 --- /dev/null +++ b/resources/shaders/140/gouraud_light.fs @@ -0,0 +1,12 @@ +#version 140 + +uniform vec4 uniform_color; +uniform float emission_factor; + +// x = tainted, y = specular; +in vec2 intensity; + +void main() +{ + gl_FragColor = vec4(vec3(intensity.y) + uniform_color.rgb * (intensity.x + emission_factor), uniform_color.a); +} diff --git a/resources/shaders/140/gouraud_light.vs b/resources/shaders/140/gouraud_light.vs new file mode 100644 index 000000000..b75a84405 --- /dev/null +++ b/resources/shaders/140/gouraud_light.vs @@ -0,0 +1,45 @@ +#version 140 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 normal_matrix; + +in vec3 v_position; +in vec3 v_normal; + +// x = tainted, y = specular; +out vec2 intensity; + +void main() +{ + // First transform the normal into camera space and normalize the result. + vec3 normal = normalize(normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 position = view_model_matrix * vec4(v_position, 1.0); + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position.xyz), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + gl_Position = projection_matrix * position; +} diff --git a/resources/shaders/140/gouraud_light_instanced.fs b/resources/shaders/140/gouraud_light_instanced.fs new file mode 100644 index 000000000..de616e066 --- /dev/null +++ b/resources/shaders/140/gouraud_light_instanced.fs @@ -0,0 +1,12 @@ +#version 140 + +uniform vec4 uniform_color; +uniform float emission_factor; + +// x = tainted, y = specular; +in vec2 intensity; + +void main() +{ + gl_FragColor = vec4(vec3(intensity.y) + uniform_color.rgb * (intensity.x + emission_factor), uniform_color.a); +} diff --git a/resources/shaders/140/gouraud_light_instanced.vs b/resources/shaders/140/gouraud_light_instanced.vs new file mode 100644 index 000000000..b6b9ab8be --- /dev/null +++ b/resources/shaders/140/gouraud_light_instanced.vs @@ -0,0 +1,50 @@ +#version 140 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 normal_matrix; + +// vertex attributes +in vec3 v_position; +in vec3 v_normal; +// instance attributes +in vec3 i_offset; +in vec2 i_scales; + +// x = tainted, y = specular; +out vec2 intensity; + +void main() +{ + // First transform the normal into camera space and normalize the result. + vec3 eye_normal = normalize(normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(eye_normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 world_position = vec4(v_position * vec3(vec2(1.5 * i_scales.x), 1.5 * i_scales.y) + i_offset - vec3(0.0, 0.0, 0.5 * i_scales.y), 1.0); + vec4 eye_position = view_model_matrix * world_position; + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(eye_position.xyz), reflect(-LIGHT_TOP_DIR, eye_normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + gl_Position = projection_matrix * eye_position; +} diff --git a/resources/shaders/140/imgui.fs b/resources/shaders/140/imgui.fs new file mode 100644 index 000000000..4b2571749 --- /dev/null +++ b/resources/shaders/140/imgui.fs @@ -0,0 +1,11 @@ +#version 140 + +uniform sampler2D Texture; + +in vec2 Frag_UV; +in vec4 Frag_Color; + +void main() +{ + gl_FragColor = Frag_Color * texture(Texture, Frag_UV.st); +} \ No newline at end of file diff --git a/resources/shaders/140/imgui.vs b/resources/shaders/140/imgui.vs new file mode 100644 index 000000000..fd743bdf2 --- /dev/null +++ b/resources/shaders/140/imgui.vs @@ -0,0 +1,17 @@ +#version 140 + +uniform mat4 ProjMtx; + +in vec2 Position; +in vec2 UV; +in vec4 Color; + +out vec2 Frag_UV; +out vec4 Frag_Color; + +void main() +{ + Frag_UV = UV; + Frag_Color = Color; + gl_Position = ProjMtx * vec4(Position.xy, 0.0, 1.0); +} \ No newline at end of file diff --git a/resources/shaders/140/mm_contour.fs b/resources/shaders/140/mm_contour.fs new file mode 100644 index 000000000..3681d76c1 --- /dev/null +++ b/resources/shaders/140/mm_contour.fs @@ -0,0 +1,13 @@ +#version 140 + +const float EPSILON = 0.0001; + +uniform vec4 uniform_color; + +void main() +{ + gl_FragColor = uniform_color; + // Values inside depth buffer for fragments of the contour of a selected area are offset + // by small epsilon to solve z-fighting between painted triangles and contour lines. + gl_FragDepth = gl_FragCoord.z - EPSILON; +} diff --git a/resources/shaders/140/mm_contour.vs b/resources/shaders/140/mm_contour.vs new file mode 100644 index 000000000..7042671de --- /dev/null +++ b/resources/shaders/140/mm_contour.vs @@ -0,0 +1,11 @@ +#version 140 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +in vec3 v_position; + +void main() +{ + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/140/mm_gouraud.fs b/resources/shaders/140/mm_gouraud.fs new file mode 100644 index 000000000..e59d844f2 --- /dev/null +++ b/resources/shaders/140/mm_gouraud.fs @@ -0,0 +1,63 @@ +#version 140 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +const vec3 ZERO = vec3(0.0, 0.0, 0.0); +const float EPSILON = 0.0001; + +uniform vec4 uniform_color; + +uniform bool volume_mirrored; + +uniform mat4 view_model_matrix; +uniform mat3 normal_matrix; + +in vec3 clipping_planes_dots; +in vec4 model_pos; + +void main() +{ + if (any(lessThan(clipping_planes_dots, ZERO))) + discard; + vec3 color = uniform_color.rgb; + float alpha = uniform_color.a; + + vec3 triangle_normal = normalize(cross(dFdx(model_pos.xyz), dFdy(model_pos.xyz))); +#ifdef FLIP_TRIANGLE_NORMALS + triangle_normal = -triangle_normal; +#endif + + if (volume_mirrored) + triangle_normal = -triangle_normal; + + // First transform the normal into camera space and normalize the result. + vec3 eye_normal = normalize(normal_matrix * triangle_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(eye_normal, LIGHT_TOP_DIR), 0.0); + + // x = diffuse, y = specular; + vec2 intensity = vec2(0.0); + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec3 position = (view_model_matrix * model_pos).xyz; + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position), reflect(-LIGHT_TOP_DIR, eye_normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + gl_FragColor = vec4(vec3(intensity.y) + color * intensity.x, alpha); +} diff --git a/resources/shaders/140/mm_gouraud.vs b/resources/shaders/140/mm_gouraud.vs new file mode 100644 index 000000000..30223f4ee --- /dev/null +++ b/resources/shaders/140/mm_gouraud.vs @@ -0,0 +1,28 @@ +#version 140 + +const vec3 ZERO = vec3(0.0, 0.0, 0.0); + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +uniform mat4 volume_world_matrix; +// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane. +uniform vec2 z_range; +// Clipping plane - general orientation. Used by the SLA gizmo. +uniform vec4 clipping_plane; + +in vec3 v_position; + +out vec3 clipping_planes_dots; +out vec4 model_pos; + +void main() +{ + model_pos = vec4(v_position, 1.0); + // Point in homogenous coordinates. + vec4 world_pos = volume_world_matrix * model_pos; + + gl_Position = projection_matrix * view_model_matrix * model_pos; + // Fill in the scalars for fragment shader clipping. Fragments with any of these components lower than zero are discarded. + clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z); +} diff --git a/resources/shaders/140/printbed.fs b/resources/shaders/140/printbed.fs new file mode 100644 index 000000000..6d927a749 --- /dev/null +++ b/resources/shaders/140/printbed.fs @@ -0,0 +1,35 @@ +#version 140 + +const vec3 back_color_dark = vec3(0.235, 0.235, 0.235); +const vec3 back_color_light = vec3(0.365, 0.365, 0.365); + +uniform sampler2D in_texture; +uniform bool transparent_background; +uniform bool svg_source; + +in vec2 tex_coord; +out vec4 frag_color; + +vec4 svg_color() +{ + // takes foreground from texture + vec4 fore_color = texture(in_texture, tex_coord); + + // calculates radial gradient + vec3 back_color = vec3(mix(back_color_light, back_color_dark, smoothstep(0.0, 0.5, length(abs(tex_coord.xy) - vec2(0.5))))); + + // blends foreground with background + return vec4(mix(back_color, fore_color.rgb, fore_color.a), transparent_background ? fore_color.a : 1.0); +} + +vec4 non_svg_color() +{ + // takes foreground from texture + vec4 color = texture(in_texture, tex_coord); + return vec4(color.rgb, transparent_background ? color.a * 0.25 : color.a); +} + +void main() +{ + frag_color = svg_source ? svg_color() : non_svg_color(); +} \ No newline at end of file diff --git a/resources/shaders/140/printbed.vs b/resources/shaders/140/printbed.vs new file mode 100644 index 000000000..57d8ca3b7 --- /dev/null +++ b/resources/shaders/140/printbed.vs @@ -0,0 +1,15 @@ +#version 140 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +in vec3 v_position; +in vec2 v_tex_coord; + +out vec2 tex_coord; + +void main() +{ + tex_coord = v_tex_coord; + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/140/toolpaths_cog.fs b/resources/shaders/140/toolpaths_cog.fs new file mode 100644 index 000000000..1c745dda9 --- /dev/null +++ b/resources/shaders/140/toolpaths_cog.fs @@ -0,0 +1,19 @@ +#version 140 + +const vec4 BLACK = vec4(vec3(0.1), 1.0); +const vec4 WHITE = vec4(vec3(1.0), 1.0); + +const float emission_factor = 0.25; + +uniform vec3 world_center; + +// x = tainted, y = specular; +in vec2 intensity; +in vec3 world_position; + +void main() +{ + vec3 delta = world_position - world_center; + vec4 color = delta.x * delta.y * delta.z > 0.0 ? BLACK : WHITE; + gl_FragColor = vec4(vec3(intensity.y) + color.rgb * (intensity.x + emission_factor), 1.0); +} diff --git a/resources/shaders/140/toolpaths_cog.vs b/resources/shaders/140/toolpaths_cog.vs new file mode 100644 index 000000000..ef676a375 --- /dev/null +++ b/resources/shaders/140/toolpaths_cog.vs @@ -0,0 +1,47 @@ +#version 140 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 normal_matrix; + +in vec3 v_position; +in vec3 v_normal; + +// x = tainted, y = specular; +out vec2 intensity; +out vec3 world_position; + +void main() +{ + // First transform the normal into camera space and normalize the result. + vec3 normal = normalize(normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 position = view_model_matrix * vec4(v_position, 1.0); + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position.xyz), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + world_position = v_position; + gl_Position = projection_matrix * position; +} diff --git a/resources/shaders/140/variable_layer_height.fs b/resources/shaders/140/variable_layer_height.fs new file mode 100644 index 000000000..cf1fc309c --- /dev/null +++ b/resources/shaders/140/variable_layer_height.fs @@ -0,0 +1,41 @@ +#version 140 + +#define M_PI 3.1415926535897932384626433832795 + +// 2D texture (1D texture split by the rows) of color along the object Z axis. +uniform sampler2D z_texture; +// Scaling from the Z texture rows coordinate to the normalized texture row coordinate. +uniform float z_to_texture_row; +uniform float z_texture_row_to_normalized; +uniform float z_cursor; +uniform float z_cursor_band_width; + +// x = tainted, y = specular; +in vec2 intensity; + +in float object_z; + +void main() +{ + float object_z_row = z_to_texture_row * object_z; + // Index of the row in the texture. + float z_texture_row = floor(object_z_row); + // Normalized coordinate from 0. to 1. + float z_texture_col = object_z_row - z_texture_row; + float z_blend = 0.25 * cos(min(M_PI, abs(M_PI * (object_z - z_cursor) * 1.8 / z_cursor_band_width))) + 0.25; + // Calculate level of detail from the object Z coordinate. + // This makes the slowly sloping surfaces to be shown with high detail (with stripes), + // and the vertical surfaces to be shown with low detail (no stripes) + float z_in_cells = object_z_row * 190.; + // Gradient of Z projected on the screen. + float dx_vtc = dFdx(z_in_cells); + float dy_vtc = dFdy(z_in_cells); + float lod = clamp(0.5 * log2(max(dx_vtc * dx_vtc, dy_vtc * dy_vtc)), 0., 1.); + // Sample the Z texture. Texture coordinates are normalized to <0, 1>. + vec4 color = vec4(0.25, 0.25, 0.25, 1.0); + if (z_texture_row >= 0.0) + color = mix(texture(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row + 0.5 )), -10000.), + texture(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row * 2. + 1.)), 10000.), lod); + // Mix the final color. + gl_FragColor = vec4(vec3(intensity.y), 1.0) + intensity.x * mix(color, vec4(1.0, 1.0, 0.0, 1.0), z_blend); +} diff --git a/resources/shaders/140/variable_layer_height.vs b/resources/shaders/140/variable_layer_height.vs new file mode 100644 index 000000000..dd463b9c7 --- /dev/null +++ b/resources/shaders/140/variable_layer_height.vs @@ -0,0 +1,60 @@ +#version 140 + +#define INTENSITY_CORRECTION 0.6 + +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SPECULAR (0.0 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SHININESS 5.0 + +#define INTENSITY_AMBIENT 0.3 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 normal_matrix; +uniform mat4 volume_world_matrix; +uniform float object_max_z; + +in vec3 v_position; +in vec3 v_normal; +in vec2 v_tex_coord; + +// x = tainted, y = specular; +out vec2 intensity; + +out float object_z; + +void main() +{ + // ===================================================== + // NOTE: + // when object_max_z > 0.0 we are rendering the overlay + // when object_max_z == 0.0 we are rendering the volumes + // ===================================================== + + // First transform the normal into camera space and normalize the result. + vec3 normal = (object_max_z > 0.0) ? vec3(0.0, 0.0, 1.0) : normalize(normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 position = view_model_matrix * vec4(v_position, 1.0); + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position.xyz), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular) + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + // Scaled to widths of the Z texture. + object_z = (object_max_z > 0.0) ? object_max_z * v_tex_coord.y : (volume_world_matrix * vec4(v_position, 1.0)).z; + + gl_Position = projection_matrix * position; +} diff --git a/resources/shaders/gouraud.fs b/resources/shaders/gouraud.fs index b9e860d10..511faf4c0 100644 --- a/resources/shaders/gouraud.fs +++ b/resources/shaders/gouraud.fs @@ -40,7 +40,6 @@ varying vec2 intensity; uniform PrintVolumeDetection print_volume; -varying vec4 model_pos; varying vec4 world_pos; varying float world_normal_z; varying vec3 eye_normal; diff --git a/resources/shaders/gouraud.vs b/resources/shaders/gouraud.vs index 79d7a63c0..c8b3d7b33 100644 --- a/resources/shaders/gouraud.vs +++ b/resources/shaders/gouraud.vs @@ -38,7 +38,6 @@ varying vec2 intensity; varying vec3 clipping_planes_dots; -varying vec4 model_pos; varying vec4 world_pos; varying float world_normal_z; varying vec3 eye_normal; @@ -60,7 +59,6 @@ void main() NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0); intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; - model_pos = gl_Vertex; // Point in homogenous coordinates. world_pos = volume_world_matrix * gl_Vertex; diff --git a/resources/shaders/options_110.vs b/resources/shaders/options_110.vs deleted file mode 100644 index 5f2ab2350..000000000 --- a/resources/shaders/options_110.vs +++ /dev/null @@ -1,22 +0,0 @@ -#version 110 - -uniform bool use_fixed_screen_size; -uniform float zoom; -uniform float point_size; -uniform float near_plane_height; - -float fixed_screen_size() -{ - return point_size; -} - -float fixed_world_size() -{ - return (gl_Position.w == 1.0) ? zoom * near_plane_height * point_size : near_plane_height * point_size / gl_Position.w; -} - -void main() -{ - gl_Position = ftransform(); - gl_PointSize = use_fixed_screen_size ? fixed_screen_size() : fixed_world_size(); -} diff --git a/resources/shaders/options_120.fs b/resources/shaders/options_120.fs deleted file mode 100644 index e9b61304f..000000000 --- a/resources/shaders/options_120.fs +++ /dev/null @@ -1,22 +0,0 @@ -// version 120 is needed for gl_PointCoord -#version 120 - -uniform vec4 uniform_color; -uniform float percent_outline_radius; -uniform float percent_center_radius; - -vec4 calc_color(float radius, vec4 color) -{ - return ((radius < percent_center_radius) || (radius > 1.0 - percent_outline_radius)) ? - vec4(0.5 * color.rgb, color.a) : color; -} - -void main() -{ - vec2 pos = (gl_PointCoord - 0.5) * 2.0; - float radius = length(pos); - if (radius > 1.0) - discard; - - gl_FragColor = calc_color(radius, uniform_color); -} diff --git a/resources/shaders/options_120.vs b/resources/shaders/options_120.vs deleted file mode 100644 index edb503fb2..000000000 --- a/resources/shaders/options_120.vs +++ /dev/null @@ -1,22 +0,0 @@ -#version 120 - -uniform bool use_fixed_screen_size; -uniform float zoom; -uniform float point_size; -uniform float near_plane_height; - -float fixed_screen_size() -{ - return point_size; -} - -float fixed_world_size() -{ - return (gl_Position.w == 1.0) ? zoom * near_plane_height * point_size : near_plane_height * point_size / gl_Position.w; -} - -void main() -{ - gl_Position = ftransform(); - gl_PointSize = use_fixed_screen_size ? fixed_screen_size() : fixed_world_size(); -} diff --git a/resources/shaders/printbed.fs b/resources/shaders/printbed.fs index d1316ca2f..833dff08f 100644 --- a/resources/shaders/printbed.fs +++ b/resources/shaders/printbed.fs @@ -1,21 +1,21 @@ #version 110 -const vec3 back_color_dark = vec3(0.235, 0.235, 0.235); +const vec3 back_color_dark = vec3(0.235, 0.235, 0.235); const vec3 back_color_light = vec3(0.365, 0.365, 0.365); uniform sampler2D texture; uniform bool transparent_background; uniform bool svg_source; -varying vec2 tex_coords; +varying vec2 tex_coord; vec4 svg_color() { // takes foreground from texture - vec4 fore_color = texture2D(texture, tex_coords); + vec4 fore_color = texture2D(texture, tex_coord); // calculates radial gradient - vec3 back_color = vec3(mix(back_color_light, back_color_dark, smoothstep(0.0, 0.5, length(abs(tex_coords.xy) - vec2(0.5))))); + vec3 back_color = vec3(mix(back_color_light, back_color_dark, smoothstep(0.0, 0.5, length(abs(tex_coord.xy) - vec2(0.5))))); // blends foreground with background return vec4(mix(back_color, fore_color.rgb, fore_color.a), transparent_background ? fore_color.a : 1.0); @@ -24,7 +24,7 @@ vec4 svg_color() vec4 non_svg_color() { // takes foreground from texture - vec4 color = texture2D(texture, tex_coords); + vec4 color = texture2D(texture, tex_coord); return vec4(color.rgb, transparent_background ? color.a * 0.25 : color.a); } diff --git a/resources/shaders/printbed.vs b/resources/shaders/printbed.vs index 7633017f1..27addc752 100644 --- a/resources/shaders/printbed.vs +++ b/resources/shaders/printbed.vs @@ -1,14 +1,9 @@ #version 110 -attribute vec3 v_position; -attribute vec2 v_tex_coords; - -varying vec2 tex_coords; +varying vec2 tex_coord; void main() { - gl_Position = gl_ModelViewProjectionMatrix * vec4(v_position.x, v_position.y, v_position.z, 1.0); - // the following line leads to crash on some Intel graphics card - //gl_Position = gl_ModelViewProjectionMatrix * vec4(v_position, 1.0); - tex_coords = v_tex_coords; + gl_Position = ftransform(); + tex_coord = gl_MultiTexCoord0.xy; } diff --git a/resources/shaders/toolpaths_cog.fs b/resources/shaders/toolpaths_cog.fs new file mode 100644 index 000000000..f88d79b96 --- /dev/null +++ b/resources/shaders/toolpaths_cog.fs @@ -0,0 +1,18 @@ +#version 110 + +const vec4 BLACK = vec4(vec3(0.1), 1.0); +const vec4 WHITE = vec4(vec3(1.0), 1.0); + +const float emission_factor = 0.25; + +// x = tainted, y = specular; +varying vec2 intensity; +varying vec3 world_position; +uniform vec3 world_center; + +void main() +{ + vec3 delta = world_position - world_center; + vec4 color = delta.x * delta.y * delta.z > 0.0 ? BLACK : WHITE; + gl_FragColor = vec4(vec3(intensity.y) + color.rgb * (intensity.x + emission_factor), 1.0); +} diff --git a/resources/shaders/toolpaths_cog.vs b/resources/shaders/toolpaths_cog.vs new file mode 100644 index 000000000..c7b1abfdb --- /dev/null +++ b/resources/shaders/toolpaths_cog.vs @@ -0,0 +1,40 @@ +#version 110 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +// x = tainted, y = specular; +varying vec2 intensity; +varying vec3 world_position; + +void main() +{ + // First transform the normal into camera space and normalize the result. + vec3 normal = normalize(gl_NormalMatrix * gl_Normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec3 position = (gl_ModelViewMatrix * gl_Vertex).xyz; + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + world_position = gl_Vertex.xyz; + gl_Position = ftransform(); +} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9e89e82f6..61a2a90d8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -14,6 +14,7 @@ add_subdirectory(Shiny) add_subdirectory(semver) add_subdirectory(libigl) add_subdirectory(hints) +add_subdirectory(qoi) # Adding libnest2d project for bin packing... add_subdirectory(libnest2d) @@ -125,7 +126,7 @@ if (NOT WIN32 AND NOT APPLE) set_target_properties(PrusaSlicer PROPERTIES OUTPUT_NAME "prusa-slicer") endif () -target_link_libraries(PrusaSlicer libslic3r cereal) +target_link_libraries(PrusaSlicer libslic3r libcereal) if (APPLE) # add_compile_options(-stdlib=libc++) # add_definitions(-DBOOST_THREAD_DONT_USE_CHRONO -DBOOST_NO_CXX11_RVALUE_REFERENCES -DBOOST_THREAD_USES_MOVE) diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp index 2648fba9e..4483d6010 100644 --- a/src/PrusaSlicer.cpp +++ b/src/PrusaSlicer.cpp @@ -498,8 +498,6 @@ int CLI::run(int argc, char **argv) std::string outfile = m_config.opt_string("output"); Print fff_print; SLAPrint sla_print; - SL1Archive sla_archive(sla_print.printer_config()); - sla_print.set_printer(&sla_archive); sla_print.set_status_callback( [](const PrintBase::SlicingStatus& s) { @@ -539,7 +537,7 @@ int CLI::run(int argc, char **argv) outfile = sla_print.output_filepath(outfile); // We need to finalize the filename beforehand because the export function sets the filename inside the zip metadata outfile_final = sla_print.print_statistics().finalize_output_path(outfile); - sla_archive.export_print(outfile_final, sla_print); + sla_print.export_print(outfile_final); } if (outfile != outfile_final) { if (Slic3r::rename_file(outfile, outfile_final)) { @@ -838,6 +836,7 @@ extern "C" { "leak:libnvidia-glcore.so\n" // For NVidia driver. "leak:libnvidia-tls.so\n" // For NVidia driver. "leak:terminator_CreateDevice\n" // For Intel Vulkan drivers. + "leak:swrast_dri.so\n" // For Mesa 3D software driver. ; } } diff --git a/src/imgui/imconfig.h b/src/imgui/imconfig.h index db0e54e60..f2c3ef083 100644 --- a/src/imgui/imconfig.h +++ b/src/imgui/imconfig.h @@ -165,8 +165,9 @@ namespace ImGui const wchar_t LegendColorChanges = 0x2612; const wchar_t LegendPausePrints = 0x2613; const wchar_t LegendCustomGCodes = 0x2614; - const wchar_t LegendShells = 0x2615; - const wchar_t LegendToolMarker = 0x2616; + const wchar_t LegendCOG = 0x2615; + const wchar_t LegendShells = 0x2616; + const wchar_t LegendToolMarker = 0x2617; // void MyFunction(const char* name, const MyMatrix44& v); } diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index bf2a219d0..8124b23e3 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -552,7 +552,7 @@ static CircleBed to_circle(const Point ¢er, const Points& points) { std::vector vertex_distances; double avg_dist = 0; - for (auto pt : points) + for (const Point& pt : points) { double distance = distance_to(center, pt); vertex_distances.push_back(distance); diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp index 08e0d4151..f48d7ff0a 100644 --- a/src/libslic3r/Brim.cpp +++ b/src/libslic3r/Brim.cpp @@ -10,7 +10,10 @@ #include #include #include +#include + #include +#include #ifndef NDEBUG // #define BRIM_DEBUG_TO_SVG @@ -200,20 +203,94 @@ static ExPolygons top_level_outer_brim_area(const Print &print return diff_ex(brim_area, no_brim_area); } -static ExPolygons inner_brim_area(const Print &print, - const ConstPrintObjectPtrs &top_level_objects_with_brim, - const std::vector &bottom_layers_expolygons, - const float no_brim_offset) +// Return vector of booleans indicated if polygons from bottom_layers_expolygons contain another polygon or not. +// Every ExPolygon is counted as several Polygons (contour and holes). Contour polygon is always processed before holes. +static std::vector has_polygons_nothing_inside(const Print &print, const std::vector &bottom_layers_expolygons) { assert(print.objects().size() == bottom_layers_expolygons.size()); + Polygons islands; + for(size_t print_object_idx = 0; print_object_idx < print.objects().size(); ++print_object_idx) { + const PrintObject *object = print.objects()[print_object_idx]; + const Polygons islands_object = to_polygons(bottom_layers_expolygons[print_object_idx]); + + islands.reserve(islands.size() + object->instances().size() * islands_object.size()); + for (const PrintInstance &instance : object->instances()) + append_and_translate(islands, islands_object, instance); + } + + ClipperLib_Z::Paths islands_clip; + islands_clip.reserve(islands.size()); + for (const Polygon &poly : islands) { + size_t island_idx = &poly - &islands.front(); + ClipperLib_Z::Path island_clip; + for (const Point &pt : poly.points) + island_clip.emplace_back(pt.x(), pt.y(), island_idx + 1); + islands_clip.emplace_back(island_clip); + } + + ClipperLib_Z::Clipper clipper; + // Always assign zero to detect cases when two polygons are overlapping. + clipper.ZFillFunction([](const ClipperLib_Z::IntPoint &e1bot, const ClipperLib_Z::IntPoint &e1top, const ClipperLib_Z::IntPoint &e2bot, const ClipperLib_Z::IntPoint &e2top, ClipperLib_Z::IntPoint &pt) { + pt.z() = 0; + }); + + clipper.AddPaths(islands_clip, ClipperLib_Z::ptSubject, true); + ClipperLib_Z::PolyTree islands_polytree; + clipper.Execute(ClipperLib_Z::ctUnion, islands_polytree, ClipperLib_Z::pftEvenOdd, ClipperLib_Z::pftEvenOdd); + + std::vector has_nothing_inside(islands.size()); + std::function check_contours = [&check_contours, &has_nothing_inside](const ClipperLib_Z::PolyNode &parent_node)->void { + if (!parent_node.Childs.empty()) + for(const ClipperLib_Z::PolyNode *child_node : parent_node.Childs) + check_contours(*child_node); + + if (parent_node.Childs.empty() && !parent_node.Contour.empty() && parent_node.Contour.front().z() != 0) { + int polygon_idx = parent_node.Contour.front().z(); + assert(polygon_idx > 0 && polygon_idx <= int(has_nothing_inside.size())); + + // The whole contour must have the same ID. In other cases, some counters overlap. + for (const ClipperLib_Z::IntPoint &point : parent_node.Contour) + if (polygon_idx != point.z()) + return; + + has_nothing_inside[polygon_idx - 1] = true; + } + }; + + check_contours(islands_polytree); + return has_nothing_inside; +} + +// INNERMOST means that ExPolygon doesn't contain any other ExPolygons. +// NORMAL is for other cases. +enum class InnerBrimType {NORMAL, INNERMOST}; + +struct InnerBrimExPolygons +{ + ExPolygons brim_area; + InnerBrimType type = InnerBrimType::NORMAL; + double brim_width = 0.; +}; + +static std::vector inner_brim_area(const Print &print, + const ConstPrintObjectPtrs &top_level_objects_with_brim, + const std::vector &bottom_layers_expolygons, + const float no_brim_offset) +{ + assert(print.objects().size() == bottom_layers_expolygons.size()); + std::vector has_nothing_inside = has_polygons_nothing_inside(print, bottom_layers_expolygons); std::unordered_set top_level_objects_idx; top_level_objects_idx.reserve(top_level_objects_with_brim.size()); for (const PrintObject *object : top_level_objects_with_brim) top_level_objects_idx.insert(object->id().id); - ExPolygons brim_area; - ExPolygons no_brim_area; - Polygons holes; + std::vector brim_area_innermost(print.objects().size()); + ExPolygons brim_area; + ExPolygons no_brim_area; + Polygons holes_reversed; + + // polygon_idx must correspond to idx generated inside has_polygons_nothing_inside() + size_t polygon_idx = 0; for(size_t print_object_idx = 0; print_object_idx < print.objects().size(); ++print_object_idx) { const PrintObject *object = print.objects()[print_object_idx]; const BrimType brim_type = object->config().brim_type.value; @@ -221,9 +298,10 @@ static ExPolygons inner_brim_area(const Print &print, const float brim_width = scale_(object->config().brim_width.value); const bool top_outer_brim = top_level_objects_idx.find(object->id().id) != top_level_objects_idx.end(); + ExPolygons brim_area_innermost_object; ExPolygons brim_area_object; ExPolygons no_brim_area_object; - Polygons holes_object; + Polygons holes_reversed_object; for (const ExPolygon &ex_poly : bottom_layers_expolygons[print_object_idx]) { if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner) { if (top_outer_brim) @@ -235,8 +313,20 @@ static ExPolygons inner_brim_area(const Print &print, // After 7ff76d07684858fd937ef2f5d863f105a10f798e offset and shrink don't work with CW polygons (holes), so let's make it CCW. Polygons ex_poly_holes_reversed = ex_poly.holes; polygons_reverse(ex_poly_holes_reversed); - if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btOuterAndInner) - append(brim_area_object, diff_ex(shrink_ex(ex_poly_holes_reversed, brim_separation, ClipperLib::jtSquare), shrink_ex(ex_poly_holes_reversed, brim_width + brim_separation, ClipperLib::jtSquare))); + for ([[maybe_unused]] const PrintInstance &instance : object->instances()) { + ++polygon_idx; // Increase idx because of the contour of the ExPolygon. + + if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btOuterAndInner) + for(const Polygon &hole : ex_poly_holes_reversed) { + size_t hole_idx = &hole - &ex_poly_holes_reversed.front(); + if (has_nothing_inside[polygon_idx + hole_idx]) + append(brim_area_innermost_object, shrink_ex({hole}, brim_separation, ClipperLib::jtSquare)); + else + append(brim_area_object, diff_ex(shrink_ex({hole}, brim_separation, ClipperLib::jtSquare), shrink_ex({hole}, brim_width + brim_separation, ClipperLib::jtSquare))); + } + + polygon_idx += ex_poly.holes.size(); // Increase idx for every hole of the ExPolygon. + } if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btNoBrim) append(no_brim_area_object, diff_ex(offset(ex_poly.contour, no_brim_offset, ClipperLib::jtSquare), ex_poly_holes_reversed)); @@ -244,18 +334,34 @@ static ExPolygons inner_brim_area(const Print &print, if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btNoBrim) append(no_brim_area_object, diff_ex(ExPolygon(ex_poly.contour), shrink_ex(ex_poly_holes_reversed, no_brim_offset, ClipperLib::jtSquare))); - append(holes_object, ex_poly_holes_reversed); + append(holes_reversed_object, ex_poly_holes_reversed); } append(no_brim_area_object, offset_ex(bottom_layers_expolygons[print_object_idx], brim_separation, ClipperLib::jtSquare)); for (const PrintInstance &instance : object->instances()) { + append_and_translate(brim_area_innermost[print_object_idx], brim_area_innermost_object, instance); append_and_translate(brim_area, brim_area_object, instance); append_and_translate(no_brim_area, no_brim_area_object, instance); - append_and_translate(holes, holes_object, instance); + append_and_translate(holes_reversed, holes_reversed_object, instance); } } + assert(polygon_idx == has_nothing_inside.size()); - return diff_ex(intersection_ex(to_polygons(std::move(brim_area)), holes), no_brim_area); + ExPolygons brim_area_innermost_merged; + // Append all innermost brim areas. + std::vector brim_area_out; + for (size_t print_object_idx = 0; print_object_idx < print.objects().size(); ++print_object_idx) + if (const double brim_width = print.objects()[print_object_idx]->config().brim_width.value; !brim_area_innermost[print_object_idx].empty()) { + append(brim_area_innermost_merged, brim_area_innermost[print_object_idx]); + brim_area_out.push_back({std::move(brim_area_innermost[print_object_idx]), InnerBrimType::INNERMOST, brim_width}); + } + + // Append all normal brim areas. + brim_area_out.push_back({diff_ex(intersection_ex(to_polygons(std::move(brim_area)), holes_reversed), no_brim_area), InnerBrimType::NORMAL}); + + // Cut out a huge brim areas that overflows into the INNERMOST holes. + brim_area_out.back().brim_area = diff_ex(brim_area_out.back().brim_area, brim_area_innermost_merged); + return brim_area_out; } // Flip orientation of open polylines to minimize travel distance. @@ -359,17 +465,28 @@ static void make_inner_brim(const Print &print, ExtrusionEntityCollection &brim) { assert(print.objects().size() == bottom_layers_expolygons.size()); - const auto scaled_resolution = scaled(print.config().gcode_resolution.value); - Flow flow = print.brim_flow(); - ExPolygons islands_ex = inner_brim_area(print, top_level_objects_with_brim, bottom_layers_expolygons, float(flow.scaled_spacing())); - Polygons loops; - islands_ex = offset_ex(islands_ex, -0.5f * float(flow.scaled_spacing()), ClipperLib::jtSquare); - for (size_t i = 0; !islands_ex.empty(); ++i) { - for (ExPolygon &poly_ex : islands_ex) - poly_ex.douglas_peucker(scaled_resolution); - polygons_append(loops, to_polygons(islands_ex)); - islands_ex = offset_ex(islands_ex, -float(flow.scaled_spacing()), ClipperLib::jtSquare); - } + const auto scaled_resolution = scaled(print.config().gcode_resolution.value); + Flow flow = print.brim_flow(); + std::vector inner_brims_ex = inner_brim_area(print, top_level_objects_with_brim, bottom_layers_expolygons, float(flow.scaled_spacing())); + Polygons loops; + std::mutex loops_mutex; + tbb::parallel_for(tbb::blocked_range(0, inner_brims_ex.size()), [&inner_brims_ex, &flow, &scaled_resolution, &loops, &loops_mutex](const tbb::blocked_range &range) { + for (size_t brim_idx = range.begin(); brim_idx < range.end(); ++brim_idx) { + const InnerBrimExPolygons &inner_brim_ex = inner_brims_ex[brim_idx]; + auto num_loops = size_t(floor(inner_brim_ex.brim_width / flow.spacing())); + ExPolygons islands_ex = offset_ex(inner_brim_ex.brim_area, -0.5f * float(flow.scaled_spacing()), ClipperLib::jtSquare); + for (size_t i = 0; (inner_brim_ex.type == InnerBrimType::INNERMOST ? i < num_loops : !islands_ex.empty()); ++i) { + for (ExPolygon &poly_ex : islands_ex) + poly_ex.douglas_peucker(scaled_resolution); + + { + boost::lock_guard lock(loops_mutex); + polygons_append(loops, to_polygons(islands_ex)); + } + islands_ex = offset_ex(islands_ex, -float(flow.scaled_spacing()), ClipperLib::jtSquare); + } + } + }); // end of parallel_for loops = union_pt_chained_outside_in(loops); std::reverse(loops.begin(), loops.end()); diff --git a/src/libslic3r/BuildVolume.hpp b/src/libslic3r/BuildVolume.hpp index 6b928d48b..b4ac118ec 100644 --- a/src/libslic3r/BuildVolume.hpp +++ b/src/libslic3r/BuildVolume.hpp @@ -94,6 +94,12 @@ public: // Called on initial G-code preview on OpenGL vertex buffer interleaved normals and vertices. bool all_paths_inside_vertices_and_normals_interleaved(const std::vector& paths, const Eigen::AlignedBox& bbox, bool ignore_bottom = true) const; + +#if ENABLE_LEGACY_OPENGL_REMOVAL + const std::pair, std::vector>& top_bottom_convex_hull_decomposition_scene() const { return m_top_bottom_convex_hull_decomposition_scene; } + const std::pair, std::vector>& top_bottom_convex_hull_decomposition_bed() const { return m_top_bottom_convex_hull_decomposition_bed; } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + private: // Source definition of the print bed geometry (PrintConfig::bed_shape) std::vector m_bed_shape; diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 39bc1aa47..5e8d681f1 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -94,10 +94,18 @@ set(SLIC3R_SOURCES Format/objparser.hpp Format/STL.cpp Format/STL.hpp + Format/SLAArchive.hpp + Format/SLAArchive.cpp Format/SL1.hpp Format/SL1.cpp + Format/SL1_SVG.hpp + Format/SL1_SVG.cpp + Format/pwmx.hpp + Format/pwmx.cpp GCode/ThumbnailData.cpp GCode/ThumbnailData.hpp + GCode/Thumbnails.cpp + GCode/Thumbnails.hpp GCode/CoolingBuffer.cpp GCode/CoolingBuffer.hpp GCode/FindReplace.cpp @@ -344,10 +352,13 @@ encoding_check(libslic3r) target_compile_definitions(libslic3r PUBLIC -DUSE_TBB -DTBB_USE_CAPTURED_EXCEPTION=0) target_include_directories(libslic3r PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) target_include_directories(libslic3r PUBLIC ${EXPAT_INCLUDE_DIRS}) + +find_package(JPEG REQUIRED) + target_link_libraries(libslic3r libnest2d admesh - cereal + libcereal libigl miniz boost_libs @@ -362,6 +373,8 @@ target_link_libraries(libslic3r ${CMAKE_DL_LIBS} PNG::PNG ZLIB::ZLIB + JPEG::JPEG + qoi ) if (TARGET OpenVDB::openvdb) diff --git a/src/libslic3r/Color.cpp b/src/libslic3r/Color.cpp index 7b5a7f3ba..4d3bc6793 100644 --- a/src/libslic3r/Color.cpp +++ b/src/libslic3r/Color.cpp @@ -130,6 +130,8 @@ bool ColorRGB::operator < (const ColorRGB& other) const for (size_t i = 0; i < 3; ++i) { if (m_data[i] < other.m_data[i]) return true; + else if (m_data[i] > other.m_data[i]) + return false; } return false; @@ -140,6 +142,8 @@ bool ColorRGB::operator > (const ColorRGB& other) const for (size_t i = 0; i < 3; ++i) { if (m_data[i] > other.m_data[i]) return true; + else if (m_data[i] < other.m_data[i]) + return false; } return false; @@ -179,6 +183,8 @@ bool ColorRGBA::operator < (const ColorRGBA& other) const for (size_t i = 0; i < 3; ++i) { if (m_data[i] < other.m_data[i]) return true; + else if (m_data[i] > other.m_data[i]) + return false; } return false; @@ -189,6 +195,8 @@ bool ColorRGBA::operator > (const ColorRGBA& other) const for (size_t i = 0; i < 3; ++i) { if (m_data[i] > other.m_data[i]) return true; + else if (m_data[i] < other.m_data[i]) + return false; } return false; diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index 18b97665d..0297a8d42 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -306,7 +306,7 @@ ConfigOptionDef* ConfigDef::add_nullable(const t_config_option_key &opt_key, Con std::ostream& ConfigDef::print_cli_help(std::ostream& out, bool show_defaults, std::function filter) const { // prepare a function for wrapping text - auto wrap = [](std::string text, size_t line_length) -> std::string { + auto wrap = [](const std::string& text, size_t line_length) -> std::string { std::istringstream words(text); std::ostringstream wrapped; std::string word; @@ -335,7 +335,7 @@ std::ostream& ConfigDef::print_cli_help(std::ostream& out, bool show_defaults, s categories.insert(def.category); } - for (auto category : categories) { + for (const std::string& category : categories) { if (category != "") { out << category << ":" << std::endl; } else if (categories.size() > 1) { diff --git a/src/libslic3r/CustomGCode.cpp b/src/libslic3r/CustomGCode.cpp index 193235bf8..213437782 100644 --- a/src/libslic3r/CustomGCode.cpp +++ b/src/libslic3r/CustomGCode.cpp @@ -41,7 +41,7 @@ extern void check_mode_for_custom_gcode_per_print_z(Info& info) return; bool is_single_extruder = true; - for (auto item : info.gcodes) + for (const Item& item : info.gcodes) { if (item.type == ToolChange) { info.mode = MultiAsSingle; diff --git a/src/libslic3r/ExPolygon.hpp b/src/libslic3r/ExPolygon.hpp index 6f3884673..cbf6b1c1a 100644 --- a/src/libslic3r/ExPolygon.hpp +++ b/src/libslic3r/ExPolygon.hpp @@ -169,10 +169,10 @@ inline Polylines to_polylines(ExPolygon &&src) Polyline &pl = polylines[idx ++]; pl.points = std::move(src.contour.points); pl.points.push_back(pl.points.front()); - for (Polygons::const_iterator ith = src.holes.begin(); ith != src.holes.end(); ++ith) { + for (auto ith = src.holes.begin(); ith != src.holes.end(); ++ith) { Polyline &pl = polylines[idx ++]; pl.points = std::move(ith->points); - pl.points.push_back(ith->points.front()); + pl.points.push_back(pl.points.front()); } assert(idx == polylines.size()); return polylines; @@ -183,14 +183,14 @@ inline Polylines to_polylines(ExPolygons &&src) Polylines polylines; polylines.assign(number_polygons(src), Polyline()); size_t idx = 0; - for (ExPolygons::const_iterator it = src.begin(); it != src.end(); ++it) { + for (auto it = src.begin(); it != src.end(); ++it) { Polyline &pl = polylines[idx ++]; pl.points = std::move(it->contour.points); pl.points.push_back(pl.points.front()); - for (Polygons::const_iterator ith = it->holes.begin(); ith != it->holes.end(); ++ith) { + for (auto ith = it->holes.begin(); ith != it->holes.end(); ++ith) { Polyline &pl = polylines[idx ++]; pl.points = std::move(ith->points); - pl.points.push_back(ith->points.front()); + pl.points.push_back(pl.points.front()); } } assert(idx == polylines.size()); diff --git a/src/libslic3r/Execution/Execution.hpp b/src/libslic3r/Execution/Execution.hpp index 62e49cfeb..dcfd86bde 100644 --- a/src/libslic3r/Execution/Execution.hpp +++ b/src/libslic3r/Execution/Execution.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "libslic3r/libslic3r.h" @@ -44,7 +45,8 @@ size_t max_concurrency(const EP &ep) template> void for_each(const EP &ep, It from, It to, Fn &&fn, size_t granularity = 1) { - AsTraits::for_each(ep, from, to, std::forward(fn), granularity); + AsTraits::for_each(ep, from, to, std::forward(fn), + std::max(granularity, size_t(1))); } // A reduce operation with the execution policy passed as argument. @@ -68,7 +70,7 @@ T reduce(const EP & ep, return AsTraits::reduce(ep, from, to, init, std::forward(mergefn), std::forward(accessfn), - granularity); + std::max(granularity, size_t(1))); } // An overload of reduce method to be used with iterators as 'from' and 'to' @@ -87,7 +89,7 @@ T reduce(const EP &ep, { return reduce( ep, from, to, init, std::forward(mergefn), - [](const auto &i) { return i; }, granularity); + [](const auto &i) { return i; }, std::max(granularity, size_t(1))); } template{}, - std::forward(accessfn), granularity); + std::forward(accessfn), + std::max(granularity, size_t(1))); } @@ -119,7 +122,7 @@ T accumulate(const EP &ep, { return reduce( ep, from, to, init, std::plus{}, [](const auto &i) { return i; }, - granularity); + std::max(granularity, size_t(1))); } } // namespace execution_policy diff --git a/src/libslic3r/Extruder.cpp b/src/libslic3r/Extruder.cpp index f7a5c5007..d2ff65097 100644 --- a/src/libslic3r/Extruder.cpp +++ b/src/libslic3r/Extruder.cpp @@ -1,4 +1,5 @@ #include "Extruder.hpp" +#include "GCodeWriter.hpp" #include "PrintConfig.hpp" namespace Slic3r { @@ -7,24 +8,24 @@ Extruder::Extruder(unsigned int id, GCodeConfig *config) : m_id(id), m_config(config) { - reset(); - // cache values that are going to be called often m_e_per_mm3 = this->extrusion_multiplier(); if (! m_config->use_volumetric_e) m_e_per_mm3 /= this->filament_crossection(); } -double Extruder::extrude(double dE) +std::pair Extruder::extrude(double dE) { // in case of relative E distances we always reset to 0 before any output if (m_config->use_relative_e_distances) m_E = 0.; + // Quantize extruder delta to G-code resolution. + dE = GCodeFormatter::quantize_e(dE); m_E += dE; m_absolute_E += dE; if (dE < 0.) m_retracted -= dE; - return dE; + return std::make_pair(dE, m_E); } /* This method makes sure the extruder is retracted by the specified amount @@ -34,28 +35,33 @@ double Extruder::extrude(double dE) The restart_extra argument sets the extra length to be used for unretraction. If we're actually performing a retraction, any restart_extra value supplied will overwrite the previous one if any. */ -double Extruder::retract(double length, double restart_extra) +std::pair Extruder::retract(double retract_length, double restart_extra) { // in case of relative E distances we always reset to 0 before any output if (m_config->use_relative_e_distances) m_E = 0.; - double to_retract = std::max(0., length - m_retracted); + // Quantize extruder delta to G-code resolution. + double to_retract = this->retract_to_go(retract_length); if (to_retract > 0.) { m_E -= to_retract; m_absolute_E -= to_retract; m_retracted += to_retract; - m_restart_extra = restart_extra; + m_restart_extra = restart_extra; } - return to_retract; + return std::make_pair(to_retract, m_E); } -double Extruder::unretract() +double Extruder::retract_to_go(double retract_length) const { - double dE = m_retracted + m_restart_extra; - this->extrude(dE); + return std::max(0., GCodeFormatter::quantize_e(retract_length - m_retracted)); +} + +std::pair Extruder::unretract() +{ + auto [dE, emitE] = this->extrude(m_retracted + m_restart_extra); m_retracted = 0.; m_restart_extra = 0.; - return dE; + return std::make_pair(dE, emitE); } // Used filament volume in mm^3. diff --git a/src/libslic3r/Extruder.hpp b/src/libslic3r/Extruder.hpp index e9c6927f8..7491b1c8f 100644 --- a/src/libslic3r/Extruder.hpp +++ b/src/libslic3r/Extruder.hpp @@ -12,22 +12,24 @@ class Extruder { public: Extruder(unsigned int id, GCodeConfig *config); - virtual ~Extruder() {} - - void reset() { - m_E = 0; - m_absolute_E = 0; - m_retracted = 0; - m_restart_extra = 0; - } + ~Extruder() = default; unsigned int id() const { return m_id; } - double extrude(double dE); - double retract(double length, double restart_extra); - double unretract(); - double E() const { return m_E; } - void reset_E() { m_E = 0.; } + // Following three methods emit: + // first - extrusion delta + // second - number to emit to G-code: This may be delta for relative mode or a distance from last reset_E() for absolute mode. + // They also quantize the E axis to G-code resolution. + std::pair extrude(double dE); + std::pair retract(double retract_length, double restart_extra); + std::pair unretract(); + // How much to retract yet before retract_length is reached? + // The value is quantized to G-code resolution. + double retract_to_go(double retract_length) const; + + // Reset the current state of the E axis (this is only needed for relative extruder addressing mode anyways). + // Returns true if the extruder was non-zero before reset. + bool reset_E() { bool modified = m_E != 0; m_E = 0.; return modified; } double e_per_mm(double mm3_per_mm) const { return mm3_per_mm * m_e_per_mm3; } double e_per_mm3() const { return m_e_per_mm3; } // Used filament volume in mm^3. @@ -57,14 +59,16 @@ private: GCodeConfig *m_config; // Print-wide global ID of this extruder. unsigned int m_id; - // Current state of the extruder axis, may be resetted if use_relative_e_distances. - double m_E; + // Current state of the extruder axis. + // For absolute extruder addressing, it is the current state since the last reset (G92 E0) issued at the end of the last retraction. + // For relative extruder addressing, it is the E axis difference emitted into the G-code the last time. + double m_E { 0 }; // Current state of the extruder tachometer, used to output the extruded_volume() and used_filament() statistics. - double m_absolute_E; + double m_absolute_E { 0 }; // Current positive amount of retraction. - double m_retracted; + double m_retracted { 0 }; // When retracted, this value stores the extra amount of priming on deretraction. - double m_restart_extra; + double m_restart_extra { 0 }; double m_e_per_mm3; }; @@ -76,4 +80,4 @@ inline bool operator> (const Extruder &e1, const Extruder &e2) { return e1.id() } -#endif +#endif // slic3r_Extruder_hpp_ diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index 1c990f5ea..5e6a51d20 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -242,7 +242,7 @@ public: ExtrusionLoop(ExtrusionPaths &&paths, ExtrusionLoopRole role = elrDefault) : paths(std::move(paths)), m_loop_role(role) {} ExtrusionLoop(const ExtrusionPath &path, ExtrusionLoopRole role = elrDefault) : m_loop_role(role) { this->paths.push_back(path); } - ExtrusionLoop(const ExtrusionPath &&path, ExtrusionLoopRole role = elrDefault) : m_loop_role(role) + ExtrusionLoop(ExtrusionPath &&path, ExtrusionLoopRole role = elrDefault) : m_loop_role(role) { this->paths.emplace_back(std::move(path)); } bool is_loop() const override{ return true; } bool can_reverse() const override { return false; } diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index a3e4aee31..e6b820188 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -11,6 +11,7 @@ #include "FillBase.hpp" #include "FillRectilinear.hpp" +#include "FillLightning.hpp" namespace Slic3r { @@ -318,7 +319,7 @@ void export_group_fills_to_svg(const char *path, const std::vector #endif // friend to Layer -void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree) +void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree, FillLightning::Generator* lightning_generator) { for (LayerRegion *layerm : m_regions) layerm->fills.clear(); @@ -348,6 +349,9 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: f->angle = surface_fill.params.angle; f->adapt_fill_octree = (surface_fill.params.pattern == ipSupportCubic) ? support_fill_octree : adaptive_fill_octree; + if (surface_fill.params.pattern == ipLightning) + dynamic_cast(f.get())->generator = lightning_generator; + // calculate flow spacing for infill pattern generation bool using_internal_flow = ! surface_fill.surface.is_solid() && ! surface_fill.params.bridge; double link_max_length = 0.; diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 7ca0699c0..c4f8d6f08 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -46,9 +46,7 @@ Fill* Fill::new_from_type(const InfillPattern type) case ipAdaptiveCubic: return new FillAdaptive::Filler(); case ipSupportCubic: return new FillAdaptive::Filler(); case ipSupportBase: return new FillSupportBase(); -#if HAS_LIGHTNING_INFILL case ipLightning: return new FillLightning::Filler(); -#endif // HAS_LIGHTNING_INFILL default: throw Slic3r::InvalidArgument("unknown type"); } } diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp index 6c57a64bf..9ba060b85 100644 --- a/src/libslic3r/Fill/FillBase.hpp +++ b/src/libslic3r/Fill/FillBase.hpp @@ -125,7 +125,7 @@ protected: unsigned int /* thickness_layers */, const std::pair & /* direction */, ExPolygon /* expolygon */, - Polylines & /* polylines_out */) {}; + Polylines & /* polylines_out */) {} virtual float _layer_angle(size_t idx) const { return (idx & 1) ? float(M_PI/2.) : 0; } diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index 7d868860a..264ae8a59 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -406,13 +406,15 @@ public: // for the infill pattern, don't cut the corners. // default miterLimt = 3 //double miterLimit = 10.; - assert(aoffset1 < 0); + // FIXME: Resolve properly the cases when it is constructed with aoffset1 = 0 and aoffset2 = 0, + // that is used in sample_grid_pattern() for Lightning infill. + // assert(aoffset1 < 0); assert(aoffset2 <= 0); - assert(aoffset2 == 0 || aoffset2 < aoffset1); + // assert(aoffset2 == 0 || aoffset2 < aoffset1); // bool sticks_removed = remove_sticks(polygons_src); // if (sticks_removed) BOOST_LOG_TRIVIAL(error) << "Sticks removed!"; - polygons_outer = offset(polygons_src, float(aoffset1), ClipperLib::jtMiter, miterLimit); + polygons_outer = aoffset1 == 0 ? polygons_src : offset(polygons_src, float(aoffset1), ClipperLib::jtMiter, miterLimit); if (aoffset2 < 0) polygons_inner = shrink(polygons_outer, float(aoffset1 - aoffset2), ClipperLib::jtMiter, miterLimit); // Filter out contours with zero area or small area, contours with 2 points only. diff --git a/src/libslic3r/Fill/Lightning/DistanceField.cpp b/src/libslic3r/Fill/Lightning/DistanceField.cpp index 6df1d043c..308ca41c6 100644 --- a/src/libslic3r/Fill/Lightning/DistanceField.cpp +++ b/src/libslic3r/Fill/Lightning/DistanceField.cpp @@ -10,27 +10,29 @@ namespace Slic3r::FillLightning constexpr coord_t radius_per_cell_size = 6; // The cell-size should be small compared to the radius, but not so small as to be inefficient. -DistanceField::DistanceField(const coord_t& radius, const Polygons& current_outline, const Polygons& current_overhang) : - m_cell_size(radius / radius_per_cell_size), - m_supporting_radius(radius) +DistanceField::DistanceField(const coord_t& radius, const Polygons& current_outline, const BoundingBox& current_outlines_bbox, const Polygons& current_overhang) : + m_cell_size(radius / radius_per_cell_size), + m_supporting_radius(radius), + m_unsupported_points_bbox(current_outlines_bbox) { - m_supporting_radius2 = double(radius) * double(radius); + m_supporting_radius2 = Slic3r::sqr(int64_t(radius)); // Sample source polygons with a regular grid sampling pattern. - for (const ExPolygon &expoly : union_ex(current_outline)) { + for (const ExPolygon &expoly : union_ex(current_overhang)) { for (const Point &p : sample_grid_pattern(expoly, m_cell_size)) { // Find a squared distance to the source expolygon boundary. double d2 = std::numeric_limits::max(); - for (size_t icontour = 0; icontour <= expoly.holes.size(); ++ icontour) { + for (size_t icontour = 0; icontour <= expoly.holes.size(); ++icontour) { const Polygon &contour = icontour == 0 ? expoly.contour : expoly.holes[icontour - 1]; if (contour.size() > 2) { Point prev = contour.points.back(); for (const Point &p2 : contour.points) { - d2 = std::min(d2, Line::distance_to_squared(p, prev, p2)); + d2 = std::min(d2, Line::distance_to_squared(p, prev, p2)); prev = p2; } } } m_unsupported_points.emplace_back(p, sqrt(d2)); + assert(m_unsupported_points_bbox.contains(p)); } } m_unsupported_points.sort([&radius](const UnsupportedCell &a, const UnsupportedCell &b) { @@ -41,8 +43,11 @@ DistanceField::DistanceField(const coord_t& radius, const Polygons& current_outl }); for (auto it = m_unsupported_points.begin(); it != m_unsupported_points.end(); ++it) { UnsupportedCell& cell = *it; - m_unsupported_points_grid.emplace(Point{ cell.loc.x() / m_cell_size, cell.loc.y() / m_cell_size }, it); + m_unsupported_points_grid.emplace(this->to_grid_point(cell.loc), it); } + // Because the distance between two points is at least one axis equal to m_cell_size, every cell + // in m_unsupported_points_grid contains exactly one point. + assert(m_unsupported_points.size() == m_unsupported_points_grid.size()); } void DistanceField::update(const Point& to_node, const Point& added_leaf) @@ -60,17 +65,24 @@ void DistanceField::update(const Point& to_node, const Point& added_leaf) grid.merge(to_node + iextent); grid.merge(added_leaf - iextent); grid.merge(added_leaf + iextent); - grid.min /= m_cell_size; - grid.max /= m_cell_size; + + // Clip grid by m_unsupported_points_bbox. Mainly to ensure that grid.min is a non-negative value. + grid.min.x() = std::max(grid.min.x(), m_unsupported_points_bbox.min.x()); + grid.min.y() = std::max(grid.min.y(), m_unsupported_points_bbox.min.y()); + grid.max.x() = std::min(grid.max.x(), m_unsupported_points_bbox.max.x()); + grid.max.y() = std::min(grid.max.y(), m_unsupported_points_bbox.max.y()); + + grid.min = this->to_grid_point(grid.min); + grid.max = this->to_grid_point(grid.max); } + Point grid_addr; Point grid_loc; - for (coord_t row = grid.min.y(); row <= grid.max.y(); ++ row) { - grid_loc.y() = row * m_cell_size; - for (coord_t col = grid.min.x(); col <= grid.max.y(); ++ col) { - grid_loc.x() = col * m_cell_size; + for (grid_addr.y() = grid.min.y(); grid_addr.y() <= grid.max.y(); ++grid_addr.y()) { + for (grid_addr.x() = grid.min.x(); grid_addr.x() <= grid.max.x(); ++grid_addr.x()) { + grid_loc = this->from_grid_point(grid_addr); // Test inside a circle at the new leaf. - if ((grid_loc - added_leaf).cast().squaredNorm() > m_supporting_radius2) { + if ((grid_loc - added_leaf).cast().squaredNorm() > m_supporting_radius2) { // Not inside a circle at the end of the new leaf. // Test inside a rotated rectangle. Vec2d vx = (grid_loc - to_node).cast(); @@ -84,10 +96,10 @@ void DistanceField::update(const Point& to_node, const Point& added_leaf) } // Inside a circle at the end of the new leaf, or inside a rotated rectangle. // Remove unsupported leafs at this grid location. - if (auto it = m_unsupported_points_grid.find(grid_loc); it != m_unsupported_points_grid.end()) { + if (auto it = m_unsupported_points_grid.find(grid_addr); it != m_unsupported_points_grid.end()) { std::list::iterator& list_it = it->second; UnsupportedCell& cell = *list_it; - if ((cell.loc - added_leaf).cast().squaredNorm() <= m_supporting_radius2) { + if ((cell.loc - added_leaf).cast().squaredNorm() <= m_supporting_radius2) { m_unsupported_points.erase(list_it); m_unsupported_points_grid.erase(it); } @@ -96,4 +108,25 @@ void DistanceField::update(const Point& to_node, const Point& added_leaf) } } +#if 0 +void DistanceField::update(const Point &to_node, const Point &added_leaf) +{ + const Point supporting_radius_point(m_supporting_radius, m_supporting_radius); + const BoundingBox grid(this->to_grid_point(added_leaf - supporting_radius_point), this->to_grid_point(added_leaf + supporting_radius_point)); + + for (coord_t grid_y = grid.min.y(); grid_y <= grid.max.y(); ++grid_y) { + for (coord_t grid_x = grid.min.x(); grid_x <= grid.max.x(); ++grid_x) { + if (auto it = m_unsupported_points_grid.find({grid_x, grid_y}); it != m_unsupported_points_grid.end()) { + std::list::iterator &list_it = it->second; + UnsupportedCell &cell = *list_it; + if ((cell.loc - added_leaf).cast().squaredNorm() <= m_supporting_radius2) { + m_unsupported_points.erase(list_it); + m_unsupported_points_grid.erase(it); + } + } + } + } +} +#endif + } // namespace Slic3r::FillLightning diff --git a/src/libslic3r/Fill/Lightning/DistanceField.hpp b/src/libslic3r/Fill/Lightning/DistanceField.hpp index 7fdce434c..beb46c5c5 100644 --- a/src/libslic3r/Fill/Lightning/DistanceField.hpp +++ b/src/libslic3r/Fill/Lightning/DistanceField.hpp @@ -4,6 +4,7 @@ #ifndef LIGHTNING_DISTANCE_FIELD_H #define LIGHTNING_DISTANCE_FIELD_H +#include "../../BoundingBox.hpp" #include "../../Point.hpp" #include "../../Polygon.hpp" @@ -29,7 +30,7 @@ public: * \param current_overhang The overhang that needs to be supported on this * layer. */ - DistanceField(const coord_t& radius, const Polygons& current_outline, const Polygons& current_overhang); + DistanceField(const coord_t& radius, const Polygons& current_outline, const BoundingBox& current_outlines_bbox, const Polygons& current_overhang); /*! * Gets the next unsupported location to be supported by a new branch. @@ -69,14 +70,14 @@ protected: * branch of a tree. */ coord_t m_supporting_radius; - double m_supporting_radius2; + int64_t m_supporting_radius2; /*! * Represents a small discrete area of infill that needs to be supported. */ struct UnsupportedCell { - UnsupportedCell(Point loc, coord_t dist_to_boundary) : loc(loc), dist_to_boundary(dist_to_boundary) {} + UnsupportedCell(const Point &loc, coord_t dist_to_boundary) : loc(loc), dist_to_boundary(dist_to_boundary) {} // The position of the center of this cell. Point loc; // How far this cell is removed from the ``current_outline`` polygon, the edge of the infill area. @@ -88,11 +89,30 @@ protected: */ std::list m_unsupported_points; + /*! + * BoundingBox of all points in m_unsupported_points. Used for mapping of sign integer numbers to positive integer numbers. + */ + const BoundingBox m_unsupported_points_bbox; + /*! * Links the unsupported points to a grid point, so that we can quickly look * up the cell belonging to a certain position in the grid. */ std::unordered_map::iterator, PointHash> m_unsupported_points_grid; + + /*! + * Maps the point to the grid coordinates. + */ + Point to_grid_point(const Point &point) const { + return (point - m_unsupported_points_bbox.min) / m_cell_size; + } + + /*! + * Maps the point to the grid coordinates. + */ + Point from_grid_point(const Point &point) const { + return point * m_cell_size + m_unsupported_points_bbox.min; + } }; } // namespace Slic3r::FillLightning diff --git a/src/libslic3r/Fill/Lightning/Generator.cpp b/src/libslic3r/Fill/Lightning/Generator.cpp index 87b593f89..6a4a675cb 100644 --- a/src/libslic3r/Fill/Lightning/Generator.cpp +++ b/src/libslic3r/Fill/Lightning/Generator.cpp @@ -35,17 +35,17 @@ Generator::Generator(const PrintObject &print_object) // const int infill_extruder = region_config.infill_extruder.value; const double default_infill_extrusion_width = Flow::auto_extrusion_width(FlowRole::frInfill, float(max_nozzle_diameter)); // Note: There's not going to be a layer below the first one, so the 'initial layer height' doesn't have to be taken into account. - const double layer_thickness = object_config.layer_height; + const double layer_thickness = scaled(object_config.layer_height.value); m_infill_extrusion_width = scaled(region_config.infill_extrusion_width.percent ? default_infill_extrusion_width * 0.01 * region_config.infill_extrusion_width : region_config.infill_extrusion_width); - m_supporting_radius = scaled(m_infill_extrusion_width * 0.001 / region_config.fill_density); + m_supporting_radius = coord_t(m_infill_extrusion_width) * 100 / coord_t(region_config.fill_density.value); - const double lightning_infill_overhang_angle = M_PI / 4; // 45 degrees - const double lightning_infill_prune_angle = M_PI / 4; // 45 degrees + const double lightning_infill_overhang_angle = M_PI / 4; // 45 degrees + const double lightning_infill_prune_angle = M_PI / 4; // 45 degrees const double lightning_infill_straightening_angle = M_PI / 4; // 45 degrees - m_wall_supporting_radius = layer_thickness * std::tan(lightning_infill_overhang_angle); - m_prune_length = layer_thickness * std::tan(lightning_infill_prune_angle); - m_straightening_max_distance = layer_thickness * std::tan(lightning_infill_straightening_angle); + m_wall_supporting_radius = coord_t(layer_thickness * std::tan(lightning_infill_overhang_angle)); + m_prune_length = coord_t(layer_thickness * std::tan(lightning_infill_prune_angle)); + m_straightening_max_distance = coord_t(layer_thickness * std::tan(lightning_infill_straightening_angle)); generateInitialInternalOverhangs(print_object); generateTrees(print_object); @@ -54,19 +54,20 @@ Generator::Generator(const PrintObject &print_object) void Generator::generateInitialInternalOverhangs(const PrintObject &print_object) { m_overhang_per_layer.resize(print_object.layers().size()); - const float infill_wall_offset = - m_infill_extrusion_width; + // FIXME: It can be adjusted to improve bonding between infill and perimeters. + const float infill_wall_offset = 0;// m_infill_extrusion_width; Polygons infill_area_above; //Iterate from top to bottom, to subtract the overhang areas above from the overhang areas on the layer below, to get only overhang in the top layer where it is overhanging. - for (int layer_nr = print_object.layers().size() - 1; layer_nr >= 0; layer_nr--) { + for (int layer_nr = int(print_object.layers().size()) - 1; layer_nr >= 0; layer_nr--) { Polygons infill_area_here; for (const LayerRegion* layerm : print_object.get_layer(layer_nr)->regions()) for (const Surface& surface : layerm->fill_surfaces.surfaces) if (surface.surface_type == stInternal) - append(infill_area_here, offset(surface.expolygon, infill_wall_offset)); + append(infill_area_here, infill_wall_offset == 0 ? surface.expolygon : offset(surface.expolygon, infill_wall_offset)); //Remove the part of the infill area that is already supported by the walls. - Polygons overhang = diff(offset(infill_area_here, -m_wall_supporting_radius), infill_area_above); + Polygons overhang = diff(offset(infill_area_here, -float(m_wall_supporting_radius)), infill_area_above); m_overhang_per_layer[layer_nr] = overhang; infill_area_above = std::move(infill_area_here); @@ -82,16 +83,17 @@ const Layer& Generator::getTreesForLayer(const size_t& layer_id) const void Generator::generateTrees(const PrintObject &print_object) { m_lightning_layers.resize(print_object.layers().size()); - const coord_t infill_wall_offset = - m_infill_extrusion_width; + // FIXME: It can be adjusted to improve bonding between infill and perimeters. + const coord_t infill_wall_offset = 0;// m_infill_extrusion_width; std::vector infill_outlines(print_object.layers().size(), Polygons()); // For-each layer from top to bottom: - for (int layer_id = print_object.layers().size() - 1; layer_id >= 0; layer_id--) + for (int layer_id = int(print_object.layers().size()) - 1; layer_id >= 0; layer_id--) for (const LayerRegion *layerm : print_object.get_layer(layer_id)->regions()) for (const Surface &surface : layerm->fill_surfaces.surfaces) if (surface.surface_type == stInternal) - append(infill_outlines[layer_id], offset(surface.expolygon, infill_wall_offset)); + append(infill_outlines[layer_id], infill_wall_offset == 0 ? surface.expolygon : offset(surface.expolygon, infill_wall_offset)); // For various operations its beneficial to quickly locate nearby features on the polygon: const size_t top_layer_id = print_object.layers().size() - 1; @@ -99,16 +101,16 @@ void Generator::generateTrees(const PrintObject &print_object) outlines_locator.create(infill_outlines[top_layer_id], locator_cell_size); // For-each layer from top to bottom: - for (int layer_id = top_layer_id; layer_id >= 0; layer_id--) - { - Layer& current_lightning_layer = m_lightning_layers[layer_id]; - Polygons& current_outlines = infill_outlines[layer_id]; + for (int layer_id = int(top_layer_id); layer_id >= 0; layer_id--) { + Layer ¤t_lightning_layer = m_lightning_layers[layer_id]; + const Polygons ¤t_outlines = infill_outlines[layer_id]; + const BoundingBox ¤t_outlines_bbox = get_extents(current_outlines); // register all trees propagated from the previous layer as to-be-reconnected std::vector to_be_reconnected_tree_roots = current_lightning_layer.tree_roots; - current_lightning_layer.generateNewTrees(m_overhang_per_layer[layer_id], current_outlines, outlines_locator, m_supporting_radius, m_wall_supporting_radius); - current_lightning_layer.reconnectRoots(to_be_reconnected_tree_roots, current_outlines, outlines_locator, m_supporting_radius, m_wall_supporting_radius); + current_lightning_layer.generateNewTrees(m_overhang_per_layer[layer_id], current_outlines, current_outlines_bbox, outlines_locator, m_supporting_radius, m_wall_supporting_radius); + current_lightning_layer.reconnectRoots(to_be_reconnected_tree_roots, current_outlines, current_outlines_bbox, outlines_locator, m_supporting_radius, m_wall_supporting_radius); // Initialize trees for next lower layer from the current one. if (layer_id == 0) diff --git a/src/libslic3r/Fill/Lightning/Generator.hpp b/src/libslic3r/Fill/Lightning/Generator.hpp index c44ecfe7a..b538c4dbe 100644 --- a/src/libslic3r/Fill/Lightning/Generator.hpp +++ b/src/libslic3r/Fill/Lightning/Generator.hpp @@ -45,7 +45,7 @@ public: * already be calculated at this point. * \param mesh The mesh to generate infill for. */ - Generator(const PrintObject &print_object); + explicit Generator(const PrintObject &print_object); /*! * Get a tree of paths generated for a certain layer of the mesh. diff --git a/src/libslic3r/Fill/Lightning/Layer.cpp b/src/libslic3r/Fill/Lightning/Layer.cpp index 1b3936e34..1e1127a79 100644 --- a/src/libslic3r/Fill/Lightning/Layer.cpp +++ b/src/libslic3r/Fill/Lightning/Layer.cpp @@ -3,12 +3,11 @@ #include "Layer.hpp" //The class we're implementing. -#include // advance - #include "DistanceField.hpp" #include "TreeNode.hpp" #include "../../Geometry.hpp" +#include "Utils.hpp" namespace Slic3r::FillLightning { @@ -23,10 +22,15 @@ Point GroundingLocation::p() const return tree_node ? tree_node->getLocation() : *boundary_location; } -void Layer::fillLocator(SparseNodeGrid &tree_node_locator) +inline static Point to_grid_point(const Point &point, const BoundingBox &bbox) { - std::function add_node_to_locator_func = [&tree_node_locator](NodeSPtr node) { - tree_node_locator.insert(std::make_pair(Point(node->getLocation().x() / locator_cell_size, node->getLocation().y() / locator_cell_size), node)); + return (point - bbox.min) / locator_cell_size; +} + +void Layer::fillLocator(SparseNodeGrid &tree_node_locator, const BoundingBox& current_outlines_bbox) +{ + std::function add_node_to_locator_func = [&tree_node_locator, ¤t_outlines_bbox](const NodeSPtr &node) { + tree_node_locator.insert(std::make_pair(to_grid_point(node->getLocation(), current_outlines_bbox), node)); }; for (auto& tree : tree_roots) tree->visitNodes(add_node_to_locator_func); @@ -36,38 +40,46 @@ void Layer::generateNewTrees ( const Polygons& current_overhang, const Polygons& current_outlines, + const BoundingBox& current_outlines_bbox, const EdgeGrid::Grid& outlines_locator, const coord_t supporting_radius, const coord_t wall_supporting_radius ) { - DistanceField distance_field(supporting_radius, current_outlines, current_overhang); + DistanceField distance_field(supporting_radius, current_outlines, current_outlines_bbox, current_overhang); SparseNodeGrid tree_node_locator; - fillLocator(tree_node_locator); + fillLocator(tree_node_locator, current_outlines_bbox); // Until no more points need to be added to support all: // Determine next point from tree/outline areas via distance-field Point unsupported_location; while (distance_field.tryGetNextPoint(&unsupported_location)) { GroundingLocation grounding_loc = getBestGroundingLocation( - unsupported_location, current_outlines, outlines_locator, supporting_radius, wall_supporting_radius, tree_node_locator); + unsupported_location, current_outlines, current_outlines_bbox, outlines_locator, supporting_radius, wall_supporting_radius, tree_node_locator); NodeSPtr new_parent; NodeSPtr new_child; this->attach(unsupported_location, grounding_loc, new_child, new_parent); - tree_node_locator.insert(std::make_pair(Point(new_child->getLocation().x() / locator_cell_size, new_child->getLocation().y() / locator_cell_size), new_child)); + tree_node_locator.insert(std::make_pair(to_grid_point(new_child->getLocation(), current_outlines_bbox), new_child)); if (new_parent) - tree_node_locator.insert(std::make_pair(Point(new_parent->getLocation().x() / locator_cell_size, new_parent->getLocation().y() / locator_cell_size), new_parent)); + tree_node_locator.insert(std::make_pair(to_grid_point(new_parent->getLocation(), current_outlines_bbox), new_parent)); // update distance field distance_field.update(grounding_loc.p(), unsupported_location); } + +#ifdef LIGHTNING_TREE_NODE_DEBUG_OUTPUT + { + static int iRun = 0; + export_to_svg(debug_out_path("FillLightning-TreeNodes-%d.svg", iRun++), current_outlines, this->tree_roots); + } +#endif /* LIGHTNING_TREE_NODE_DEBUG_OUTPUT */ } -static bool polygonCollidesWithLineSegment(const Point from, const Point to, const EdgeGrid::Grid &loc_to_line) +static bool polygonCollidesWithLineSegment(const Point &from, const Point &to, const EdgeGrid::Grid &loc_to_line) { struct Visitor { - explicit Visitor(const EdgeGrid::Grid &grid) : grid(grid) {} + explicit Visitor(const EdgeGrid::Grid &grid, const Line &line) : grid(grid), line(line) {} bool operator()(coord_t iy, coord_t ix) { // Called with a row and colum of the grid cell, which is intersected by a line. @@ -87,7 +99,7 @@ static bool polygonCollidesWithLineSegment(const Point from, const Point to, con const EdgeGrid::Grid& grid; Line line; bool intersect = false; - } visitor(loc_to_line); + } visitor(loc_to_line, {from, to}); loc_to_line.visit_cells_intersecting_line(from, to, visitor); return visitor.intersect; @@ -97,6 +109,7 @@ GroundingLocation Layer::getBestGroundingLocation ( const Point& unsupported_location, const Polygons& current_outlines, + const BoundingBox& current_outlines_bbox, const EdgeGrid::Grid& outline_locator, const coord_t supporting_radius, const coord_t wall_supporting_radius, @@ -128,8 +141,8 @@ GroundingLocation Layer::getBestGroundingLocation if (current_dist >= wall_supporting_radius) { // Only reconnect tree roots to other trees if they are not already close to the outlines. const coord_t search_radius = std::min(current_dist, within_dist); BoundingBox region(unsupported_location - Point(search_radius, search_radius), unsupported_location + Point(search_radius + locator_cell_size, search_radius + locator_cell_size)); - region.min /= locator_cell_size; - region.max /= locator_cell_size; + region.min = to_grid_point(region.min, current_outlines_bbox); + region.max = to_grid_point(region.max, current_outlines_bbox); Point grid_addr; for (grid_addr.y() = region.min.y(); grid_addr.y() < region.max.y(); ++ grid_addr.y()) for (grid_addr.x() = region.min.x(); grid_addr.x() < region.max.x(); ++ grid_addr.x()) { @@ -176,6 +189,7 @@ void Layer::reconnectRoots ( std::vector& to_be_reconnected_tree_roots, const Polygons& current_outlines, + const BoundingBox& current_outlines_bbox, const EdgeGrid::Grid& outline_locator, const coord_t supporting_radius, const coord_t wall_supporting_radius @@ -184,10 +198,10 @@ void Layer::reconnectRoots constexpr coord_t tree_connecting_ignore_offset = 100; SparseNodeGrid tree_node_locator; - fillLocator(tree_node_locator); + fillLocator(tree_node_locator, current_outlines_bbox); const coord_t within_max_dist = outline_locator.resolution() * 2; - for (auto root_ptr : to_be_reconnected_tree_roots) + for (const auto &root_ptr : to_be_reconnected_tree_roots) { auto old_root_it = std::find(tree_roots.begin(), tree_roots.end(), root_ptr); @@ -203,7 +217,7 @@ void Layer::reconnectRoots root_ptr->addChild(new_root); new_root->reroot(); - tree_node_locator.insert(std::make_pair(Point(new_root->getLocation().x() / locator_cell_size, new_root->getLocation().y() / locator_cell_size), new_root)); + tree_node_locator.insert(std::make_pair(to_grid_point(new_root->getLocation(), current_outlines_bbox), new_root)); *old_root_it = std::move(new_root); // replace old root with new root continue; @@ -217,6 +231,7 @@ void Layer::reconnectRoots ( root_ptr->getLocation(), current_outlines, + current_outlines_bbox, outline_locator, supporting_radius, tree_connecting_ignore_width, @@ -233,7 +248,7 @@ void Layer::reconnectRoots attach_ptr->reroot(); new_root->addChild(attach_ptr); - tree_node_locator.insert(std::make_pair(new_root->getLocation(), new_root)); + tree_node_locator.insert(std::make_pair(to_grid_point(new_root->getLocation(), current_outlines_bbox), new_root)); *old_root_it = std::move(new_root); // replace old root with new root } @@ -256,15 +271,25 @@ void Layer::reconnectRoots } } -/* - * Implementation assumes moving inside, but moving outside should just as well be possible. +/*! + * Moves the point \p from onto the nearest polygon or leaves the point as-is, when the comb boundary is not within the root of \p max_dist2 distance. + * Given a \p distance more than zero, the point will end up inside, and conversely outside. + * When the point is already in/outside by more than \p distance, \p from is unaltered, but the polygon is returned. + * When the point is in/outside by less than \p distance, \p from is moved to the correct place. + * Implementation assumes moving inside, but moving outside should just as well be possible. + * + * \param polygons The polygons onto which to move the point + * \param from[in,out] The point to move. + * \param distance The distance by which to move the point. + * \param max_dist2 The squared maximal allowed distance from the point to the nearest polygon. + * \return The index to the polygon onto which we have moved the point. */ static unsigned int moveInside(const Polygons& polygons, Point& from, int distance, int64_t maxDist2) { - Point ret = from; - int64_t bestDist2 = std::numeric_limits::max(); - unsigned int bestPoly = static_cast(-1); - bool is_already_on_correct_side_of_boundary = false; // whether [from] is already on the right side of the boundary + Point ret = from; + int64_t bestDist2 = std::numeric_limits::max(); + auto bestPoly = static_cast(-1); + bool is_already_on_correct_side_of_boundary = false; // whether [from] is already on the right side of the boundary for (unsigned int poly_idx = 0; poly_idx < polygons.size(); poly_idx++) { const Polygon &poly = polygons[poly_idx]; @@ -333,7 +358,7 @@ static unsigned int moveInside(const Polygons& polygons, Point& from, int distan else { // x is projected to a point properly on the line segment (not onto a vertex). The case which looks like | . projected_p_beyond_prev_segment = false; - Point x = a + ab * dot_prod / ab_length2; + Point x = (a.cast() + ab.cast() * dot_prod / ab_length2).cast(); int64_t dist2 = (p - x).cast().squaredNorm(); if (dist2 < bestDist2) diff --git a/src/libslic3r/Fill/Lightning/Layer.hpp b/src/libslic3r/Fill/Lightning/Layer.hpp index 853c634f2..cc79c15b5 100644 --- a/src/libslic3r/Fill/Lightning/Layer.hpp +++ b/src/libslic3r/Fill/Lightning/Layer.hpp @@ -41,9 +41,10 @@ public: ( const Polygons& current_overhang, const Polygons& current_outlines, + const BoundingBox& current_outlines_bbox, const EdgeGrid::Grid& outline_locator, - const coord_t supporting_radius, - const coord_t wall_supporting_radius + coord_t supporting_radius, + coord_t wall_supporting_radius ); /*! Determine & connect to connection point in tree/outline. @@ -53,9 +54,10 @@ public: ( const Point& unsupported_location, const Polygons& current_outlines, + const BoundingBox& current_outlines_bbox, const EdgeGrid::Grid& outline_locator, - const coord_t supporting_radius, - const coord_t wall_supporting_radius, + coord_t supporting_radius, + coord_t wall_supporting_radius, const SparseNodeGrid& tree_node_locator, const NodeSPtr& exclude_tree = nullptr ); @@ -71,16 +73,17 @@ public: ( std::vector& to_be_reconnected_tree_roots, const Polygons& current_outlines, + const BoundingBox& current_outlines_bbox, const EdgeGrid::Grid& outline_locator, - const coord_t supporting_radius, - const coord_t wall_supporting_radius + coord_t supporting_radius, + coord_t wall_supporting_radius ); - Polylines convertToLines(const Polygons& limit_to_outline, const coord_t line_width) const; + Polylines convertToLines(const Polygons& limit_to_outline, coord_t line_width) const; coord_t getWeightedDistance(const Point& boundary_loc, const Point& unsupported_location); - void fillLocator(SparseNodeGrid& tree_node_locator); + void fillLocator(SparseNodeGrid& tree_node_locator, const BoundingBox& current_outlines_bbox); }; } // namespace Slic3r::FillLightning diff --git a/src/libslic3r/Fill/Lightning/TreeNode.cpp b/src/libslic3r/Fill/Lightning/TreeNode.cpp index 8ab11bd6d..b36a66dbb 100644 --- a/src/libslic3r/Fill/Lightning/TreeNode.cpp +++ b/src/libslic3r/Fill/Lightning/TreeNode.cpp @@ -4,7 +4,6 @@ #include "TreeNode.hpp" #include "../../Geometry.hpp" -#include "../../ClipperUtils.hpp" namespace Slic3r::FillLightning { @@ -107,7 +106,7 @@ NodeSPtr Node::deepCopy() const return local_root; } -void Node::reroot(NodeSPtr new_parent /*= nullptr*/) +void Node::reroot(const NodeSPtr &new_parent) { if (! m_is_root) { auto old_parent = m_parent.lock(); @@ -142,7 +141,7 @@ NodeSPtr Node::closestNode(const Point& loc) return result; } -bool inside(const Polygons &polygons, const Point p) +bool inside(const Polygons &polygons, const Point &p) { int poly_count_inside = 0; for (const Polygon &poly : polygons) { @@ -181,7 +180,7 @@ bool lineSegmentPolygonsIntersection(const Point& a, const Point& b, const EdgeG } visitor { outline_locator, a.cast(), b.cast() }; outline_locator.visit_cells_intersecting_line(a, b, visitor); - return visitor.d2min < within_max_dist * within_max_dist; + return visitor.d2min < double(within_max_dist) * double(within_max_dist); } bool Node::realign(const Polygons& outlines, const EdgeGrid::Grid& outline_locator, std::vector& rerooted_parts) @@ -226,14 +225,14 @@ bool Node::realign(const Polygons& outlines, const EdgeGrid::Grid& outline_locat void Node::straighten(const coord_t magnitude, const coord_t max_remove_colinear_dist) { - straighten(magnitude, m_p, 0, max_remove_colinear_dist * max_remove_colinear_dist); + straighten(magnitude, m_p, 0, int64_t(max_remove_colinear_dist) * int64_t(max_remove_colinear_dist)); } Node::RectilinearJunction Node::straighten( const coord_t magnitude, const Point& junction_above, const coord_t accumulated_dist, - const coord_t max_remove_colinear_dist2) + const int64_t max_remove_colinear_dist2) { constexpr coord_t junction_magnitude_factor_numerator = 3; constexpr coord_t junction_magnitude_factor_denominator = 4; @@ -245,13 +244,13 @@ Node::RectilinearJunction Node::straighten( auto child_dist = coord_t((m_p - child_p->m_p).cast().norm()); RectilinearJunction junction_below = child_p->straighten(magnitude, junction_above, accumulated_dist + child_dist, max_remove_colinear_dist2); coord_t total_dist_to_junction_below = junction_below.total_recti_dist; - Point a = junction_above; - Point b = junction_below.junction_loc; + const Point& a = junction_above; + Point b = junction_below.junction_loc; if (a != b) // should always be true! { Point ab = b - a; - Point destination = a + ab * accumulated_dist / std::max(coord_t(1), total_dist_to_junction_below); - if ((destination - m_p).cast().squaredNorm() <= magnitude * magnitude) + Point destination = (a.cast() + ab.cast() * int64_t(accumulated_dist) / std::max(int64_t(1), int64_t(total_dist_to_junction_below))).cast(); + if ((destination - m_p).cast().squaredNorm() <= int64_t(magnitude) * int64_t(magnitude)) m_p = destination; else m_p += ((destination - m_p).cast().normalized() * magnitude).cast(); @@ -262,7 +261,7 @@ Node::RectilinearJunction Node::straighten( child_p = m_children.front(); //recursive call to straighten might have removed the child const NodeSPtr& parent_node = m_parent.lock(); if (parent_node && - (child_p->m_p - parent_node->m_p).cast().squaredNorm() < max_remove_colinear_dist2 && + (child_p->m_p - parent_node->m_p).cast().squaredNorm() < max_remove_colinear_dist2 && Line::distance_to_squared(m_p, parent_node->m_p, child_p->m_p) < close_enough * close_enough) { child_p->m_parent = m_parent; for (auto& sibling : parent_node->m_children) @@ -347,7 +346,7 @@ coord_t Node::prune(const coord_t& pruning_distance) void Node::convertToPolylines(Polygons& output, const coord_t line_width) const { Polygons result; - output.emplace_back(); + result.emplace_back(); convertToPolylines(0, result); removeJunctionOverlap(result, line_width); append(output, std::move(result)); @@ -386,7 +385,7 @@ void Node::removeJunctionOverlap(Polygons& result_lines, const coord_t line_widt coord_t to_be_reduced = reduction; Point a = polyline.back(); - for (int point_idx = polyline.size() - 2; point_idx >= 0; point_idx--) { + for (int point_idx = int(polyline.size()) - 2; point_idx >= 0; point_idx--) { const Point b = polyline[point_idx]; const Point ab = b - a; const auto ab_len = coord_t(ab.cast().norm()); @@ -408,4 +407,29 @@ void Node::removeJunctionOverlap(Polygons& result_lines, const coord_t line_widt } } +#ifdef LIGHTNING_TREE_NODE_DEBUG_OUTPUT +void export_to_svg(const NodeSPtr &root_node, SVG &svg) +{ + for (const NodeSPtr &children : root_node->m_children) { + svg.draw(Line(root_node->getLocation(), children->getLocation()), "red"); + export_to_svg(children, svg); + } +} + +void export_to_svg(const std::string &path, const Polygons &contour, const std::vector &root_nodes) { + BoundingBox bbox = get_extents(contour); + + bbox.offset(SCALED_EPSILON); + SVG svg(path, bbox); + svg.draw_outline(contour, "blue"); + + for (const NodeSPtr &root_node: root_nodes) { + for (const NodeSPtr &children: root_node->m_children) { + svg.draw(Line(root_node->getLocation(), children->getLocation()), "red"); + export_to_svg(children, svg); + } + } +} +#endif /* LIGHTNING_TREE_NODE_DEBUG_OUTPUT */ + } // namespace Slic3r::FillLightning diff --git a/src/libslic3r/Fill/Lightning/TreeNode.hpp b/src/libslic3r/Fill/Lightning/TreeNode.hpp index bc2e76dc2..55ef35e0a 100644 --- a/src/libslic3r/Fill/Lightning/TreeNode.hpp +++ b/src/libslic3r/Fill/Lightning/TreeNode.hpp @@ -11,6 +11,9 @@ #include "../../EdgeGrid.hpp" #include "../../Polygon.hpp" +#include "SVG.hpp" + +//#define LIGHTNING_TREE_NODE_DEBUG_OUTPUT namespace Slic3r::FillLightning { @@ -99,9 +102,9 @@ public: std::vector& next_trees, const Polygons& next_outlines, const EdgeGrid::Grid& outline_locator, - const coord_t prune_distance, - const coord_t smooth_magnitude, - const coord_t max_remove_colinear_dist + coord_t prune_distance, + coord_t smooth_magnitude, + coord_t max_remove_colinear_dist ) const; /*! @@ -156,7 +159,7 @@ public: * This is then recursively bubbled up until it reaches the (former) root, which then will become a leaf. * \param new_parent The (new) parent-node of the root, useful for recursing or immediately attaching the node to another tree. */ - void reroot(NodeSPtr new_parent = nullptr); + void reroot(const NodeSPtr &new_parent = nullptr); /*! * Retrieves the closest node to the specified location. @@ -211,7 +214,7 @@ protected: * \param magnitude The maximum allowed distance to move the node. * \param max_remove_colinear_dist Maximum distance of the (compound) line-segment from which a co-linear point may be removed. */ - void straighten(const coord_t magnitude, const coord_t max_remove_colinear_dist); + void straighten(coord_t magnitude, coord_t max_remove_colinear_dist); /*! Recursive part of \ref straighten(.) * \param junction_above The last seen junction with multiple children above @@ -219,7 +222,7 @@ protected: * \param max_remove_colinear_dist2 Maximum distance _squared_ of the (compound) line-segment from which a co-linear point may be removed. * \return the total distance along the tree from the last junction above to the first next junction below and the location of the next junction below */ - RectilinearJunction straighten(const coord_t magnitude, const Point& junction_above, const coord_t accumulated_dist, const coord_t max_remove_colinear_dist2); + RectilinearJunction straighten(coord_t magnitude, const Point& junction_above, coord_t accumulated_dist, int64_t max_remove_colinear_dist2); /*! Prune the tree from the extremeties (leaf-nodes) until the pruning distance is reached. * \return The distance that has been pruned. If less than \p distance, then the whole tree was puned away. @@ -236,7 +239,7 @@ public: * * \param output all branches in this tree connected into polylines */ - void convertToPolylines(Polygons& output, const coord_t line_width) const; + void convertToPolylines(Polygons& output, coord_t line_width) const; /*! If this was ever a direct child of the root, it'll have a previous grounding location. * @@ -257,7 +260,7 @@ protected: */ void convertToPolylines(size_t long_line_idx, Polygons& output) const; - void removeJunctionOverlap(Polygons& polylines, const coord_t line_width) const; + void removeJunctionOverlap(Polygons& polylines, coord_t line_width) const; bool m_is_root; Point m_p; @@ -265,10 +268,20 @@ protected: std::vector m_children; std::optional m_last_grounding_location; // &root_nodes); +#endif /* LIGHTNING_TREE_NODE_DEBUG_OUTPUT */ }; -bool inside(const Polygons &polygons, const Point p); -bool lineSegmentPolygonsIntersection(const Point& a, const Point& b, const EdgeGrid::Grid& outline_locator, Point& result, const coord_t within_max_dist); +bool inside(const Polygons &polygons, const Point &p); +bool lineSegmentPolygonsIntersection(const Point& a, const Point& b, const EdgeGrid::Grid& outline_locator, Point& result, coord_t within_max_dist); + +#ifdef LIGHTNING_TREE_NODE_DEBUG_OUTPUT +void export_to_svg(const NodeSPtr &root_node, SVG &svg); +void export_to_svg(const std::string &path, const Polygons &contour, const std::vector &root_nodes); +#endif /* LIGHTNING_TREE_NODE_DEBUG_OUTPUT */ } // namespace Slic3r::FillLightning diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index 0e44cc14e..4259562aa 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -121,18 +121,21 @@ static constexpr const char* LAST_TRIANGLE_ID_ATTR = "lastid"; static constexpr const char* OBJECT_TYPE = "object"; static constexpr const char* VOLUME_TYPE = "volume"; -static constexpr const char* NAME_KEY = "name"; -static constexpr const char* MODIFIER_KEY = "modifier"; +static constexpr const char* NAME_KEY = "name"; +static constexpr const char* MODIFIER_KEY = "modifier"; static constexpr const char* VOLUME_TYPE_KEY = "volume_type"; -static constexpr const char* MATRIX_KEY = "matrix"; -static constexpr const char* SOURCE_FILE_KEY = "source_file"; -static constexpr const char* SOURCE_OBJECT_ID_KEY = "source_object_id"; -static constexpr const char* SOURCE_VOLUME_ID_KEY = "source_volume_id"; -static constexpr const char* SOURCE_OFFSET_X_KEY = "source_offset_x"; -static constexpr const char* SOURCE_OFFSET_Y_KEY = "source_offset_y"; -static constexpr const char* SOURCE_OFFSET_Z_KEY = "source_offset_z"; -static constexpr const char* SOURCE_IN_INCHES = "source_in_inches"; -static constexpr const char* SOURCE_IN_METERS = "source_in_meters"; +static constexpr const char* MATRIX_KEY = "matrix"; +static constexpr const char* SOURCE_FILE_KEY = "source_file"; +static constexpr const char* SOURCE_OBJECT_ID_KEY = "source_object_id"; +static constexpr const char* SOURCE_VOLUME_ID_KEY = "source_volume_id"; +static constexpr const char* SOURCE_OFFSET_X_KEY = "source_offset_x"; +static constexpr const char* SOURCE_OFFSET_Y_KEY = "source_offset_y"; +static constexpr const char* SOURCE_OFFSET_Z_KEY = "source_offset_z"; +static constexpr const char* SOURCE_IN_INCHES_KEY = "source_in_inches"; +static constexpr const char* SOURCE_IN_METERS_KEY = "source_in_meters"; +#if ENABLE_RELOAD_FROM_DISK_REWORK +static constexpr const char* SOURCE_IS_BUILTIN_VOLUME_KEY = "source_is_builtin_volume"; +#endif // ENABLE_RELOAD_FROM_DISK_REWORK static constexpr const char* MESH_STAT_EDGES_FIXED = "edges_fixed"; static constexpr const char* MESH_STAT_DEGENERATED_FACETS = "degenerate_facets"; @@ -816,6 +819,20 @@ namespace Slic3r { return false; } +#if ENABLE_RELOAD_FROM_DISK_REWORK + for (int obj_id = 0; obj_id < int(model.objects.size()); ++obj_id) { + ModelObject* o = model.objects[obj_id]; + for (int vol_id = 0; vol_id < int(o->volumes.size()); ++vol_id) { + ModelVolume* v = o->volumes[vol_id]; + if (v->source.input_file.empty()) + v->source.input_file = v->name.empty() ? filename : v->name; + if (v->source.volume_idx == -1) + v->source.volume_idx = vol_id; + if (v->source.object_idx == -1) + v->source.object_idx = obj_id; + } + } +#else int object_idx = 0; for (ModelObject* o : model.objects) { int volume_idx = 0; @@ -831,6 +848,7 @@ namespace Slic3r { } ++object_idx; } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK // // fixes the min z of the model if negative // model.adjust_min_z(); @@ -2052,15 +2070,19 @@ namespace Slic3r { else if (metadata.key == SOURCE_VOLUME_ID_KEY) volume->source.volume_idx = ::atoi(metadata.value.c_str()); else if (metadata.key == SOURCE_OFFSET_X_KEY) - volume->source.mesh_offset(0) = ::atof(metadata.value.c_str()); + volume->source.mesh_offset.x() = ::atof(metadata.value.c_str()); else if (metadata.key == SOURCE_OFFSET_Y_KEY) - volume->source.mesh_offset(1) = ::atof(metadata.value.c_str()); + volume->source.mesh_offset.y() = ::atof(metadata.value.c_str()); else if (metadata.key == SOURCE_OFFSET_Z_KEY) - volume->source.mesh_offset(2) = ::atof(metadata.value.c_str()); - else if (metadata.key == SOURCE_IN_INCHES) + volume->source.mesh_offset.z() = ::atof(metadata.value.c_str()); + else if (metadata.key == SOURCE_IN_INCHES_KEY) volume->source.is_converted_from_inches = metadata.value == "1"; - else if (metadata.key == SOURCE_IN_METERS) + else if (metadata.key == SOURCE_IN_METERS_KEY) volume->source.is_converted_from_meters = metadata.value == "1"; +#if ENABLE_RELOAD_FROM_DISK_REWORK + else if (metadata.key == SOURCE_IS_BUILTIN_VOLUME_KEY) + volume->source.is_from_builtin_objects = metadata.value == "1"; +#endif // ENABLE_RELOAD_FROM_DISK_REWORK else volume->config.set_deserialize(metadata.key, metadata.value, config_substitutions); } @@ -2981,7 +3003,7 @@ namespace Slic3r { // stores volume's local matrix stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << MATRIX_KEY << "\" " << VALUE_ATTR << "=\""; - Transform3d matrix = volume->get_matrix() * volume->source.transform.get_matrix(); + const Transform3d matrix = volume->get_matrix() * volume->source.transform.get_matrix(); for (int r = 0; r < 4; ++r) { for (int c = 0; c < 4; ++c) { stream << matrix(r, c); @@ -3005,9 +3027,13 @@ namespace Slic3r { } assert(! volume->source.is_converted_from_inches || ! volume->source.is_converted_from_meters); if (volume->source.is_converted_from_inches) - stream << prefix << SOURCE_IN_INCHES << "\" " << VALUE_ATTR << "=\"1\"/>\n"; + stream << prefix << SOURCE_IN_INCHES_KEY << "\" " << VALUE_ATTR << "=\"1\"/>\n"; else if (volume->source.is_converted_from_meters) - stream << prefix << SOURCE_IN_METERS << "\" " << VALUE_ATTR << "=\"1\"/>\n"; + stream << prefix << SOURCE_IN_METERS_KEY << "\" " << VALUE_ATTR << "=\"1\"/>\n"; +#if ENABLE_RELOAD_FROM_DISK_REWORK + if (volume->source.is_from_builtin_objects) + stream << prefix << SOURCE_IS_BUILTIN_VOLUME_KEY << "\" " << VALUE_ATTR << "=\"1\"/>\n"; +#endif // ENABLE_RELOAD_FROM_DISK_REWORK } // stores volume's config data @@ -3110,6 +3136,36 @@ static void handle_legacy_project_loaded(unsigned int version_project_file, Dyna } } +bool is_project_3mf(const std::string& filename) +{ + mz_zip_archive archive; + mz_zip_zero_struct(&archive); + + if (!open_zip_reader(&archive, filename)) + return false; + + mz_uint num_entries = mz_zip_reader_get_num_files(&archive); + + // loop the entries to search for config + mz_zip_archive_file_stat stat; + bool config_found = false; + for (mz_uint i = 0; i < num_entries; ++i) { + if (mz_zip_reader_file_stat(&archive, i, &stat)) { + std::string name(stat.m_filename); + std::replace(name.begin(), name.end(), '\\', '/'); + + if (boost::algorithm::iequals(name, PRINT_CONFIG_FILE)) { + config_found = true; + break; + } + } + } + + close_zip_reader(&archive); + + return config_found; +} + bool load_3mf(const char* path, DynamicPrintConfig& config, ConfigSubstitutionContext& config_substitutions, Model* model, bool check_version) { if (path == nullptr || model == nullptr) diff --git a/src/libslic3r/Format/3mf.hpp b/src/libslic3r/Format/3mf.hpp index b91e90da7..5c2a2e672 100644 --- a/src/libslic3r/Format/3mf.hpp +++ b/src/libslic3r/Format/3mf.hpp @@ -29,6 +29,9 @@ namespace Slic3r { class DynamicPrintConfig; struct ThumbnailData; + // Returns true if the 3mf file with the given filename is a PrusaSlicer project file (i.e. if it contains a config). + extern bool is_project_3mf(const std::string& filename); + // Load the content of a 3mf file into the given model and preset bundle. extern bool load_3mf(const char* path, DynamicPrintConfig& config, ConfigSubstitutionContext& config_substitutions, Model* model, bool check_version); diff --git a/src/libslic3r/Format/AMF.cpp b/src/libslic3r/Format/AMF.cpp index a8b66b15b..f2a902758 100644 --- a/src/libslic3r/Format/AMF.cpp +++ b/src/libslic3r/Format/AMF.cpp @@ -657,11 +657,16 @@ void AMFParserContext::endElement(const char * /* name */) if (bool has_transform = !m_volume_transform.isApprox(Transform3d::Identity(), 1e-10); has_transform) m_volume->source.transform = Slic3r::Geometry::Transformation(m_volume_transform); - if (m_volume->source.input_file.empty() && (m_volume->type() == ModelVolumeType::MODEL_PART)) { +#if ENABLE_RELOAD_FROM_DISK_REWORK + if (m_volume->source.input_file.empty()) { +#else + if (m_volume->source.input_file.empty() && m_volume->type() == ModelVolumeType::MODEL_PART) { +#endif // ENABLE_RELOAD_FROM_DISK_REWORK m_volume->source.object_idx = (int)m_model.objects.size() - 1; m_volume->source.volume_idx = (int)m_model.objects.back()->volumes.size() - 1; m_volume->center_geometry_after_creation(); - } else + } + else // pass false if the mesh offset has been already taken from the data m_volume->center_geometry_after_creation(m_volume->source.input_file.empty()); @@ -792,46 +797,44 @@ void AMFParserContext::endElement(const char * /* name */) // Is this volume a modifier volume? // "modifier" flag comes first in the XML file, so it may be later overwritten by the "type" flag. m_volume->set_type((atoi(m_value[1].c_str()) == 1) ? ModelVolumeType::PARAMETER_MODIFIER : ModelVolumeType::MODEL_PART); - } else if (strcmp(opt_key, "volume_type") == 0) { + } + else if (strcmp(opt_key, "volume_type") == 0) m_volume->set_type(ModelVolume::type_from_string(m_value[1])); - } - else if (strcmp(opt_key, "matrix") == 0) { + else if (strcmp(opt_key, "matrix") == 0) m_volume_transform = Slic3r::Geometry::transform3d_from_string(m_value[1]); - } - else if (strcmp(opt_key, "source_file") == 0) { + else if (strcmp(opt_key, "source_file") == 0) m_volume->source.input_file = m_value[1]; - } - else if (strcmp(opt_key, "source_object_id") == 0) { + else if (strcmp(opt_key, "source_object_id") == 0) m_volume->source.object_idx = ::atoi(m_value[1].c_str()); - } - else if (strcmp(opt_key, "source_volume_id") == 0) { + else if (strcmp(opt_key, "source_volume_id") == 0) m_volume->source.volume_idx = ::atoi(m_value[1].c_str()); - } - else if (strcmp(opt_key, "source_offset_x") == 0) { - m_volume->source.mesh_offset(0) = ::atof(m_value[1].c_str()); - } - else if (strcmp(opt_key, "source_offset_y") == 0) { - m_volume->source.mesh_offset(1) = ::atof(m_value[1].c_str()); - } - else if (strcmp(opt_key, "source_offset_z") == 0) { - m_volume->source.mesh_offset(2) = ::atof(m_value[1].c_str()); - } - else if (strcmp(opt_key, "source_in_inches") == 0) { + else if (strcmp(opt_key, "source_offset_x") == 0) + m_volume->source.mesh_offset.x() = ::atof(m_value[1].c_str()); + else if (strcmp(opt_key, "source_offset_y") == 0) + m_volume->source.mesh_offset.y() = ::atof(m_value[1].c_str()); + else if (strcmp(opt_key, "source_offset_z") == 0) + m_volume->source.mesh_offset.z() = ::atof(m_value[1].c_str()); + else if (strcmp(opt_key, "source_in_inches") == 0) m_volume->source.is_converted_from_inches = m_value[1] == "1"; - } - else if (strcmp(opt_key, "source_in_meters") == 0) { + else if (strcmp(opt_key, "source_in_meters") == 0) m_volume->source.is_converted_from_meters = m_value[1] == "1"; - } +#if ENABLE_RELOAD_FROM_DISK_REWORK + else if (strcmp(opt_key, "source_is_builtin_volume") == 0) + m_volume->source.is_from_builtin_objects = m_value[1] == "1"; +#endif // ENABLE_RELOAD_FROM_DISK_REWORK } - } else if (m_path.size() == 3) { + } + else if (m_path.size() == 3) { if (m_path[1] == NODE_TYPE_MATERIAL) { if (m_material) m_material->attributes[m_value[0]] = m_value[1]; - } else if (m_path[1] == NODE_TYPE_OBJECT) { + } + else if (m_path[1] == NODE_TYPE_OBJECT) { if (m_object && m_value[0] == "name") m_object->name = std::move(m_value[1]); } - } else if (m_path.size() == 5 && m_path[3] == NODE_TYPE_VOLUME) { + } + else if (m_path.size() == 5 && m_path[3] == NODE_TYPE_VOLUME) { if (m_volume && m_value[0] == "name") m_volume->name = std::move(m_value[1]); } @@ -919,7 +922,11 @@ bool load_amf_file(const char *path, DynamicPrintConfig *config, ConfigSubstitut unsigned int counter = 0; for (ModelVolume* v : o->volumes) { ++counter; +#if ENABLE_RELOAD_FROM_DISK_REWORK + if (v->source.input_file.empty()) +#else if (v->source.input_file.empty() && v->type() == ModelVolumeType::MODEL_PART) +#endif // ENABLE_RELOAD_FROM_DISK_REWORK v->source.input_file = path; if (v->name.empty()) { v->name = o->name; @@ -1068,7 +1075,11 @@ bool load_amf_archive(const char* path, DynamicPrintConfig* config, ConfigSubsti for (ModelObject *o : model->objects) for (ModelVolume *v : o->volumes) - if (v->source.input_file.empty() && (v->type() == ModelVolumeType::MODEL_PART)) +#if ENABLE_RELOAD_FROM_DISK_REWORK + if (v->source.input_file.empty()) +#else + if (v->source.input_file.empty() && v->type() == ModelVolumeType::MODEL_PART) +#endif // ENABLE_RELOAD_FROM_DISK_REWORK v->source.input_file = path; return true; @@ -1237,18 +1248,15 @@ bool store_amf(const char* path, Model* model, const DynamicPrintConfig* config, stream << " "; const Transform3d& matrix = volume->get_matrix() * volume->source.transform.get_matrix(); stream << std::setprecision(std::numeric_limits::max_digits10); - for (int r = 0; r < 4; ++r) - { - for (int c = 0; c < 4; ++c) - { + for (int r = 0; r < 4; ++r) { + for (int c = 0; c < 4; ++c) { stream << matrix(r, c); - if ((r != 3) || (c != 3)) + if (r != 3 || c != 3) stream << " "; } } stream << "\n"; - if (!volume->source.input_file.empty()) - { + if (!volume->source.input_file.empty()) { std::string input_file = xml_escape(fullpath_sources ? volume->source.input_file : boost::filesystem::path(volume->source.input_file).filename().string()); stream << " " << input_file << "\n"; stream << " " << volume->source.object_idx << "\n"; @@ -1262,12 +1270,16 @@ bool store_amf(const char* path, Model* model, const DynamicPrintConfig* config, stream << " 1\n"; else if (volume->source.is_converted_from_meters) stream << " 1\n"; - stream << std::setprecision(std::numeric_limits::max_digits10); +#if ENABLE_RELOAD_FROM_DISK_REWORK + if (volume->source.is_from_builtin_objects) + stream << " 1\n"; +#endif // ENABLE_RELOAD_FROM_DISK_REWORK + stream << std::setprecision(std::numeric_limits::max_digits10); const indexed_triangle_set &its = volume->mesh().its; for (size_t i = 0; i < its.indices.size(); ++i) { stream << " \n"; for (int j = 0; j < 3; ++j) - stream << " " << its.indices[i][j] + vertices_offset << "\n"; + stream << " " << its.indices[i][j] + vertices_offset << "\n"; stream << " \n"; } stream << " \n"; diff --git a/src/libslic3r/Format/SL1.cpp b/src/libslic3r/Format/SL1.cpp index 6ed8c5ebe..df10ce046 100644 --- a/src/libslic3r/Format/SL1.cpp +++ b/src/libslic3r/Format/SL1.cpp @@ -20,11 +20,14 @@ #include "libslic3r/miniz_extension.hpp" #include "libslic3r/PNGReadWrite.hpp" #include "libslic3r/LocalesUtils.hpp" +#include "libslic3r/GCode/ThumbnailData.hpp" #include #include #include +#include + namespace marchsq { template<> struct _RasterTraits { @@ -446,8 +449,8 @@ void fill_slicerconf(ConfMap &m, const SLAPrint &print) std::unique_ptr SL1Archive::create_raster() const { - sla::RasterBase::Resolution res; - sla::RasterBase::PixelDim pxdim; + sla::Resolution res; + sla::PixelDim pxdim; std::array mirror; double w = m_cfg.display_width.getFloat(); @@ -468,8 +471,8 @@ std::unique_ptr SL1Archive::create_raster() const std::swap(pw, ph); } - res = sla::RasterBase::Resolution{pw, ph}; - pxdim = sla::RasterBase::PixelDim{w / pw, h / ph}; + res = sla::Resolution{pw, ph}; + pxdim = sla::PixelDim{w / pw, h / ph}; sla::RasterBase::Trafo tr{orientation, mirror}; double gamma = m_cfg.gamma_correction.getFloat(); @@ -482,10 +485,31 @@ sla::RasterEncoder SL1Archive::get_encoder() const return sla::PNGRasterEncoder{}; } -void SL1Archive::export_print(Zipper& zipper, - const SLAPrint &print, - const std::string &prjname) +static void write_thumbnail(Zipper &zipper, const ThumbnailData &data) { + size_t png_size = 0; + + void *png_data = tdefl_write_image_to_png_file_in_memory_ex( + (const void *) data.pixels.data(), data.width, data.height, 4, + &png_size, MZ_DEFAULT_LEVEL, 1); + + if (png_data != nullptr) { + zipper.add_entry("thumbnail/thumbnail" + std::to_string(data.width) + + "x" + std::to_string(data.height) + ".png", + static_cast(png_data), + png_size); + + mz_free(png_data); + } +} + +void SL1Archive::export_print(const std::string fname, + const SLAPrint &print, + const ThumbnailsList &thumbnails, + const std::string &prjname) +{ + Zipper zipper{fname}; + std::string project = prjname.empty() ? boost::filesystem::path(zipper.get_filename()).stem().string() : @@ -512,6 +536,12 @@ void SL1Archive::export_print(Zipper& zipper, zipper.add_entry(imgname.c_str(), rst.data(), rst.size()); } + + for (const ThumbnailData& data : thumbnails) + if (data.is_valid()) + write_thumbnail(zipper, data); + + zipper.finalize(); } catch(std::exception& e) { BOOST_LOG_TRIVIAL(error) << e.what(); // Rethrow the exception diff --git a/src/libslic3r/Format/SL1.hpp b/src/libslic3r/Format/SL1.hpp index 46a82e1b8..493550db4 100644 --- a/src/libslic3r/Format/SL1.hpp +++ b/src/libslic3r/Format/SL1.hpp @@ -3,8 +3,12 @@ #include +#include "SLAArchive.hpp" + #include "libslic3r/Zipper.hpp" -#include "libslic3r/SLAPrint.hpp" +#include "libslic3r/PrintConfig.hpp" + +struct indexed_triangle_set; namespace Slic3r { @@ -15,27 +19,19 @@ protected: std::unique_ptr create_raster() const override; sla::RasterEncoder get_encoder() const override; + SLAPrinterConfig & cfg() { return m_cfg; } + const SLAPrinterConfig & cfg() const { return m_cfg; } + public: SL1Archive() = default; explicit SL1Archive(const SLAPrinterConfig &cfg): m_cfg(cfg) {} explicit SL1Archive(SLAPrinterConfig &&cfg): m_cfg(std::move(cfg)) {} - - void export_print(Zipper &zipper, const SLAPrint &print, const std::string &projectname = ""); - void export_print(const std::string &fname, const SLAPrint &print, const std::string &projectname = "") - { - Zipper zipper(fname); - export_print(zipper, print, projectname); - } - - void apply(const SLAPrinterConfig &cfg) override - { - auto diff = m_cfg.diff(cfg); - if (!diff.empty()) { - m_cfg.apply_only(cfg, diff); - m_layers = {}; - } - } + + void export_print(const std::string fname, + const SLAPrint &print, + const ThumbnailsList &thumbnails, + const std::string &projectname = "") override; }; ConfigSubstitutions import_sla_archive(const std::string &zipfname, DynamicPrintConfig &out); diff --git a/src/libslic3r/Format/SL1_SVG.cpp b/src/libslic3r/Format/SL1_SVG.cpp new file mode 100644 index 000000000..372348283 --- /dev/null +++ b/src/libslic3r/Format/SL1_SVG.cpp @@ -0,0 +1,227 @@ +#include "SL1_SVG.hpp" +#include "SLA/RasterBase.hpp" +#include "libslic3r/LocalesUtils.hpp" +#include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/BoundingBox.hpp" + +#include +#include +#include +#include +using namespace std::literals; + +namespace Slic3r { + +namespace { + +size_t constexpr coord_t_bufsize = 40; + +char const* decimal_from(coord_t snumber, char* buffer) +{ + std::make_unsigned_t number = 0; + + char* ret = buffer; + + if( snumber < 0 ) { + *buffer++ = '-'; + number = -snumber; + } else + number = snumber; + + if( number == 0 ) { + *buffer++ = '0'; + } else { + char* p_first = buffer; + while( number != 0 ) { + *buffer++ = '0' + number % 10; + number /= 10; + } + std::reverse( p_first, buffer ); + } + + *buffer = '\0'; + + return ret; +} + +inline std::string coord2str(coord_t crd) +{ + char buf[coord_t_bufsize]; + return decimal_from(crd, buf); +} + +void transform(ExPolygon &ep, const sla::RasterBase::Trafo &tr, const BoundingBox &bb) +{ + if (tr.flipXY) { + for (auto &p : ep.contour.points) std::swap(p.x(), p.y()); + for (auto &h : ep.holes) + for (auto &p : h.points) std::swap(p.x(), p.y()); + } + + if (tr.mirror_x){ + for (auto &p : ep.contour.points) p.x() = bb.max.x() - p.x() + bb.min.x(); + for (auto &h : ep.holes) + for (auto &p : h.points) p.x() = bb.max.x() - p.x() + bb.min.x(); + } + + if (tr.mirror_y){ + for (auto &p : ep.contour.points) p.y() = bb.max.y() - p.y() + bb.min.y(); + for (auto &h : ep.holes) + for (auto &p : h.points) p.y() = bb.max.y() - p.y() + bb.min.y(); + } +} + +void append_svg(std::string &buf, const Polygon &poly) +{ + if (poly.points.empty()) + return; + + auto c = poly.points.front(); + + char intbuf[coord_t_bufsize]; + + buf += "(m_bb.size().x())); + std::string hf = float_to_string_decimal_point(unscaled(m_bb.size().y())); + std::string w = coord2str(coord_t(m_res.width_px)); + std::string h = coord2str(coord_t(m_res.height_px)); + + // Notice the header also defines the fill-rule as nonzero which should + // generate correct results for our ExPolygons. + + // Add svg header. + m_svg = + "\n" + "\n" + "\n"; + + // Add black background; + m_svg += "\n"; + } + + void draw(const ExPolygon& poly) override + { + auto cpoly = poly; + + double tol = std::min(m_bb.size().x() / double(m_res.width_px), + m_bb.size().y() / double(m_res.height_px)); + + ExPolygons cpolys = poly.simplify(tol); + + for (auto &cpoly : cpolys) { + transform(cpoly, m_trafo, m_bb); + + for (auto &p : cpoly.contour.points) + p = {std::round(p.x() * m_sc.x()), std::round(p.y() * m_sc.y())}; + + for (auto &h : cpoly.holes) + for (auto &p : h) + p = {std::round(p.x() * m_sc.x()), std::round(p.y() * m_sc.y())}; + + append_svg(m_svg, cpoly.contour); + for (auto &h : cpoly.holes) + append_svg(m_svg, h); + } + } + + Trafo trafo() const override { return m_trafo; } + + sla::EncodedRaster encode(sla::RasterEncoder /*encoder*/) const override + { + std::vector data; + constexpr auto finish = "\n"sv; + + data.reserve(m_svg.size() + std::size(finish)); + + std::copy(m_svg.begin(), m_svg.end(), std::back_inserter(data)); + std::copy(finish.begin(), finish.end() - 1, std::back_inserter(data)); + + return sla::EncodedRaster{std::move(data), "svg"}; + } +}; + +std::unique_ptr SL1_SVGArchive::create_raster() const +{ + auto w = cfg().display_width.getFloat(); + auto h = cfg().display_height.getFloat(); + +// auto res_x = size_t(cfg().display_pixels_x.getInt()); +// auto res_y = size_t(cfg().display_pixels_y.getInt()); + float precision_nm = scaled(cfg().sla_output_precision.getFloat()); + size_t res_x = std::round(scaled(w) / precision_nm); + size_t res_y = std::round(scaled(h) / precision_nm); + + std::array mirror; + + mirror[X] = cfg().display_mirror_x.getBool(); + mirror[Y] = cfg().display_mirror_y.getBool(); + + auto ro = cfg().display_orientation.getInt(); + sla::RasterBase::Orientation orientation = + ro == sla::RasterBase::roPortrait ? sla::RasterBase::roPortrait : + sla::RasterBase::roLandscape; + + if (orientation == sla::RasterBase::roPortrait) { + std::swap(w, h); + std::swap(res_x, res_y); + } + + BoundingBox svgarea{{0, 0}, {scaled(w), scaled(h)}}; + + sla::RasterBase::Trafo tr{orientation, mirror}; + + // Gamma does not really make sense in an svg, right? + // double gamma = cfg().gamma_correction.getFloat(); + return std::make_unique(svgarea, sla::Resolution{res_x, res_y}, tr); +} + +sla::RasterEncoder SL1_SVGArchive::get_encoder() const +{ + return nullptr; +} + +} // namespace Slic3r diff --git a/src/libslic3r/Format/SL1_SVG.hpp b/src/libslic3r/Format/SL1_SVG.hpp new file mode 100644 index 000000000..a3afbcdff --- /dev/null +++ b/src/libslic3r/Format/SL1_SVG.hpp @@ -0,0 +1,22 @@ +#ifndef SL1_SVG_HPP +#define SL1_SVG_HPP + +#include "SL1.hpp" + +namespace Slic3r { + +class SL1_SVGArchive: public SL1Archive { +protected: + + // Override the factory methods to produce svg instead of a real raster. + std::unique_ptr create_raster() const override; + sla::RasterEncoder get_encoder() const override; + +public: + + using SL1Archive::SL1Archive; +}; + +} // namespace Slic3r + +#endif // SL1_SVG_HPP diff --git a/src/libslic3r/Format/SLAArchive.cpp b/src/libslic3r/Format/SLAArchive.cpp new file mode 100644 index 000000000..8e2bf2824 --- /dev/null +++ b/src/libslic3r/Format/SLAArchive.cpp @@ -0,0 +1,74 @@ +#include "SLAArchive.hpp" + +#include "SL1.hpp" +#include "SL1_SVG.hpp" +#include "pwmx.hpp" + +#include "libslic3r/libslic3r.h" + +#include +#include +#include +#include + +namespace Slic3r { + +using ArchiveFactory = std::function(const SLAPrinterConfig&)>; + +struct ArchiveEntry { + const char *ext; + ArchiveFactory factoryfn; +}; + +static const std::map REGISTERED_ARCHIVES { + { + "SL1", + { "sl1", [] (const auto &cfg) { return std::make_unique(cfg); } } + }, + { + "SL2", + { "sl2", [] (const auto &cfg) { return std::make_unique(cfg); } } + }, + { + "pwmx", + { "pwmx", [] (const auto &cfg) { return std::make_unique(cfg); } } + } +}; + +std::unique_ptr +SLAArchive::create(const std::string &archtype, const SLAPrinterConfig &cfg) +{ + auto entry = REGISTERED_ARCHIVES.find(archtype); + + if (entry != REGISTERED_ARCHIVES.end()) + return entry->second.factoryfn(cfg); + + return nullptr; +} + +const std::vector& SLAArchive::registered_archives() +{ + static std::vector archnames; + + if (archnames.empty()) { + archnames.reserve(REGISTERED_ARCHIVES.size()); + + for (auto &[name, _] : REGISTERED_ARCHIVES) + archnames.emplace_back(name.c_str()); + } + + return archnames; +} + +const char *SLAArchive::get_extension(const char *archtype) +{ + static const char* DEFAULT_EXT = "zip"; + + auto entry = REGISTERED_ARCHIVES.find(archtype); + if (entry != REGISTERED_ARCHIVES.end()) + return entry->second.ext; + + return DEFAULT_EXT; +} + +} // namespace Slic3r diff --git a/src/libslic3r/Format/SLAArchive.hpp b/src/libslic3r/Format/SLAArchive.hpp new file mode 100644 index 000000000..971d7ba7b --- /dev/null +++ b/src/libslic3r/Format/SLAArchive.hpp @@ -0,0 +1,64 @@ +#ifndef SLAARCHIVE_HPP +#define SLAARCHIVE_HPP + +#include + +#include "libslic3r/SLA/RasterBase.hpp" +#include "libslic3r/Execution/ExecutionTBB.hpp" +#include "libslic3r/GCode/ThumbnailData.hpp" + +namespace Slic3r { + +class SLAPrint; +class SLAPrinterConfig; + +class SLAArchive { +protected: + std::vector m_layers; + + virtual std::unique_ptr create_raster() const = 0; + virtual sla::RasterEncoder get_encoder() const = 0; + +public: + virtual ~SLAArchive() = default; + + // Fn have to be thread safe: void(sla::RasterBase& raster, size_t lyrid); + template + void draw_layers( + size_t layer_num, + Fn && drawfn, + CancelFn cancelfn = []() { return false; }, + const EP & ep = {}) + { + m_layers.resize(layer_num); + execution::for_each( + ep, size_t(0), m_layers.size(), + [this, &drawfn, &cancelfn](size_t idx) { + if (cancelfn()) return; + + sla::EncodedRaster &enc = m_layers[idx]; + auto rst = create_raster(); + drawfn(*rst, idx); + enc = rst->encode(get_encoder()); + }, + execution::max_concurrency(ep)); + } + + // Export the print into an archive using the provided filename. + virtual void export_print(const std::string fname, + const SLAPrint &print, + const ThumbnailsList &thumbnails, + const std::string &projectname = "") = 0; + + // Factory method to create an archiver instance + static std::unique_ptr create(const std::string &archtype, const SLAPrinterConfig&); + + // Get the names of currently known archiver implementations + static const std::vector & registered_archives(); + + // Get the default file extension belonging to an archive format + static const char *get_extension(const char *archtype); +}; + +} // namespace Slic3r +#endif // SLAARCHIVE_HPP diff --git a/src/libslic3r/Format/pwmx.cpp b/src/libslic3r/Format/pwmx.cpp new file mode 100644 index 000000000..f3f0f6802 --- /dev/null +++ b/src/libslic3r/Format/pwmx.cpp @@ -0,0 +1,564 @@ +#include "pwmx.hpp" +#include "GCode/ThumbnailData.hpp" +#include "SLA/RasterBase.hpp" +#include "libslic3r/SLAPrint.hpp" + +#include +#include +#include + +#include +#include + + +#define TAG_INTRO "ANYCUBIC\0\0\0\0" +#define TAG_HEADER "HEADER\0\0\0\0\0\0" +#define TAG_PREVIEW "PREVIEW\0\0\0\0\0" +#define TAG_LAYERS "LAYERDEF\0\0\0\0" + +#define CFG_LIFT_DISTANCE "LIFT_DISTANCE" +#define CFG_LIFT_SPEED "LIFT_SPEED" +#define CFG_RETRACT_SPEED "RETRACT_SPEED" +#define CFG_DELAY_BEFORE_EXPOSURE "DELAY_BEFORE_EXPOSURE" +#define CFG_BOTTOM_LIFT_SPEED "BOTTOM_LIFT_SPEED" +#define CFG_BOTTOM_LIFT_DISTANCE "BOTTOM_LIFT_DISTANCE" + +#define PREV_W 224 +#define PREV_H 168 +#define PREV_DPI 42 + +#define LAYER_SIZE_ESTIMATE (32 * 1024) + +namespace Slic3r { + +static void pwx_get_pixel_span(const std::uint8_t* ptr, const std::uint8_t* end, + std::uint8_t& pixel, size_t& span_len) +{ + size_t max_len; + + span_len = 0; + pixel = (*ptr) & 0xF0; + // the maximum length of the span depends on the pixel color + max_len = (pixel == 0 || pixel == 0xF0) ? 0xFFF : 0xF; + while (ptr < end && span_len < max_len && ((*ptr) & 0xF0) == pixel) { + span_len++; + ptr++; + } +} + +struct PWXRasterEncoder +{ + sla::EncodedRaster operator()(const void *ptr, + size_t w, + size_t h, + size_t num_components) + { + std::vector dst; + size_t span_len; + std::uint8_t pixel; + auto size = w * h * num_components; + dst.reserve(size); + + const std::uint8_t *src = reinterpret_cast(ptr); + const std::uint8_t *src_end = src + size; + while (src < src_end) { + pwx_get_pixel_span(src, src_end, pixel, span_len); + src += span_len; + // fully transparent of fully opaque pixel + if (pixel == 0 || pixel == 0xF0) { + pixel = pixel | (span_len >> 8); + std::copy(&pixel, (&pixel) + 1, std::back_inserter(dst)); + pixel = span_len & 0xFF; + std::copy(&pixel, (&pixel) + 1, std::back_inserter(dst)); + } + // antialiased pixel + else { + pixel = pixel | span_len; + std::copy(&pixel, (&pixel) + 1, std::back_inserter(dst)); + } + } + + return sla::EncodedRaster(std::move(dst), "pwx"); + } +}; + +using ConfMap = std::map; + +typedef struct pwmx_format_intro +{ + char tag[12]; + std::uint32_t version; // value 1 + std::uint32_t area_num; // unknown - usually 4 + std::uint32_t header_data_offset; + std::float_t intro24; // unknown - usually 0 + std::uint32_t preview_data_offset; + std::float_t intro32; // unknown + std::uint32_t layer_data_offset; + std::float_t intro40; // unknown + std::uint32_t image_data_offset; +} pwmx_format_intro; + +typedef struct pwmx_format_header +{ + char tag[12]; + std::uint32_t payload_size; + std::float_t pixel_size_um; + std::float_t layer_height_mm; + std::float_t exposure_time_s; + std::float_t delay_before_exposure_s; + std::float_t bottom_exposure_time_s; + std::float_t bottom_layer_count; + std::float_t lift_distance_mm; + std::float_t lift_speed_mms; + std::float_t retract_speed_mms; + std::float_t volume_ml; + std::uint32_t antialiasing; + std::uint32_t res_x; + std::uint32_t res_y; + std::float_t weight_g; + std::float_t price; + std::uint32_t price_currency; + std::uint32_t per_layer_override; // ? unknown meaning ? + std::uint32_t print_time_s; + std::uint32_t transition_layer_count; + std::uint32_t unknown; // ? usually 0 ? + +} pwmx_format_header; + +typedef struct pwmx_format_preview +{ + char tag[12]; + std::uint32_t payload_size; + std::uint32_t preview_w; + std::uint32_t preview_dpi; + std::uint32_t preview_h; + // raw image data in BGR565 format + std::uint8_t pixels[PREV_W * PREV_H * 2]; +} pwmx_format_preview; + +typedef struct pwmx_format_layers_header +{ + char tag[12]; + std::uint32_t payload_size; + std::uint32_t layer_count; +} pwmx_format_layers_header; + +typedef struct pwmx_format_layer +{ + std::uint32_t image_offset; + std::uint32_t image_size; + std::float_t lift_distance_mm; + std::float_t lift_speed_mms; + std::float_t exposure_time_s; + std::float_t layer_height_mm; + std::float_t layer44; // unkown - usually 0 + std::float_t layer48; // unkown - usually 0 +} pwmx_format_layer; + +typedef struct pwmx_format_misc +{ + std::float_t bottom_layer_height_mm; + std::float_t bottom_lift_distance_mm; + std::float_t bottom_lift_speed_mms; + +} pwmx_format_misc; + +class PwmxFormatConfigDef : public ConfigDef +{ +public: + PwmxFormatConfigDef() + { + add(CFG_LIFT_DISTANCE, coFloat); + add(CFG_LIFT_SPEED, coFloat); + add(CFG_RETRACT_SPEED, coFloat); + add(CFG_DELAY_BEFORE_EXPOSURE, coFloat); + add(CFG_BOTTOM_LIFT_DISTANCE, coFloat); + add(CFG_BOTTOM_LIFT_SPEED, coFloat); + } +}; + +class PwmxFormatDynamicConfig : public DynamicConfig +{ +public: + PwmxFormatDynamicConfig(){}; + const ConfigDef *def() const override { return &config_def; } + +private: + PwmxFormatConfigDef config_def; +}; + +namespace { + +std::float_t get_cfg_value_f(const DynamicConfig &cfg, + const std::string &key, + const std::float_t &def = 0.f) +{ + if (cfg.has(key)) { + if (auto opt = cfg.option(key)) + return opt->getFloat(); + } + + return def; +} + +int get_cfg_value_i(const DynamicConfig &cfg, + const std::string &key, + const int &def = 0) +{ + if (cfg.has(key)) { + if (auto opt = cfg.option(key)) + return opt->getInt(); + } + + return def; +} + +template void crop_value(T &val, T val_min, T val_max) +{ + if (val < val_min) { + val = val_min; + } else if (val > val_max) { + val = val_max; + } +} + +void fill_preview(pwmx_format_preview &p, + pwmx_format_misc &/*m*/, + const ThumbnailsList &thumbnails) +{ + + p.preview_w = PREV_W; + p.preview_h = PREV_H; + p.preview_dpi = PREV_DPI; + p.payload_size = sizeof(p) - sizeof(p.tag) - sizeof(p.payload_size); + + std::memset(p.pixels, 0 , sizeof(p.pixels)); + if (!thumbnails.empty()) { + std::uint32_t dst_index; + std::uint32_t i = 0; + size_t len; + size_t pixel_x = 0; + auto t = thumbnails[0]; //use the first thumbnail + len = t.pixels.size(); + //sanity check + if (len != PREV_W * PREV_H * 4) { + printf("incorrect thumbnail size. expected %ix%i\n", PREV_W, PREV_H); + return; + } + // rearange pixels: they seem to be stored from bottom to top. + dst_index = (PREV_W * (PREV_H - 1) * 2); + while (i < len) { + std::uint32_t pixel; + std::uint32_t r = t.pixels[i++]; + std::uint32_t g = t.pixels[i++]; + std::uint32_t b = t.pixels[i++]; + i++; // Alpha + // convert to BGRA565 + pixel = ((b >> 3) << 11) | ((g >>2) << 5) | (r >> 3); + p.pixels[dst_index++] = pixel & 0xFF; + p.pixels[dst_index++] = (pixel >> 8) & 0xFF; + pixel_x++; + if (pixel_x == PREV_W) { + pixel_x = 0; + dst_index -= (PREV_W * 4); + } + } + } +} + + +void fill_header(pwmx_format_header &h, + pwmx_format_misc &m, + const SLAPrint &print, + std::uint32_t layer_count) +{ + CNumericLocalesSetter locales_setter; + + std::float_t bottle_weight_g; + std::float_t bottle_volume_ml; + std::float_t bottle_cost; + std::float_t material_density; + auto &cfg = print.full_print_config(); + auto mat_opt = cfg.option("material_notes"); + std::string mnotes = mat_opt? cfg.option("material_notes")->serialize() : ""; + // create a config parser from the material notes + Slic3r::PwmxFormatDynamicConfig mat_cfg; + SLAPrintStatistics stats = print.print_statistics(); + + // sanitize the string config + boost::replace_all(mnotes, "\\n", "\n"); + boost::replace_all(mnotes, "\\r", "\r"); + mat_cfg.load_from_ini_string(mnotes, + ForwardCompatibilitySubstitutionRule::Enable); + + h.layer_height_mm = get_cfg_value_f(cfg, "layer_height"); + m.bottom_layer_height_mm = get_cfg_value_f(cfg, "initial_layer_height"); + h.exposure_time_s = get_cfg_value_f(cfg, "exposure_time"); + h.bottom_exposure_time_s = get_cfg_value_f(cfg, "initial_exposure_time"); + h.bottom_layer_count = get_cfg_value_i(cfg, "faded_layers"); + if (layer_count < h.bottom_layer_count) { + h.bottom_layer_count = layer_count; + } + h.res_x = get_cfg_value_i(cfg, "display_pixels_x"); + h.res_y = get_cfg_value_i(cfg, "display_pixels_y"); + bottle_weight_g = get_cfg_value_f(cfg, "bottle_weight") * 1000.0f; + bottle_volume_ml = get_cfg_value_f(cfg, "bottle_volume"); + bottle_cost = get_cfg_value_f(cfg, "bottle_cost"); + material_density = bottle_weight_g / bottle_volume_ml; + + h.volume_ml = (stats.objects_used_material + stats.support_used_material) / 1000; + h.weight_g = h.volume_ml * material_density; + h.price = (h.volume_ml * bottle_cost) / bottle_volume_ml; + h.price_currency = '$'; + h.antialiasing = 1; + h.per_layer_override = 0; + + // TODO - expose these variables to the UI rather than using material notes + h.delay_before_exposure_s = get_cfg_value_f(mat_cfg, CFG_DELAY_BEFORE_EXPOSURE, 0.5f); + crop_value(h.delay_before_exposure_s, 0.0f, 1000.0f); + + h.lift_distance_mm = get_cfg_value_f(mat_cfg, CFG_LIFT_DISTANCE, 8.0f); + crop_value(h.lift_distance_mm, 0.0f, 100.0f); + + if (mat_cfg.has(CFG_BOTTOM_LIFT_DISTANCE)) { + m.bottom_lift_distance_mm = get_cfg_value_f(mat_cfg, + CFG_BOTTOM_LIFT_DISTANCE, + 8.0f); + crop_value(h.lift_distance_mm, 0.0f, 100.0f); + } else { + m.bottom_lift_distance_mm = h.lift_distance_mm; + } + + h.lift_speed_mms = get_cfg_value_f(mat_cfg, CFG_LIFT_SPEED, 2.0f); + crop_value(m.bottom_lift_speed_mms, 0.1f, 20.0f); + + if (mat_cfg.has(CFG_BOTTOM_LIFT_SPEED)) { + m.bottom_lift_speed_mms = get_cfg_value_f(mat_cfg, CFG_BOTTOM_LIFT_SPEED, 2.0f); + crop_value(m.bottom_lift_speed_mms, 0.1f, 20.0f); + } else { + m.bottom_lift_speed_mms = h.lift_speed_mms; + } + + h.retract_speed_mms = get_cfg_value_f(mat_cfg, CFG_RETRACT_SPEED, 3.0f); + crop_value(h.lift_speed_mms, 0.1f, 20.0f); + + h.print_time_s = (h.bottom_layer_count * h.bottom_exposure_time_s) + + ((layer_count - h.bottom_layer_count) * + h.exposure_time_s) + + (layer_count * h.lift_distance_mm / h.retract_speed_mms) + + (layer_count * h.lift_distance_mm / h.lift_speed_mms) + + (layer_count * h.delay_before_exposure_s); + + + h.payload_size = sizeof(h) - sizeof(h.tag) - sizeof(h.payload_size); + h.pixel_size_um = 50; +} + +} // namespace + +std::unique_ptr PwmxArchive::create_raster() const +{ + sla::Resolution res; + sla::PixelDim pxdim; + std::array mirror; + + double w = m_cfg.display_width.getFloat(); + double h = m_cfg.display_height.getFloat(); + auto pw = size_t(m_cfg.display_pixels_x.getInt()); + auto ph = size_t(m_cfg.display_pixels_y.getInt()); + + mirror[X] = m_cfg.display_mirror_x.getBool(); + mirror[Y] = m_cfg.display_mirror_y.getBool(); + + auto ro = m_cfg.display_orientation.getInt(); + sla::RasterBase::Orientation orientation = + ro == sla::RasterBase::roPortrait ? sla::RasterBase::roPortrait : + sla::RasterBase::roLandscape; + + if (orientation == sla::RasterBase::roPortrait) { + std::swap(w, h); + std::swap(pw, ph); + } + + res = sla::Resolution{pw, ph}; + pxdim = sla::PixelDim{w / pw, h / ph}; + sla::RasterBase::Trafo tr{orientation, mirror}; + + double gamma = m_cfg.gamma_correction.getFloat(); + + return sla::create_raster_grayscale_aa(res, pxdim, gamma, tr); +} + +sla::RasterEncoder PwmxArchive::get_encoder() const +{ + return PWXRasterEncoder{}; +} + +// Endian safe write of little endian 32bit ints +static void pwmx_write_int32(std::ofstream &out, std::uint32_t val) +{ + const char i1 = (val & 0xFF); + const char i2 = (val >> 8) & 0xFF; + const char i3 = (val >> 16) & 0xFF; + const char i4 = (val >> 24) & 0xFF; + + out.write((const char *) &i1, 1); + out.write((const char *) &i2, 1); + out.write((const char *) &i3, 1); + out.write((const char *) &i4, 1); +} +static void pwmx_write_float(std::ofstream &out, std::float_t val) +{ + std::uint32_t *f = (std::uint32_t *) &val; + pwmx_write_int32(out, *f); +} + +static void pwmx_write_intro(std::ofstream &out, pwmx_format_intro &i) +{ + out.write(TAG_INTRO, sizeof(i.tag)); + pwmx_write_int32(out, i.version); + pwmx_write_int32(out, i.area_num); + pwmx_write_int32(out, i.header_data_offset); + pwmx_write_int32(out, i.intro24); + pwmx_write_int32(out, i.preview_data_offset); + pwmx_write_int32(out, i.intro32); + pwmx_write_int32(out, i.layer_data_offset); + pwmx_write_int32(out, i.intro40); + pwmx_write_int32(out, i.image_data_offset); +} + +static void pwmx_write_header(std::ofstream &out, pwmx_format_header &h) +{ + out.write(TAG_HEADER, sizeof(h.tag)); + pwmx_write_int32(out, h.payload_size); + pwmx_write_float(out, h.pixel_size_um); + pwmx_write_float(out, h.layer_height_mm); + pwmx_write_float(out, h.exposure_time_s); + pwmx_write_float(out, h.delay_before_exposure_s); + pwmx_write_float(out, h.bottom_exposure_time_s); + pwmx_write_float(out, h.bottom_layer_count); + pwmx_write_float(out, h.lift_distance_mm); + pwmx_write_float(out, h.lift_speed_mms); + pwmx_write_float(out, h.retract_speed_mms); + pwmx_write_float(out, h.volume_ml); + pwmx_write_int32(out, h.antialiasing); + pwmx_write_int32(out, h.res_x); + pwmx_write_int32(out, h.res_y); + pwmx_write_float(out, h.weight_g); + pwmx_write_float(out, h.price); + pwmx_write_int32(out, h.price_currency); + pwmx_write_int32(out, h.per_layer_override); + pwmx_write_int32(out, h.print_time_s); + pwmx_write_int32(out, h.transition_layer_count); + pwmx_write_int32(out, h.unknown); +} + +static void pwmx_write_preview(std::ofstream &out, pwmx_format_preview &p) +{ + out.write(TAG_PREVIEW, sizeof(p.tag)); + pwmx_write_int32(out, p.payload_size); + pwmx_write_int32(out, p.preview_w); + pwmx_write_int32(out, p.preview_dpi); + pwmx_write_int32(out, p.preview_h); + out.write((const char*) p.pixels, sizeof(p.pixels)); +} + +static void pwmx_write_layers_header(std::ofstream &out, pwmx_format_layers_header &h) +{ + out.write(TAG_LAYERS, sizeof(h.tag)); + pwmx_write_int32(out, h.payload_size); + pwmx_write_int32(out, h.layer_count); +} + +static void pwmx_write_layer(std::ofstream &out, pwmx_format_layer &l) +{ + pwmx_write_int32(out, l.image_offset); + pwmx_write_int32(out, l.image_size); + pwmx_write_float(out, l.lift_distance_mm); + pwmx_write_float(out, l.lift_speed_mms); + pwmx_write_float(out, l.exposure_time_s); + pwmx_write_float(out, l.layer_height_mm); + pwmx_write_float(out, l.layer44); + pwmx_write_float(out, l.layer48); +} + +void PwmxArchive::export_print(const std::string fname, + const SLAPrint &print, + const ThumbnailsList &thumbnails, + const std::string &/*projectname*/) +{ + std::uint32_t layer_count = m_layers.size(); + + pwmx_format_intro intro = {}; + pwmx_format_header header = {}; + pwmx_format_preview preview = {}; + pwmx_format_layers_header layers_header = {}; + pwmx_format_misc misc = {}; + std::vector layer_images; + std::uint32_t image_offset; + + intro.version = 1; + intro.area_num = 4; + intro.header_data_offset = sizeof(intro); + intro.preview_data_offset = sizeof(intro) + sizeof(header); + intro.layer_data_offset = intro.preview_data_offset + sizeof(preview); + intro.image_data_offset = intro.layer_data_offset + + sizeof(layers_header) + + (sizeof(pwmx_format_layer) * layer_count); + + fill_header(header, misc, print, layer_count); + fill_preview(preview, misc, thumbnails); + + try { + // open the file and write the contents + std::ofstream out; + out.open(fname, std::ios::binary | std::ios::out | std::ios::trunc); + pwmx_write_intro(out, intro); + pwmx_write_header(out, header); + pwmx_write_preview(out, preview); + + layers_header.payload_size = intro.image_data_offset - intro.layer_data_offset - + sizeof(layers_header.tag) - sizeof(layers_header.payload_size); + layers_header.layer_count = layer_count; + pwmx_write_layers_header(out, layers_header); + + //layers + layer_images.reserve(layer_count * LAYER_SIZE_ESTIMATE); + image_offset = intro.image_data_offset; + size_t i = 0; + for (const sla::EncodedRaster &rst : m_layers) { + pwmx_format_layer l; + std::memset(&l, 0, sizeof(l)); + l.image_offset = image_offset; + l.image_size = rst.size(); + if (i < header.bottom_layer_count) { + l.exposure_time_s = header.bottom_exposure_time_s; + l.layer_height_mm = misc.bottom_layer_height_mm; + l.lift_distance_mm = misc.bottom_lift_distance_mm; + l.lift_speed_mms = misc.bottom_lift_speed_mms; + } else { + l.exposure_time_s = header.exposure_time_s; + l.layer_height_mm = header.layer_height_mm; + l.lift_distance_mm = header.lift_distance_mm; + l.lift_speed_mms = header.lift_speed_mms; + } + image_offset += l.image_size; + pwmx_write_layer(out, l); + // add the rle encoded layer image into the buffer + const char* img_start = reinterpret_cast(rst.data()); + const char* img_end = img_start + rst.size(); + std::copy(img_start, img_end, std::back_inserter(layer_images)); + i++; + } + const char* img_buffer = reinterpret_cast(layer_images.data()); + out.write(img_buffer, layer_images.size()); + out.close(); + } catch(std::exception& e) { + BOOST_LOG_TRIVIAL(error) << e.what(); + // Rethrow the exception + throw; + } + +} + +} // namespace Slic3r diff --git a/src/libslic3r/Format/pwmx.hpp b/src/libslic3r/Format/pwmx.hpp new file mode 100644 index 000000000..65fb19910 --- /dev/null +++ b/src/libslic3r/Format/pwmx.hpp @@ -0,0 +1,37 @@ +#ifndef _SLIC3R_FORMAT_PWMX_HPP_ +#define _SLIC3R_FORMAT_PWMX_HPP_ + +#include + +#include "SLAArchive.hpp" + +#include "libslic3r/PrintConfig.hpp" + +namespace Slic3r { + +class PwmxArchive: public SLAArchive { + SLAPrinterConfig m_cfg; + +protected: + std::unique_ptr create_raster() const override; + sla::RasterEncoder get_encoder() const override; + + SLAPrinterConfig & cfg() { return m_cfg; } + const SLAPrinterConfig & cfg() const { return m_cfg; } + +public: + + PwmxArchive() = default; + explicit PwmxArchive(const SLAPrinterConfig &cfg): m_cfg(cfg) {} + explicit PwmxArchive(SLAPrinterConfig &&cfg): m_cfg(std::move(cfg)) {} + + void export_print(const std::string fname, + const SLAPrint &print, + const ThumbnailsList &thumbnails, + const std::string &projectname = "") override; +}; + + +} // namespace Slic3r::sla + +#endif // _SLIC3R_FORMAT_PWMX_HPP_ diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 5fac4b822..3d0ca5069 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -6,6 +6,7 @@ #include "EdgeGrid.hpp" #include "Geometry/ConvexHull.hpp" #include "GCode/PrintExtents.hpp" +#include "GCode/Thumbnails.hpp" #include "GCode/WipeTower.hpp" #include "ShortestPath.hpp" #include "Print.hpp" @@ -26,7 +27,6 @@ #include #include #include -#include #include #include @@ -54,8 +54,6 @@ #include -#include "miniz_extension.hpp" - using namespace std::literals::string_view_literals; #if 0 @@ -156,63 +154,52 @@ namespace Slic3r { std::string Wipe::wipe(GCode& gcodegen, bool toolchange) { - std::string gcode; + std::string gcode; + const Extruder &extruder = *gcodegen.writer().extruder(); - /* Reduce feedrate a bit; travel speed is often too high to move on existing material. - Too fast = ripping of existing material; too slow = short wipe path, thus more blob. */ - double wipe_speed = gcodegen.writer().config.travel_speed.value * 0.8; - - // get the retraction length - double length = toolchange - ? gcodegen.writer().extruder()->retract_length_toolchange() - : gcodegen.writer().extruder()->retract_length(); - // Shorten the retraction length by the amount already retracted before wipe. - length *= (1. - gcodegen.writer().extruder()->retract_before_wipe()); - - if (length > 0) { - /* Calculate how long we need to travel in order to consume the required - amount of retraction. In other words, how far do we move in XY at wipe_speed - for the time needed to consume retract_length at retract_speed? */ - double wipe_dist = scale_(length / gcodegen.writer().extruder()->retract_speed() * wipe_speed); - - /* Take the stored wipe path and replace first point with the current actual position - (they might be different, for example, in case of loop clipping). */ - Polyline wipe_path; - wipe_path.append(gcodegen.last_pos()); - wipe_path.append( - this->path.points.begin() + 1, - this->path.points.end() - ); - - wipe_path.clip_end(wipe_path.length() - wipe_dist); - - // subdivide the retraction in segments - if (!wipe_path.empty()) { - // add tag for processor + // Remaining quantized retraction length. + if (double retract_length = extruder.retract_to_go(toolchange ? extruder.retract_length_toolchange() : extruder.retract_length()); + retract_length > 0 && this->path.size() >= 2) { + // Reduce feedrate a bit; travel speed is often too high to move on existing material. + // Too fast = ripping of existing material; too slow = short wipe path, thus more blob. + const double wipe_speed = gcodegen.writer().config.travel_speed.value * 0.8; + // Reduce retraction length a bit to avoid effective retraction speed to be greater than the configured one + // due to rounding (TODO: test and/or better math for this). + const double xy_to_e = 0.95 * extruder.retract_speed() / wipe_speed; + // Start with the current position, which may be different from the wipe path start in case of loop clipping. + Vec2d prev = gcodegen.point_to_gcode_quantized(gcodegen.last_pos()); + auto it = this->path.points.begin(); + Vec2d p = gcodegen.point_to_gcode_quantized(*(++ it)); + if (p != prev) { gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Start) + "\n"; - for (const Line& line : wipe_path.lines()) { - double segment_length = line.length(); - /* Reduce retraction length a bit to avoid effective retraction speed to be greater than the configured one - due to rounding (TODO: test and/or better math for this) */ - double dE = length * (segment_length / wipe_dist) * 0.95; + auto end = this->path.points.end(); + bool done = false; + for (; it != end && ! done; ++ it) { + p = gcodegen.point_to_gcode_quantized(*it); + double segment_length = (p - prev).norm(); + double dE = GCodeFormatter::quantize_e(xy_to_e * segment_length); + if (dE > retract_length - EPSILON) { + if (dE > retract_length + EPSILON) + // Shorten the segment. + p = prev + (p - prev) * (retract_length / dE); + dE = retract_length; + done = true; + } //FIXME one shall not generate the unnecessary G1 Fxxx commands, here wipe_speed is a constant inside this cycle. // Is it here for the cooling markers? Or should it be outside of the cycle? - gcode += gcodegen.writer().set_speed(wipe_speed * 60, "", gcodegen.enable_cooling_markers() ? ";_WIPE" : ""); - gcode += gcodegen.writer().extrude_to_xy( - gcodegen.point_to_gcode(line.b), - -dE, - "wipe and retract" - ); + gcode += gcodegen.writer().set_speed(wipe_speed * 60, {}, gcodegen.enable_cooling_markers() ? ";_WIPE" : ""); + gcode += gcodegen.writer().extrude_to_xy(p, -dE, "wipe and retract"); + prev = p; + retract_length -= dE; } // add tag for processor gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_End) + "\n"; - gcodegen.set_last_pos(wipe_path.points.back()); + gcodegen.set_last_pos(gcodegen.gcode_to_point(prev)); } - - // prevent wiping again on same path - this->reset_path(); } + // Prevent wiping again on the same path. + this->reset_path(); return gcode; } @@ -287,7 +274,6 @@ namespace Slic3r { // Otherwise, leave control to the user completely. std::string toolchange_gcode_str; const std::string& toolchange_gcode = gcodegen.config().toolchange_gcode.value; -// m_max_layer_z = std::max(m_max_layer_z, tcr.print_z); if (! toolchange_gcode.empty()) { DynamicConfig config; int previous_extruder_id = gcodegen.writer().extruder() ? (int)gcodegen.writer().extruder()->id() : -1; @@ -296,7 +282,7 @@ namespace Slic3r { config.set_key_value("layer_num", new ConfigOptionInt(gcodegen.m_layer_index)); config.set_key_value("layer_z", new ConfigOptionFloat(tcr.print_z)); config.set_key_value("toolchange_z", new ConfigOptionFloat(z)); -// config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z)); + config.set_key_value("max_layer_z", new ConfigOptionFloat(gcodegen.m_max_layer_z)); toolchange_gcode_str = gcodegen.placeholder_parser_process("toolchange_gcode", toolchange_gcode, new_extruder_id, &config); check_add_eol(toolchange_gcode_str); } @@ -318,6 +304,9 @@ namespace Slic3r { if (!start_filament_gcode.empty()) { // Process the start_filament_gcode for the active filament only. DynamicConfig config; + config.set_key_value("layer_num", new ConfigOptionInt(gcodegen.m_layer_index)); + config.set_key_value("layer_z", new ConfigOptionFloat(gcodegen.writer().get_position()(2) - gcodegen.m_config.z_offset.value)); + config.set_key_value("max_layer_z", new ConfigOptionFloat(gcodegen.m_max_layer_z)); config.set_key_value("filament_extruder_id", new ConfigOptionInt(new_extruder_id)); start_filament_gcode_str = gcodegen.placeholder_parser_process("start_filament_gcode", start_filament_gcode, new_extruder_id, &config); check_add_eol(start_filament_gcode_str); @@ -374,7 +363,7 @@ namespace Slic3r { // All G1 commands should be translated and rotated. X and Y coords are // only pushed to the output when they differ from last time. // WT generator can override this by appending the never_skip_tag - if (line.find("G1 ") == 0) { + if (boost::starts_with(line, "G1 ")) { bool never_skip = false; auto it = line.find(WipeTower::never_skip_tag()); if (it != std::string::npos) { @@ -386,6 +375,7 @@ namespace Slic3r { std::istringstream line_str(line); line_str >> std::noskipws; // don't skip whitespace char ch = 0; + line_str >> ch >> ch; // read the "G1" while (line_str >> ch) { if (ch == 'X' || ch == 'Y') line_str >> (ch == 'X' ? pos.x() : pos.y()); @@ -397,14 +387,16 @@ namespace Slic3r { if (transformed_pos != old_pos || never_skip) { line = line_out.str(); + boost::trim_left(line); // Remove leading spaces std::ostringstream oss; - oss << std::fixed << std::setprecision(3) << "G1 "; + oss << std::fixed << std::setprecision(3) << "G1"; if (transformed_pos.x() != old_pos.x() || never_skip) oss << " X" << transformed_pos.x() - extruder_offset.x(); if (transformed_pos.y() != old_pos.y() || never_skip) oss << " Y" << transformed_pos.y() - extruder_offset.y(); - oss << " "; - line.replace(line.find("G1 "), 3, oss.str()); + if (! line.empty()) + oss << " "; + line = oss.str() + line; old_pos = transformed_pos; } } @@ -455,7 +447,7 @@ namespace Slic3r { bool ignore_sparse = false; if (gcodegen.config().wipe_tower_no_sparse_layers.value) { wipe_tower_z = m_last_wipe_tower_print_z; - ignore_sparse = (m_tool_changes[m_layer_idx].size() == 1 && m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool); + ignore_sparse = (m_tool_changes[m_layer_idx].size() == 1 && m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool && m_layer_idx != 0); if (m_tool_change_idx == 0 && !ignore_sparse) wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height; } @@ -747,9 +739,13 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu CNumericLocalesSetter locales_setter; // Does the file exist? If so, we hope that it is still valid. - if (print->is_step_done(psGCodeExport) && boost::filesystem::exists(boost::filesystem::path(path))) - return; + { + PrintStateBase::StateWithTimeStamp state = print->step_state_with_timestamp(psGCodeExport); + if (! state.enabled || (state.state == PrintStateBase::DONE && boost::filesystem::exists(boost::filesystem::path(path)))) + return; + } + // Enabled and either not done, or marked as done while the output file is missing. print->set_started(psGCodeExport); // check if any custom gcode contains keywords used by the gcode processor to @@ -937,49 +933,6 @@ namespace DoExport { } } - template - static void export_thumbnails_to_file(ThumbnailsGeneratorCallback &thumbnail_cb, const std::vector &sizes, WriteToOutput output, ThrowIfCanceledCallback throw_if_canceled) - { - // Write thumbnails using base64 encoding - if (thumbnail_cb != nullptr) - { - const size_t max_row_length = 78; - ThumbnailsList thumbnails = thumbnail_cb(ThumbnailsParams{ sizes, true, true, true, true }); - for (const ThumbnailData& data : thumbnails) - { - if (data.is_valid()) - { - size_t png_size = 0; - void* png_data = tdefl_write_image_to_png_file_in_memory_ex((const void*)data.pixels.data(), data.width, data.height, 4, &png_size, MZ_DEFAULT_LEVEL, 1); - if (png_data != nullptr) - { - std::string encoded; - encoded.resize(boost::beast::detail::base64::encoded_size(png_size)); - encoded.resize(boost::beast::detail::base64::encode((void*)&encoded[0], (const void*)png_data, png_size)); - - output((boost::format("\n;\n; thumbnail begin %dx%d %d\n") % data.width % data.height % encoded.size()).str().c_str()); - - unsigned int row_count = 0; - while (encoded.size() > max_row_length) - { - output((boost::format("; %s\n") % encoded.substr(0, max_row_length)).str().c_str()); - encoded = encoded.substr(max_row_length); - ++row_count; - } - - if (encoded.size() > 0) - output((boost::format("; %s\n") % encoded).str().c_str()); - - output("; thumbnail end\n;\n"); - - mz_free(png_data); - } - } - throw_if_canceled(); - } - } - } - // Fill in print_statistics and return formatted string containing filament statistics to be inserted into G-code comment section. static std::string update_print_stats_and_format_filament_stats( const bool has_wipe_tower, @@ -1101,7 +1054,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato if (! print.config().gcode_substitutions.values.empty()) { m_find_replace = make_unique(print.config()); - file.set_find_replace(m_find_replace.get()); + file.set_find_replace(m_find_replace.get(), false); } // resets analyzer's tracking data @@ -1163,9 +1116,16 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // Write information on the generator. file.write_format("; %s\n\n", Slic3r::header_slic3r_generated().c_str()); - DoExport::export_thumbnails_to_file(thumbnail_cb, print.full_print_config().option("thumbnails")->values, - [&file](const char* sz) { file.write(sz); }, - [&print]() { print.throw_if_canceled(); }); + // Unit tests or command line slicing may not define "thumbnails" or "thumbnails_format". + // If "thumbnails_format" is not defined, export to PNG. + if (const auto [thumbnails, thumbnails_format] = std::make_pair( + print.full_print_config().option("thumbnails"), + print.full_print_config().option>("thumbnails_format")); + thumbnails) + GCodeThumbnails::export_thumbnails_to_file( + thumbnail_cb, thumbnails->values, thumbnails_format ? thumbnails_format->value : GCodeThumbnailsFormat::PNG, + [&file](const char* sz) { file.write(sz); }, + [&print]() { print.throw_if_canceled(); }); // Write notes (content of the Print Settings tab -> Notes) { @@ -1206,6 +1166,9 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato if (print.config().remaining_times.value) file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::First_Line_M73_Placeholder).c_str()); + // Starting now, the G-code find / replace post-processor will be enabled. + file.find_replace_enable(); + // Prepare the helper object for replacing placeholders in custom G-code and output filename. m_placeholder_parser = print.placeholder_parser(); m_placeholder_parser.update_timestamp(); @@ -1323,15 +1286,6 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // Write the custom start G-code file.writeln(start_gcode); - // Process filament-specific gcode. - /* if (has_wipe_tower) { - // Wipe tower will control the extruder switching, it will call the start_filament_gcode. - } else { - DynamicConfig config; - config.set_key_value("filament_extruder_id", new ConfigOptionInt(int(initial_extruder_id))); - file.writeln(this->placeholder_parser_process("start_filament_gcode", print.config().start_filament_gcode.values[initial_extruder_id], initial_extruder_id, &config)); - } -*/ this->_print_first_layer_extruder_temperatures(file, print, start_gcode, initial_extruder_id, true); print.throw_if_canceled(); @@ -1495,6 +1449,10 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato file.write(m_writer.update_progress(m_layer_count, m_layer_count, true)); // 100% file.write(m_writer.postamble()); + // From now to the end of G-code, the G-code find / replace post-processor will be disabled. + // Thus the PrusaSlicer generated config will NOT be processed by the G-code post-processor, see GH issue #7952. + file.find_replace_supress(); + // adds tags for time estimators if (print.config().remaining_times.value) file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Last_Line_M73_Placeholder).c_str()); @@ -1574,7 +1532,7 @@ void GCode::process_layers( ); // The pipeline elements are joined using const references, thus no copying is performed. - output_stream.set_find_replace(nullptr); + output_stream.find_replace_supress(); if (m_spiral_vase && m_find_replace) tbb::parallel_pipeline(12, generator & spiral_vase & cooling & find_replace & output); else if (m_spiral_vase) @@ -1583,7 +1541,7 @@ void GCode::process_layers( tbb::parallel_pipeline(12, generator & cooling & find_replace & output); else tbb::parallel_pipeline(12, generator & cooling & output); - output_stream.set_find_replace(m_find_replace.get()); + output_stream.find_replace_enable(); } // Process all layers of a single object instance (sequential mode) with a parallel pipeline: @@ -1627,7 +1585,7 @@ void GCode::process_layers( ); // The pipeline elements are joined using const references, thus no copying is performed. - output_stream.set_find_replace(nullptr); + output_stream.find_replace_supress(); if (m_spiral_vase && m_find_replace) tbb::parallel_pipeline(12, generator & spiral_vase & cooling & find_replace & output); else if (m_spiral_vase) @@ -1636,7 +1594,7 @@ void GCode::process_layers( tbb::parallel_pipeline(12, generator & cooling & find_replace & output); else tbb::parallel_pipeline(12, generator & cooling & output); - output_stream.set_find_replace(m_find_replace.get()); + output_stream.find_replace_enable(); } std::string GCode::placeholder_parser_process(const std::string &name, const std::string &templ, unsigned int current_extruder_id, const DynamicConfig *config_override) @@ -1948,6 +1906,8 @@ namespace ProcessLayer // && !MMU1 ) { //! FIXME_in_fw show message during print pause + // FIXME: Why is pause_print_gcode here? Why is it supplied "color_change_extruder"? Why is that not + // passed to color_change_gcode below? DynamicConfig cfg; cfg.set_key_value("color_change_extruder", new ConfigOptionInt(m600_extruder_before_layer)); gcode += gcodegen.placeholder_parser_process("pause_print_gcode", config.pause_print_gcode, current_extruder_id, &cfg); @@ -2158,10 +2118,10 @@ GCode::LayerResult GCode::process_layer( DynamicConfig config; config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index)); config.set_key_value("layer_z", new ConfigOptionFloat(print_z)); + config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z)); gcode += this->placeholder_parser_process("layer_gcode", print.config().layer_gcode.value, m_writer.extruder()->id(), &config) + "\n"; - config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z)); } if (! first_layer && ! m_second_layer_things_done) { @@ -3047,13 +3007,15 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, double path_length = 0.; { std::string comment = m_config.gcode_comments ? description : ""; - for (const Line &line : path.polyline.lines()) { - const double line_length = line.length() * SCALING_FACTOR; + Vec2d prev = this->point_to_gcode_quantized(path.polyline.points.front()); + auto it = path.polyline.points.begin(); + auto end = path.polyline.points.end(); + for (++ it; it != end; ++ it) { + Vec2d p = this->point_to_gcode_quantized(*it); + const double line_length = (p - prev).norm(); path_length += line_length; - gcode += m_writer.extrude_to_xy( - this->point_to_gcode(line.b), - e_per_mm * line_length, - comment); + gcode += m_writer.extrude_to_xy(p, e_per_mm * line_length, comment); + prev = p; } } if (m_enable_cooling_markers) @@ -3193,7 +3155,9 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) const std::string &start_filament_gcode = m_config.start_filament_gcode.get_at(extruder_id); if (! start_filament_gcode.empty()) { // Process the start_filament_gcode for the filament. - gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id); + DynamicConfig config; + config.set_key_value("filament_extruder_id", new ConfigOptionInt(int(extruder_id))); + gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id, &config); check_add_eol(gcode); } gcode += m_writer.toolchange(extruder_id); @@ -3262,7 +3226,9 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) const std::string &start_filament_gcode = m_config.start_filament_gcode.get_at(extruder_id); if (! start_filament_gcode.empty()) { // Process the start_filament_gcode for the new filament. - gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id); + DynamicConfig config; + config.set_key_value("filament_extruder_id", new ConfigOptionInt(int(extruder_id))); + gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id, &config); check_add_eol(gcode); } // Set the new extruder to the operating temperature. @@ -3276,7 +3242,13 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) Vec2d GCode::point_to_gcode(const Point &point) const { Vec2d extruder_offset = EXTRUDER_CONFIG(extruder_offset); - return unscale(point) + m_origin - extruder_offset; + return unscaled(point) + m_origin - extruder_offset; +} + +Vec2d GCode::point_to_gcode_quantized(const Point &point) const +{ + Vec2d p = this->point_to_gcode(point); + return { GCodeFormatter::quantize_xyzf(p.x()), GCodeFormatter::quantize_xyzf(p.y()) }; } // convert a model-space scaled point into G-code coordinates diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index f46558c35..aa4682e34 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -55,9 +55,9 @@ public: Polyline path; Wipe() : enable(false) {} - bool has_path() const { return !this->path.points.empty(); } - void reset_path() { this->path = Polyline(); } - std::string wipe(GCode &gcodegen, bool toolchange = false); + bool has_path() const { return ! this->path.empty(); } + void reset_path() { this->path.clear(); } + std::string wipe(GCode &gcodegen, bool toolchange); }; class WipeTowerIntegration { @@ -151,7 +151,10 @@ public: void set_origin(const Vec2d &pointf); void set_origin(const coordf_t x, const coordf_t y) { this->set_origin(Vec2d(x, y)); } const Point& last_pos() const { return m_last_pos; } + // Convert coordinates of the active object to G-code coordinates, possibly adjusted for extruder offset. Vec2d point_to_gcode(const Point &point) const; + // Convert coordinates of the active object to G-code coordinates, possibly adjusted for extruder offset and quantized to G-code resolution. + Vec2d point_to_gcode_quantized(const Point &point) const; Point gcode_to_point(const Vec2d &point) const; const FullPrintConfig &config() const { return m_config; } const Layer* layer() const { return m_layer; } @@ -193,7 +196,9 @@ private: // Set a find-replace post-processor to modify the G-code before GCodePostProcessor. // It is being set to null inside process_layers(), because the find-replace process // is being called on a secondary thread to improve performance. - void set_find_replace(GCodeFindReplace *find_replace) { m_find_replace = find_replace; } + void set_find_replace(GCodeFindReplace *find_replace, bool enabled) { m_find_replace_backup = find_replace; m_find_replace = enabled ? find_replace : nullptr; } + void find_replace_enable() { m_find_replace = m_find_replace_backup; } + void find_replace_supress() { m_find_replace = nullptr; } bool is_open() const { return f; } bool is_error() const; @@ -217,6 +222,8 @@ private: FILE *f { nullptr }; // Find-replace post-processor to be called before GCodePostProcessor. GCodeFindReplace *m_find_replace { nullptr }; + // If suppressed, the backoup holds m_find_replace. + GCodeFindReplace *m_find_replace_backup { nullptr }; GCodeProcessor &m_processor; }; void _do_export(Print &print, GCodeOutputStream &file, ThumbnailsGeneratorCallback thumbnail_cb); diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp index f846d8cec..9edb35ee8 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp @@ -13,6 +13,8 @@ #include #include +//#define AVOID_CROSSING_PERIMETERS_DEBUG_OUTPUT + namespace Slic3r { struct TravelPoint @@ -354,8 +356,6 @@ static Polyline to_polyline(const std::vector &travel) return result; } -// #define AVOID_CROSSING_PERIMETERS_DEBUG_OUTPUT - #ifdef AVOID_CROSSING_PERIMETERS_DEBUG_OUTPUT static void export_travel_to_svg(const Polygons &boundary, const Line &original_travel, @@ -521,6 +521,25 @@ static float get_perimeter_spacing_external(const Layer &layer) return perimeter_spacing; } +// Returns average perimeter width calculated from all LayerRegion within the layer. +static float get_external_perimeter_width(const Layer &layer) +{ + size_t regions_count = 0; + float perimeter_width = 0.f; + for (const LayerRegion *layer_region : layer.regions()) + if (layer_region != nullptr && !layer_region->slices.empty()) { + perimeter_width += float(layer_region->flow(frExternalPerimeter).scaled_width()); + ++regions_count; + } + + assert(perimeter_width >= 0.f); + if (regions_count != 0) + perimeter_width /= float(regions_count); + else + perimeter_width = get_default_perimeter_spacing(*layer.object()); + return perimeter_width; +} + // Called by avoid_perimeters() and by simplify_travel_heuristics(). static size_t avoid_perimeters_inner(const AvoidCrossingPerimeters::Boundary &boundary, const Point &start, @@ -659,22 +678,22 @@ static size_t avoid_perimeters(const AvoidCrossingPerimeters::Boundary &boundary // Check if anyone of ExPolygons contains whole travel. // called by need_wipe() and AvoidCrossingPerimeters::travel_to() // FIXME Lukas H.: Maybe similar approach could also be used for ExPolygon::contains() -static bool any_expolygon_contains(const ExPolygons &ex_polygons, - const std::vector &ex_polygons_bboxes, - const EdgeGrid::Grid &grid_lslice, +static bool any_expolygon_contains(const ExPolygons &lslices_offset, + const std::vector &lslices_offset_bboxes, + const EdgeGrid::Grid &grid_lslices_offset, const Line &travel) { - assert(ex_polygons.size() == ex_polygons_bboxes.size()); - if(!grid_lslice.bbox().contains(travel.a) || !grid_lslice.bbox().contains(travel.b)) + assert(lslices_offset.size() == lslices_offset_bboxes.size()); + if(!grid_lslices_offset.bbox().contains(travel.a) || !grid_lslices_offset.bbox().contains(travel.b)) return false; - FirstIntersectionVisitor visitor(grid_lslice); + FirstIntersectionVisitor visitor(grid_lslices_offset); visitor.pt_current = &travel.a; visitor.pt_next = &travel.b; - grid_lslice.visit_cells_intersecting_line(*visitor.pt_current, *visitor.pt_next, visitor); + grid_lslices_offset.visit_cells_intersecting_line(*visitor.pt_current, *visitor.pt_next, visitor); if (!visitor.intersect) { - for (const ExPolygon &ex_polygon : ex_polygons) { - const BoundingBox &bbox = ex_polygons_bboxes[&ex_polygon - &ex_polygons.front()]; + for (const ExPolygon &ex_polygon : lslices_offset) { + const BoundingBox &bbox = lslices_offset_bboxes[&ex_polygon - &lslices_offset.front()]; if (bbox.contains(travel.a) && bbox.contains(travel.b) && ex_polygon.contains(travel.a)) return true; } @@ -684,18 +703,18 @@ static bool any_expolygon_contains(const ExPolygons &ex_polygons, // Check if anyone of ExPolygons contains whole travel. // called by need_wipe() -static bool any_expolygon_contains(const ExPolygons &ex_polygons, const std::vector &ex_polygons_bboxes, const EdgeGrid::Grid &grid_lslice, const Polyline &travel) +static bool any_expolygon_contains(const ExPolygons &ex_polygons, const std::vector &ex_polygons_bboxes, const EdgeGrid::Grid &grid_lslice_offset, const Polyline &travel) { assert(ex_polygons.size() == ex_polygons_bboxes.size()); - if(std::any_of(travel.points.begin(), travel.points.end(), [&grid_lslice](const Point &point) { return !grid_lslice.bbox().contains(point); })) + if(std::any_of(travel.points.begin(), travel.points.end(), [&grid_lslice_offset](const Point &point) { return !grid_lslice_offset.bbox().contains(point); })) return false; - FirstIntersectionVisitor visitor(grid_lslice); + FirstIntersectionVisitor visitor(grid_lslice_offset); bool any_intersection = false; for (size_t line_idx = 1; line_idx < travel.size(); ++line_idx) { visitor.pt_current = &travel.points[line_idx - 1]; visitor.pt_next = &travel.points[line_idx]; - grid_lslice.visit_cells_intersecting_line(*visitor.pt_current, *visitor.pt_next, visitor); + grid_lslice_offset.visit_cells_intersecting_line(*visitor.pt_current, *visitor.pt_next, visitor); any_intersection = visitor.intersect; if (any_intersection) break; } @@ -711,14 +730,14 @@ static bool any_expolygon_contains(const ExPolygons &ex_polygons, const std::vec return false; } -static bool need_wipe(const GCode &gcodegen, - const EdgeGrid::Grid &grid_lslice, - const Line &original_travel, - const Polyline &result_travel, - const size_t intersection_count) +static bool need_wipe(const GCode &gcodegen, + const ExPolygons &lslices_offset, + const std::vector &lslices_offset_bboxes, + const EdgeGrid::Grid &grid_lslices_offset, + const Line &original_travel, + const Polyline &result_travel, + const size_t intersection_count) { - const ExPolygons &lslices = gcodegen.layer()->lslices; - const std::vector &lslices_bboxes = gcodegen.layer()->lslices_bboxes; bool z_lift_enabled = gcodegen.config().retract_lift.get_at(gcodegen.writer().extruder()->id()) > 0.; bool wipe_needed = false; @@ -728,16 +747,16 @@ static bool need_wipe(const GCode &gcodegen, // The original layer is intersected with defined boundaries. Then it is necessary to make a detailed test. // If the z-lift is enabled, then a wipe is needed when the original travel leads above the holes. if (z_lift_enabled) { - if (any_expolygon_contains(lslices, lslices_bboxes, grid_lslice, original_travel)) { + if (any_expolygon_contains(lslices_offset, lslices_offset_bboxes, grid_lslices_offset, original_travel)) { // Check if original_travel and result_travel are not same. // If both are the same, then it is possible to skip testing of result_travel wipe_needed = !(result_travel.size() > 2 && result_travel.first_point() == original_travel.a && result_travel.last_point() == original_travel.b) && - !any_expolygon_contains(lslices, lslices_bboxes, grid_lslice, result_travel); + !any_expolygon_contains(lslices_offset, lslices_offset_bboxes, grid_lslices_offset, result_travel); } else { wipe_needed = true; } } else { - wipe_needed = !any_expolygon_contains(lslices, lslices_bboxes, grid_lslice, result_travel); + wipe_needed = !any_expolygon_contains(lslices_offset, lslices_offset_bboxes, grid_lslices_offset, result_travel); } } @@ -1163,10 +1182,8 @@ Polyline AvoidCrossingPerimeters::travel_to(const GCode &gcodegen, const Point & Vec2d startf = start.cast(); Vec2d endf = end .cast(); - const ExPolygons &lslices = gcodegen.layer()->lslices; - const std::vector &lslices_bboxes = gcodegen.layer()->lslices_bboxes; - bool is_support_layer = dynamic_cast(gcodegen.layer()) != nullptr; - if (!use_external && (is_support_layer || (!lslices.empty() && !any_expolygon_contains(lslices, lslices_bboxes, m_grid_lslice, travel)))) { + bool is_support_layer = dynamic_cast(gcodegen.layer()) != nullptr; + if (!use_external && (is_support_layer || (!m_lslices_offset.empty() && !any_expolygon_contains(m_lslices_offset, m_lslices_offset_bboxes, m_grid_lslices_offset, travel)))) { // Initialize m_internal only when it is necessary. if (m_internal.boundaries.empty()) init_boundary(&m_internal, to_polygons(get_boundary(*gcodegen.layer()))); @@ -1216,7 +1233,7 @@ Polyline AvoidCrossingPerimeters::travel_to(const GCode &gcodegen, const Point & } else if (max_detour_length_exceeded) { *could_be_wipe_disabled = false; } else - *could_be_wipe_disabled = !need_wipe(gcodegen, m_grid_lslice, travel, result_pl, travel_intersection_count); + *could_be_wipe_disabled = !need_wipe(gcodegen, m_lslices_offset, m_lslices_offset_bboxes, m_grid_lslices_offset, travel, result_pl, travel_intersection_count); return result_pl; } @@ -1227,13 +1244,21 @@ void AvoidCrossingPerimeters::init_layer(const Layer &layer) { m_internal.clear(); m_external.clear(); + m_lslices_offset.clear(); + m_lslices_offset_bboxes.clear(); + + float perimeter_offset = -get_external_perimeter_width(layer) / float(2.); + m_lslices_offset = offset_ex(layer.lslices, perimeter_offset); + + m_lslices_offset_bboxes.reserve(m_lslices_offset.size()); + for (const ExPolygon &ex_poly : m_lslices_offset) + m_lslices_offset_bboxes.emplace_back(get_extents(ex_poly)); BoundingBox bbox_slice(get_extents(layer.lslices)); bbox_slice.offset(SCALED_EPSILON); - m_grid_lslice.set_bbox(bbox_slice); - //FIXME 1mm grid? - m_grid_lslice.create(layer.lslices, coord_t(scale_(1.))); + m_grid_lslices_offset.set_bbox(bbox_slice); + m_grid_lslices_offset.create(m_lslices_offset, coord_t(scale_(1.))); } #if 0 diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.hpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.hpp index 412822c66..eb81c7972 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.hpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.hpp @@ -58,8 +58,11 @@ private: // we enable it by default for the first travel move in print bool m_disabled_once { true }; + // Lslices offseted by half an external perimeter width. Used for detection if line or polyline is inside of any polygon. + ExPolygons m_lslices_offset; + std::vector m_lslices_offset_bboxes; // Used for detection of line or polyline is inside of any polygon. - EdgeGrid::Grid m_grid_lslice; + EdgeGrid::Grid m_grid_lslices_offset; // Store all needed data for travels inside object Boundary m_internal; // Store all needed data for travels outside object diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 995964eb5..a46103d6c 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -36,6 +36,10 @@ static const float DEFAULT_FILAMENT_DIAMETER = 1.75f; static const float DEFAULT_FILAMENT_DENSITY = 1.245f; static const Slic3r::Vec3f DEFAULT_EXTRUDER_OFFSET = Slic3r::Vec3f::Zero(); +#if ENABLE_PROCESS_G2_G3_LINES +static const std::string INTERNAL_G2G3_TAG = "!#!#! internal only - from G2/G3 expansion !#!#!"; +#endif // ENABLE_PROCESS_G2_G3_LINES + namespace Slic3r { const std::vector GCodeProcessor::Reserved_Tags = { @@ -737,9 +741,7 @@ void GCodeProcessorResult::reset() { filament_diameters = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DIAMETER); filament_densities = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DENSITY); custom_gcode_per_print_z = std::vector(); -#if ENABLE_SPIRAL_VASE_LAYERS spiral_vase_layers = std::vector>>(); -#endif // ENABLE_SPIRAL_VASE_LAYERS time = 0; } #else @@ -755,9 +757,7 @@ void GCodeProcessorResult::reset() { filament_diameters = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DIAMETER); filament_densities = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DENSITY); custom_gcode_per_print_z = std::vector(); -#if ENABLE_SPIRAL_VASE_LAYERS spiral_vase_layers = std::vector>>(); -#endif // ENABLE_SPIRAL_VASE_LAYERS } #endif // ENABLE_GCODE_VIEWER_STATISTICS @@ -905,17 +905,13 @@ void GCodeProcessor::apply_config(const PrintConfig& config) m_result.max_print_height = config.max_print_height; -#if ENABLE_SPIRAL_VASE_LAYERS const ConfigOptionBool* spiral_vase = config.option("spiral_vase"); if (spiral_vase != nullptr) m_spiral_vase_active = spiral_vase->value; -#endif // ENABLE_SPIRAL_VASE_LAYERS -#if ENABLE_Z_OFFSET_CORRECTION const ConfigOptionFloat* z_offset = config.option("z_offset"); if (z_offset != nullptr) m_z_offset = z_offset->value; -#endif // ENABLE_Z_OFFSET_CORRECTION } void GCodeProcessor::apply_config(const DynamicPrintConfig& config) @@ -1160,17 +1156,13 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config) if (max_print_height != nullptr) m_result.max_print_height = max_print_height->value; -#if ENABLE_SPIRAL_VASE_LAYERS const ConfigOptionBool* spiral_vase = config.option("spiral_vase"); if (spiral_vase != nullptr) m_spiral_vase_active = spiral_vase->value; -#endif // ENABLE_SPIRAL_VASE_LAYERS -#if ENABLE_Z_OFFSET_CORRECTION const ConfigOptionFloat* z_offset = config.option("z_offset"); if (z_offset != nullptr) m_z_offset = z_offset->value; -#endif // ENABLE_Z_OFFSET_CORRECTION } void GCodeProcessor::enable_stealth_time_estimator(bool enabled) @@ -1196,15 +1188,14 @@ void GCodeProcessor::reset() m_line_id = 0; m_last_line_id = 0; m_feedrate = 0.0f; + m_feed_multiply.reset(); m_width = 0.0f; m_height = 0.0f; m_forced_width = 0.0f; m_forced_height = 0.0f; m_mm3_per_mm = 0.0f; m_fan_speed = 0.0f; -#if ENABLE_Z_OFFSET_CORRECTION m_z_offset = 0.0f; -#endif // ENABLE_Z_OFFSET_CORRECTION m_extrusion_role = erNone; m_extruder_id = 0; @@ -1219,7 +1210,6 @@ void GCodeProcessor::reset() m_extruded_last_z = 0.0f; m_first_layer_height = 0.0f; - m_processing_start_custom_gcode = false; m_g1_line_id = 0; m_layer_id = 0; m_cp_color.reset(); @@ -1237,9 +1227,7 @@ void GCodeProcessor::reset() m_options_z_corrector.reset(); -#if ENABLE_SPIRAL_VASE_LAYERS m_spiral_vase_active = false; -#endif // ENABLE_SPIRAL_VASE_LAYERS #if ENABLE_GCODE_VIEWER_DATA_CHECKING m_mm3_per_mm_compare.reset(); @@ -1595,6 +1583,10 @@ void GCodeProcessor::process_gcode_line(const GCodeReader::GCodeLine& line, bool switch (cmd[1]) { case '0': { process_G0(line); break; } // Move case '1': { process_G1(line); break; } // Move +#if ENABLE_PROCESS_G2_G3_LINES + case '2': { process_G2_G3(line, true); break; } // CW Arc Move + case '3': { process_G2_G3(line, false); break; } // CCW Arc Move +#endif // ENABLE_PROCESS_G2_G3_LINES default: break; } break; @@ -1698,6 +1690,7 @@ void GCodeProcessor::process_gcode_line(const GCodeReader::GCodeLine& line, bool break; case '2': switch (cmd[3]) { + case '0': { process_M220(line); break; } // Set Feedrate Percentage case '1': { process_M221(line); break; } // Set extrude factor override percentage default: break; } @@ -1824,7 +1817,6 @@ void GCodeProcessor::process_tags(const std::string_view comment, bool producers set_extrusion_role(ExtrusionEntity::string_to_role(comment.substr(reserved_tag(ETags::Role).length()))); if (m_extrusion_role == erExternalPerimeter) m_seams_detector.activate(true); - m_processing_start_custom_gcode = (m_extrusion_role == erCustom && m_g1_line_id == 0); return; } @@ -1948,16 +1940,17 @@ void GCodeProcessor::process_tags(const std::string_view comment, bool producers // layer change tag if (comment == reserved_tag(ETags::Layer_Change)) { ++m_layer_id; -#if ENABLE_SPIRAL_VASE_LAYERS if (m_spiral_vase_active) { - assert(!m_result.moves.empty()); - size_t move_id = m_result.moves.size() - 1; - if (!m_result.spiral_vase_layers.empty() && m_end_position[Z] == m_result.spiral_vase_layers.back().first) - m_result.spiral_vase_layers.back().second.second = move_id; - else - m_result.spiral_vase_layers.push_back({ m_end_position[Z], { move_id, move_id } }); + if (m_result.moves.empty()) + m_result.spiral_vase_layers.push_back({ m_first_layer_height, { 0, 0 } }); + else { + const size_t move_id = m_result.moves.size() - 1; + if (!m_result.spiral_vase_layers.empty() && m_end_position[Z] == m_result.spiral_vase_layers.back().first) + m_result.spiral_vase_layers.back().second.second = move_id; + else + m_result.spiral_vase_layers.push_back({ static_cast(m_end_position[Z]), { move_id, move_id } }); + } } -#endif // ENABLE_SPIRAL_VASE_LAYERS return; } @@ -2448,9 +2441,10 @@ void GCodeProcessor::process_G0(const GCodeReader::GCodeLine& line) void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) { - float filament_diameter = (static_cast(m_extruder_id) < m_result.filament_diameters.size()) ? m_result.filament_diameters[m_extruder_id] : m_result.filament_diameters.back(); - float filament_radius = 0.5f * filament_diameter; - float area_filament_cross_section = static_cast(M_PI) * sqr(filament_radius); + const float filament_diameter = (static_cast(m_extruder_id) < m_result.filament_diameters.size()) ? m_result.filament_diameters[m_extruder_id] : m_result.filament_diameters.back(); + const float filament_radius = 0.5f * filament_diameter; + const float area_filament_cross_section = static_cast(M_PI) * sqr(filament_radius); +#if !ENABLE_PROCESS_G2_G3_LINES auto absolute_position = [this, area_filament_cross_section](Axis axis, const GCodeReader::GCodeLine& lineG1) { bool is_relative = (m_global_positioning_type == EPositioningType::Relative); if (axis == E) @@ -2466,6 +2460,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) else return m_start_position[axis]; }; +#endif // !ENABLE_PROCESS_G2_G3_LINES auto move_type = [this](const AxisCoords& delta_pos) { EMoveType type = EMoveType::Noop; @@ -2493,30 +2488,34 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) // updates axes positions from line for (unsigned char a = X; a <= E; ++a) { +#if ENABLE_PROCESS_G2_G3_LINES + m_end_position[a] = extract_absolute_position_on_axis((Axis)a, line, double(area_filament_cross_section)); +#else m_end_position[a] = absolute_position((Axis)a, line); +#endif // ENABLE_PROCESS_G2_G3_LINES } // updates feedrate from line, if present if (line.has_f()) - m_feedrate = line.f() * MMMIN_TO_MMSEC; + m_feedrate = m_feed_multiply.current * line.f() * MMMIN_TO_MMSEC; // calculates movement deltas float max_abs_delta = 0.0f; AxisCoords delta_pos; for (unsigned char a = X; a <= E; ++a) { delta_pos[a] = m_end_position[a] - m_start_position[a]; - max_abs_delta = std::max(max_abs_delta, std::abs(delta_pos[a])); + max_abs_delta = std::max(max_abs_delta, std::abs(delta_pos[a])); } // no displacement, return if (max_abs_delta == 0.0f) return; - EMoveType type = move_type(delta_pos); + const EMoveType type = move_type(delta_pos); if (type == EMoveType::Extrude) { - float delta_xyz = std::sqrt(sqr(delta_pos[X]) + sqr(delta_pos[Y]) + sqr(delta_pos[Z])); - float volume_extruded_filament = area_filament_cross_section * delta_pos[E]; - float area_toolpath_cross_section = volume_extruded_filament / delta_xyz; + const float delta_xyz = std::sqrt(sqr(delta_pos[X]) + sqr(delta_pos[Y]) + sqr(delta_pos[Z])); + const float volume_extruded_filament = area_filament_cross_section * delta_pos[E]; + const float area_toolpath_cross_section = volume_extruded_filament / delta_xyz; // save extruded volume to the cache m_used_filaments.increase_caches(volume_extruded_filament); @@ -2527,12 +2526,25 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) m_mm3_per_mm_compare.update(area_toolpath_cross_section, m_extrusion_role); #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING +#if ENABLE_PROCESS_G2_G3_LINES if (m_forced_height > 0.0f) m_height = m_forced_height; + else if (m_layer_id == 0) + m_height = (m_end_position[Z] <= double(m_first_layer_height)) ? m_end_position[Z] : m_first_layer_height; + else if (line.comment() != INTERNAL_G2G3_TAG){ + if (m_end_position[Z] > m_extruded_last_z + EPSILON && delta_pos[Z] == 0.0) + m_height = m_end_position[Z] - m_extruded_last_z; + } +#else + if (m_forced_height > 0.0f) + m_height = m_forced_height; + else if (m_layer_id == 0) + m_height = (m_end_position[Z] <= double(m_first_layer_height)) ? m_end_position[Z] : m_first_layer_height; else { if (m_end_position[Z] > m_extruded_last_z + EPSILON) m_height = m_end_position[Z] - m_extruded_last_z; } +#endif // ENABLE_PROCESS_G2_G3_LINES if (m_height == 0.0f) m_height = DEFAULT_TOOLPATH_HEIGHT; @@ -2540,7 +2552,10 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) if (m_end_position[Z] == 0.0f) m_end_position[Z] = m_height; - m_extruded_last_z = m_end_position[Z]; +#if ENABLE_PROCESS_G2_G3_LINES + if (line.comment() != INTERNAL_G2G3_TAG) +#endif // ENABLE_PROCESS_G2_G3_LINES + m_extruded_last_z = m_end_position[Z]; m_options_z_corrector.update(m_height); #if ENABLE_GCODE_VIEWER_DATA_CHECKING @@ -2580,9 +2595,9 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) return delta_pos[X] == 0.0f && delta_pos[Y] == 0.0f && delta_pos[Z] == 0.0f && delta_pos[E] != 0.0f; }; - float distance = move_length(delta_pos); + const float distance = move_length(delta_pos); assert(distance != 0.0f); - float inv_distance = 1.0f / distance; + const float inv_distance = 1.0f / distance; for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { TimeMachine& machine = m_time_processor.machines[i]; @@ -2613,9 +2628,9 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) curr.abs_axis_feedrate[a] = std::abs(curr.axis_feedrate[a]); if (curr.abs_axis_feedrate[a] != 0.0f) { - float axis_max_feedrate = get_axis_max_feedrate(static_cast(i), static_cast(a)); + const float axis_max_feedrate = get_axis_max_feedrate(static_cast(i), static_cast(a)); if (axis_max_feedrate != 0.0f) - min_feedrate_factor = std::min(min_feedrate_factor, axis_max_feedrate / curr.abs_axis_feedrate[a]); + min_feedrate_factor = std::min(min_feedrate_factor, axis_max_feedrate / curr.abs_axis_feedrate[a]); } } @@ -2636,7 +2651,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) get_acceleration(static_cast(i))); for (unsigned char a = X; a <= E; ++a) { - float axis_max_acceleration = get_axis_max_acceleration(static_cast(i), static_cast(a)); + const float axis_max_acceleration = get_axis_max_acceleration(static_cast(i), static_cast(a)); if (acceleration * std::abs(delta_pos[a]) * inv_distance > axis_max_acceleration) acceleration = axis_max_acceleration; } @@ -2647,7 +2662,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) curr.safe_feedrate = block.feedrate_profile.cruise; for (unsigned char a = X; a <= E; ++a) { - float axis_max_jerk = get_axis_max_jerk(static_cast(i), static_cast(a)); + const float axis_max_jerk = get_axis_max_jerk(static_cast(i), static_cast(a)); if (curr.abs_axis_feedrate[a] > axis_max_jerk) curr.safe_feedrate = std::min(curr.safe_feedrate, axis_max_jerk); } @@ -2681,7 +2696,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) } // Calculate the jerk depending on whether the axis is coasting in the same direction or reversing a direction. - float jerk = + const float jerk = (v_exit > v_entry) ? ((v_entry > 0.0f || v_exit < 0.0f) ? // coasting @@ -2695,7 +2710,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) // axis reversal std::max(-v_exit, v_entry)); - float axis_max_jerk = get_axis_max_jerk(static_cast(i), static_cast(a)); + const float axis_max_jerk = get_axis_max_jerk(static_cast(i), static_cast(a)); if (jerk > axis_max_jerk) { v_factor *= axis_max_jerk / jerk; limited = true; @@ -2707,14 +2722,14 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) // Now the transition velocity is known, which maximizes the shared exit / entry velocity while // respecting the jerk factors, it may be possible, that applying separate safe exit / entry velocities will achieve faster prints. - float vmax_junction_threshold = vmax_junction * 0.99f; + const float vmax_junction_threshold = vmax_junction * 0.99f; // Not coasting. The machine will stop and start the movements anyway, better to start the segment from start. if (prev.safe_feedrate > vmax_junction_threshold && curr.safe_feedrate > vmax_junction_threshold) vmax_junction = curr.safe_feedrate; } - float v_allowable = max_allowable_speed(-acceleration, curr.safe_feedrate, block.distance); + const float v_allowable = max_allowable_speed(-acceleration, curr.safe_feedrate, block.distance); block.feedrate_profile.entry = std::min(vmax_junction, v_allowable); block.max_entry_speed = vmax_junction; @@ -2750,11 +2765,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) // the threshold value = 0.0625f == 0.25 * 0.25 is arbitrary, we may find some smarter condition later if ((new_pos - *first_vertex).squaredNorm() < 0.0625f) { -#if ENABLE_Z_OFFSET_CORRECTION set_end_position(0.5f * (new_pos + *first_vertex) + m_z_offset * Vec3f::UnitZ()); -#else - set_end_position(0.5f * (new_pos + *first_vertex)); -#endif // ENABLE_Z_OFFSET_CORRECTION store_move_vertex(EMoveType::Seam); set_end_position(curr_pos); } @@ -2767,15 +2778,221 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) m_seams_detector.set_first_vertex(m_result.moves.back().position - m_extruder_offsets[m_extruder_id]); } -#if ENABLE_SPIRAL_VASE_LAYERS if (m_spiral_vase_active && !m_result.spiral_vase_layers.empty() && !m_result.moves.empty()) m_result.spiral_vase_layers.back().second.second = m_result.moves.size() - 1; -#endif // ENABLE_SPIRAL_VASE_LAYERS // store move +#if ENABLE_PROCESS_G2_G3_LINES + store_move_vertex(type, line.comment() == INTERNAL_G2G3_TAG); +#else store_move_vertex(type); +#endif // ENABLE_PROCESS_G2_G3_LINES } +#if ENABLE_PROCESS_G2_G3_LINES +void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line, bool clockwise) +{ + if (!line.has('X') || !line.has('Y') || !line.has('I') || !line.has('J')) + return; + + // relative center + Vec3f rel_center = Vec3f::Zero(); + if (!line.has_value('I', rel_center.x()) || !line.has_value('J', rel_center.y())) + return; + + // scale center, if needed + if (m_units == EUnits::Inches) + rel_center *= INCHES_TO_MM; + + struct Arc + { + Vec3d start{ Vec3d::Zero() }; + Vec3d end{ Vec3d::Zero() }; + Vec3d center{ Vec3d::Zero() }; + + double angle{ 0.0 }; + double delta_x() const { return end.x() - start.x(); } + double delta_y() const { return end.y() - start.y(); } + double delta_z() const { return end.z() - start.z(); } + + double length() const { return angle * start_radius(); } + double travel_length() const { return std::sqrt(sqr(length() + sqr(delta_z()))); } + double start_radius() const { return (start - center).norm(); } + double end_radius() const { return (end - center).norm(); } + + Vec3d relative_start() const { return start - center; } + Vec3d relative_end() const { return end - center; } + + bool closed() const { return end.isApprox(start); } + }; + + Arc arc; + + // arc start endpoint + arc.start = Vec3d(m_start_position[X], m_start_position[Y], m_start_position[Z]); + + // arc center + arc.center = arc.start + rel_center.cast(); + + const float filament_diameter = (static_cast(m_extruder_id) < m_result.filament_diameters.size()) ? m_result.filament_diameters[m_extruder_id] : m_result.filament_diameters.back(); + const float filament_radius = 0.5f * filament_diameter; + const float area_filament_cross_section = static_cast(M_PI) * sqr(filament_radius); + + AxisCoords end_position = m_start_position; + for (unsigned char a = X; a <= E; ++a) { + end_position[a] = extract_absolute_position_on_axis((Axis)a, line, double(area_filament_cross_section)); + } + + // arc end endpoint + arc.end = Vec3d(end_position[X], end_position[Y], end_position[Z]); + + // radii + if (std::abs(arc.end_radius() - arc.start_radius()) > EPSILON) { + // what to do ??? + } + + // updates feedrate from line + std::optional feedrate; + if (line.has_f()) + feedrate = m_feed_multiply.current * line.f() * MMMIN_TO_MMSEC; + + // updates extrusion from line + std::optional extrusion; + if (line.has_e()) + extrusion = end_position[E] - m_start_position[E]; + + // relative arc endpoints + const Vec3d rel_arc_start = arc.relative_start(); + const Vec3d rel_arc_end = arc.relative_end(); + + // arc angle + if (arc.closed()) + arc.angle = 2.0 * PI; + else { + arc.angle = std::atan2(rel_arc_start.x() * rel_arc_end.y() - rel_arc_start.y() * rel_arc_end.x(), + rel_arc_start.x() * rel_arc_end.x() + rel_arc_start.y() * rel_arc_end.y()); + if (arc.angle < 0.0) + arc.angle += 2.0 * PI; + if (clockwise) + arc.angle -= 2.0 * PI; + } + + const double travel_length = arc.travel_length(); + if (travel_length < 0.001) + return; + + auto adjust_target = [this, area_filament_cross_section](const AxisCoords& target, const AxisCoords& prev_position) { + AxisCoords ret = target; + if (m_global_positioning_type == EPositioningType::Relative) { + for (unsigned char a = X; a <= E; ++a) { + ret[a] -= prev_position[a]; + } + } + else if (m_e_local_positioning_type == EPositioningType::Relative) + ret[E] -= prev_position[E]; + + if (m_use_volumetric_e) + ret[E] *= area_filament_cross_section; + + const double lengthsScaleFactor = (m_units == EUnits::Inches) ? double(INCHES_TO_MM) : 1.0; + for (unsigned char a = X; a <= E; ++a) { + ret[a] /= lengthsScaleFactor; + } + return ret; + }; + + auto internal_only_g1_line = [](const AxisCoords& target, bool has_z, const std::optional& feedrate, const std::optional& extrusion) { + std::string ret = (boost::format("G1 X%1% Y%2%") % target[X] % target[Y]).str(); + if (has_z) + ret += (boost::format(" Z%1%") % target[Z]).str(); + if (feedrate.has_value()) + ret += (boost::format(" F%1%") % *feedrate).str(); + if (extrusion.has_value()) + ret += (boost::format(" E%1%") % target[E]).str(); + + ret += (boost::format(" ;%1%\n") % INTERNAL_G2G3_TAG).str(); + + return ret; + }; + + // calculate arc segments + // reference: + // Prusa-Firmware\Firmware\motion_control.cpp - mc_arc() + + // segments count + static const double MM_PER_ARC_SEGMENT = 1.0; + const size_t segments = std::max(std::floor(travel_length / MM_PER_ARC_SEGMENT), 1); + + const double theta_per_segment = arc.angle / double(segments); + const double z_per_segment = arc.delta_z() / double(segments); + const double extruder_per_segment = (extrusion.has_value()) ? *extrusion / double(segments) : 0.0; + + double cos_T = 1.0 - 0.5 * sqr(theta_per_segment); // Small angle approximation + double sin_T = theta_per_segment; + + AxisCoords prev_target = m_start_position; + AxisCoords arc_target; + double sin_Ti; + double cos_Ti; + double r_axisi; + size_t count = 0; + + // Initialize the linear axis + arc_target[Z] = m_start_position[Z]; + + // Initialize the extruder axis + arc_target[E] = m_start_position[E]; + + static const size_t N_ARC_CORRECTION = 25; + + Vec3d curr_rel_arc_start = arc.relative_start(); + + std::string gcode; + + for (size_t i = 1; i < segments; ++i) { // Increment (segments-1) + if (count < N_ARC_CORRECTION) { + // Apply vector rotation matrix + r_axisi = curr_rel_arc_start.x() * sin_T + curr_rel_arc_start.y() * cos_T; + curr_rel_arc_start.x() = curr_rel_arc_start.x() * cos_T - curr_rel_arc_start.y() * sin_T; + curr_rel_arc_start.y() = r_axisi; + count++; + } + else { + // Arc correction to radius vector. Computed only every N_ARC_CORRECTION increments. + // Compute exact location by applying transformation matrix from initial radius vector(=-offset). + cos_Ti = ::cos(double(i) * theta_per_segment); + sin_Ti = ::sin(double(i) * theta_per_segment); + curr_rel_arc_start.x() = -double(rel_center.x()) * cos_Ti + double(rel_center.y()) * sin_Ti; + curr_rel_arc_start.y() = -double(rel_center.x()) * sin_Ti - double(rel_center.y()) * cos_Ti; + count = 0; + } + + // Update arc_target location + arc_target[X] = arc.center.x() + curr_rel_arc_start.x(); + arc_target[Y] = arc.center.y() + curr_rel_arc_start.y(); + arc_target[Z] += z_per_segment; + arc_target[E] += extruder_per_segment; + + gcode += internal_only_g1_line(adjust_target(arc_target, prev_target), z_per_segment != 0.0, feedrate, extrusion); + prev_target = arc_target; + + // feedrate is constant, we do not need to repeat it + feedrate.reset(); + } + + // Ensure last segment arrives at target location. + gcode += internal_only_g1_line(adjust_target(end_position, prev_target), arc.delta_z() != 0.0, feedrate, extrusion); + + // process fake gcode lines + GCodeReader parser; + parser.parse_buffer(gcode, [this](GCodeReader&, const GCodeReader::GCodeLine& line) { + // force all lines to share the same id + --m_line_id; + process_gcode_line(line, false); + }); +} +#endif // ENABLE_PROCESS_G2_G3_LINES + void GCodeProcessor::process_G10(const GCodeReader::GCodeLine& line) { // stores retract move @@ -2863,7 +3080,7 @@ void GCodeProcessor::process_G61(const GCodeReader::GCodeLine& line) modified = true; } if (line.has_f()) - m_feedrate = line.f(); + m_feedrate = m_feed_multiply.current * line.f(); if (!modified) m_end_position = m_saved_position; @@ -3136,6 +3353,20 @@ void GCodeProcessor::process_M205(const GCodeReader::GCodeLine& line) } } +void GCodeProcessor::process_M220(const GCodeReader::GCodeLine& line) +{ + if (m_flavor != gcfMarlinLegacy && m_flavor != gcfMarlinFirmware) + return; + + if (line.has('B')) + m_feed_multiply.saved = m_feed_multiply.current; + float value; + if (line.has_value('S', value)) + m_feed_multiply.current = value * 0.01f; + if (line.has('R')) + m_feed_multiply.current = m_feed_multiply.saved; +} + void GCodeProcessor::process_M221(const GCodeReader::GCodeLine& line) { float value_s; @@ -3262,7 +3493,11 @@ void GCodeProcessor::process_T(const std::string_view command) } } +#if ENABLE_PROCESS_G2_G3_LINES +void GCodeProcessor::store_move_vertex(EMoveType type, bool internal_only) +#else void GCodeProcessor::store_move_vertex(EMoveType type) +#endif // ENABLE_PROCESS_G2_G3_LINES { m_last_line_id = (type == EMoveType::Color_change || type == EMoveType::Pause_Print || type == EMoveType::Custom_GCode) ? m_line_id + 1 : @@ -3274,19 +3509,20 @@ void GCodeProcessor::store_move_vertex(EMoveType type) m_extrusion_role, m_extruder_id, m_cp_color.current, -#if ENABLE_Z_OFFSET_CORRECTION - Vec3f(m_end_position[X], m_end_position[Y], m_processing_start_custom_gcode ? m_first_layer_height : m_end_position[Z] - m_z_offset) + m_extruder_offsets[m_extruder_id], -#else - Vec3f(m_end_position[X], m_end_position[Y], m_processing_start_custom_gcode ? m_first_layer_height : m_end_position[Z]) + m_extruder_offsets[m_extruder_id], -#endif // ENABLE_Z_OFFSET_CORRECTION - m_end_position[E] - m_start_position[E], + Vec3f(m_end_position[X], m_end_position[Y], m_end_position[Z] - m_z_offset) + m_extruder_offsets[m_extruder_id], + static_cast(m_end_position[E] - m_start_position[E]), m_feedrate, m_width, m_height, m_mm3_per_mm, m_fan_speed, m_extruder_temps[m_extruder_id], +#if ENABLE_PROCESS_G2_G3_LINES + static_cast(m_result.moves.size()), + internal_only +#else static_cast(m_result.moves.size()) +#endif // ENABLE_PROCESS_G2_G3_LINES }); // stores stop time placeholders for later use @@ -3483,5 +3719,24 @@ void GCodeProcessor::update_estimated_times_stats() m_result.print_statistics.used_filaments_per_role = m_used_filaments.filaments_per_role; } +#if ENABLE_PROCESS_G2_G3_LINES +double GCodeProcessor::extract_absolute_position_on_axis(Axis axis, const GCodeReader::GCodeLine& line, double area_filament_cross_section) +{ + if (line.has(Slic3r::Axis(axis))) { + bool is_relative = (m_global_positioning_type == EPositioningType::Relative); + if (axis == E) + is_relative |= (m_e_local_positioning_type == EPositioningType::Relative); + + const double lengthsScaleFactor = (m_units == EUnits::Inches) ? double(INCHES_TO_MM) : 1.0; + double ret = line.value(Slic3r::Axis(axis)) * lengthsScaleFactor; + if (axis == E && m_use_volumetric_e) + ret /= area_filament_cross_section; + return is_relative ? m_start_position[axis] + ret : m_origin[axis] + ret; + } + else + return m_start_position[axis]; +} +#endif // ENABLE_PROCESS_G2_G3_LINES + } /* namespace Slic3r */ diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 153f4a9c5..1ef414c3f 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -113,6 +113,9 @@ namespace Slic3r { float fan_speed{ 0.0f }; // percentage float temperature{ 0.0f }; // Celsius degrees float time{ 0.0f }; // s +#if ENABLE_PROCESS_G2_G3_LINES + bool internal_only{ false }; +#endif // ENABLE_PROCESS_G2_G3_LINES float volumetric_rate() const { return feedrate * mm3_per_mm; } }; @@ -131,9 +134,7 @@ namespace Slic3r { std::vector filament_densities; PrintEstimatedStatistics print_statistics; std::vector custom_gcode_per_print_z; -#if ENABLE_SPIRAL_VASE_LAYERS std::vector>> spiral_vase_layers; -#endif // ENABLE_SPIRAL_VASE_LAYERS #if ENABLE_GCODE_VIEWER_STATISTICS int64_t time{ 0 }; @@ -178,7 +179,7 @@ namespace Slic3r { #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING private: - using AxisCoords = std::array; + using AxisCoords = std::array; using ExtruderColors = std::vector; using ExtruderTemps = std::vector; @@ -525,22 +526,30 @@ namespace Slic3r { unsigned int m_line_id; unsigned int m_last_line_id; float m_feedrate; // mm/s + struct FeedMultiply + { + float current; // percentage + float saved; // percentage + + void reset() { + current = 1.0f; + saved = 1.0f; + } + }; + FeedMultiply m_feed_multiply; float m_width; // mm float m_height; // mm float m_forced_width; // mm float m_forced_height; // mm float m_mm3_per_mm; float m_fan_speed; // percentage -#if ENABLE_Z_OFFSET_CORRECTION float m_z_offset; // mm -#endif // ENABLE_Z_OFFSET_CORRECTION ExtrusionRole m_extrusion_role; unsigned char m_extruder_id; ExtruderColors m_extruder_colors; ExtruderTemps m_extruder_temps; float m_extruded_last_z; float m_first_layer_height; // mm - bool m_processing_start_custom_gcode; unsigned int m_g1_line_id; unsigned int m_layer_id; CpColor m_cp_color; @@ -548,9 +557,7 @@ namespace Slic3r { SeamsDetector m_seams_detector; OptionsZCorrector m_options_z_corrector; size_t m_last_default_color_id; -#if ENABLE_SPIRAL_VASE_LAYERS bool m_spiral_vase_active; -#endif // ENABLE_SPIRAL_VASE_LAYERS #if ENABLE_GCODE_VIEWER_STATISTICS std::chrono::time_point m_start_time; #endif // ENABLE_GCODE_VIEWER_STATISTICS @@ -641,6 +648,11 @@ namespace Slic3r { void process_G0(const GCodeReader::GCodeLine& line); void process_G1(const GCodeReader::GCodeLine& line); +#if ENABLE_PROCESS_G2_G3_LINES + // Arc Move + void process_G2_G3(const GCodeReader::GCodeLine& line, bool clockwise); +#endif // ENABLE_PROCESS_G2_G3_LINES + // Retract void process_G10(const GCodeReader::GCodeLine& line); @@ -719,6 +731,9 @@ namespace Slic3r { // Advanced settings void process_M205(const GCodeReader::GCodeLine& line); + // Set Feedrate Percentage + void process_M220(const GCodeReader::GCodeLine& line); + // Set extrude factor override percentage void process_M221(const GCodeReader::GCodeLine& line); @@ -738,7 +753,11 @@ namespace Slic3r { void process_T(const GCodeReader::GCodeLine& line); void process_T(const std::string_view command); +#if ENABLE_PROCESS_G2_G3_LINES + void store_move_vertex(EMoveType type, bool internal_only = false); +#else void store_move_vertex(EMoveType type); +#endif // ENABLE_PROCESS_G2_G3_LINES void set_extrusion_role(ExtrusionRole role); @@ -763,6 +782,10 @@ namespace Slic3r { void simulate_st_synchronize(float additional_time = 0.0f); void update_estimated_times_stats(); + +#if ENABLE_PROCESS_G2_G3_LINES + double extract_absolute_position_on_axis(Axis axis, const GCodeReader::GCodeLine& line, double area_filament_cross_section); +#endif // ENABLE_PROCESS_G2_G3_LINES }; } /* namespace Slic3r */ diff --git a/src/libslic3r/GCode/Thumbnails.cpp b/src/libslic3r/GCode/Thumbnails.cpp new file mode 100644 index 000000000..8d70539b7 --- /dev/null +++ b/src/libslic3r/GCode/Thumbnails.cpp @@ -0,0 +1,119 @@ +#include "Thumbnails.hpp" +#include "../miniz_extension.hpp" + +#include +#include +#include + +namespace Slic3r::GCodeThumbnails { + +using namespace std::literals; + +struct CompressedPNG : CompressedImageBuffer +{ + ~CompressedPNG() override { if (data) mz_free(data); } + std::string_view tag() const override { return "thumbnail"sv; } +}; + +struct CompressedJPG : CompressedImageBuffer +{ + ~CompressedJPG() override { free(data); } + std::string_view tag() const override { return "thumbnail_JPG"sv; } +}; + +struct CompressedQOI : CompressedImageBuffer +{ + ~CompressedQOI() override { free(data); } + std::string_view tag() const override { return "thumbnail_QOI"sv; } +}; + +std::unique_ptr compress_thumbnail_png(const ThumbnailData &data) +{ + auto out = std::make_unique(); + out->data = tdefl_write_image_to_png_file_in_memory_ex((const void*)data.pixels.data(), data.width, data.height, 4, &out->size, MZ_DEFAULT_LEVEL, 1); + return out; +} + +std::unique_ptr compress_thumbnail_jpg(const ThumbnailData& data) +{ + // Take vector of RGBA pixels and flip the image vertically + std::vector rgba_pixels(data.pixels.size()); + const unsigned int row_size = data.width * 4; + for (unsigned int y = 0; y < data.height; ++y) { + ::memcpy(rgba_pixels.data() + (data.height - y - 1) * row_size, data.pixels.data() + y * row_size, row_size); + } + + // Store pointers to scanlines start for later use + std::vector rows_ptrs; + rows_ptrs.reserve(data.height); + for (unsigned int y = 0; y < data.height; ++y) { + rows_ptrs.emplace_back(&rgba_pixels[y * row_size]); + } + + std::vector compressed_data(data.pixels.size()); + unsigned char* compressed_data_ptr = compressed_data.data(); + unsigned long compressed_data_size = data.pixels.size(); + + jpeg_error_mgr err; + jpeg_compress_struct info; + info.err = jpeg_std_error(&err); + jpeg_create_compress(&info); + jpeg_mem_dest(&info, &compressed_data_ptr, &compressed_data_size); + + info.image_width = data.width; + info.image_height = data.height; + info.input_components = 4; + info.in_color_space = JCS_EXT_RGBA; + + jpeg_set_defaults(&info); + jpeg_set_quality(&info, 85, TRUE); + jpeg_start_compress(&info, TRUE); + + jpeg_write_scanlines(&info, rows_ptrs.data(), data.height); + jpeg_finish_compress(&info); + jpeg_destroy_compress(&info); + + // FIXME -> Add error checking + + auto out = std::make_unique(); + out->data = malloc(compressed_data_size); + out->size = size_t(compressed_data_size); + ::memcpy(out->data, (const void*)compressed_data.data(), out->size); + return out; +} + +std::unique_ptr compress_thumbnail_qoi(const ThumbnailData &data) +{ + qoi_desc desc; + desc.width = data.width; + desc.height = data.height; + desc.channels = 4; + desc.colorspace = QOI_SRGB; + + // Take vector of RGBA pixels and flip the image vertically + std::vector rgba_pixels(data.pixels.size() * 4); + size_t row_size = data.width * 4; + for (size_t y = 0; y < data.height; ++ y) + memcpy(rgba_pixels.data() + (data.height - y - 1) * row_size, data.pixels.data() + y * row_size, row_size); + + auto out = std::make_unique(); + int size; + out->data = qoi_encode((const void*)rgba_pixels.data(), &desc, &size); + out->size = size; + return out; +} + +std::unique_ptr compress_thumbnail(const ThumbnailData &data, GCodeThumbnailsFormat format) +{ + switch (format) { + case GCodeThumbnailsFormat::PNG: + default: + return compress_thumbnail_png(data); + case GCodeThumbnailsFormat::JPG: + return compress_thumbnail_jpg(data); + case GCodeThumbnailsFormat::QOI: + return compress_thumbnail_qoi(data); + } +} + +} // namespace Slic3r::GCodeThumbnails diff --git a/src/libslic3r/GCode/Thumbnails.hpp b/src/libslic3r/GCode/Thumbnails.hpp new file mode 100644 index 000000000..30bb6b653 --- /dev/null +++ b/src/libslic3r/GCode/Thumbnails.hpp @@ -0,0 +1,60 @@ +#ifndef slic3r_GCodeThumbnails_hpp_ +#define slic3r_GCodeThumbnails_hpp_ + +#include "../Point.hpp" +#include "../PrintConfig.hpp" +#include "ThumbnailData.hpp" + +#include +#include +#include + +#include + +namespace Slic3r::GCodeThumbnails { + +struct CompressedImageBuffer +{ + void *data { nullptr }; + size_t size { 0 }; + virtual ~CompressedImageBuffer() {} + virtual std::string_view tag() const = 0; +}; + +std::unique_ptr compress_thumbnail(const ThumbnailData &data, GCodeThumbnailsFormat format); + +template +inline void export_thumbnails_to_file(ThumbnailsGeneratorCallback &thumbnail_cb, const std::vector &sizes, GCodeThumbnailsFormat format, WriteToOutput output, ThrowIfCanceledCallback throw_if_canceled) +{ + // Write thumbnails using base64 encoding + if (thumbnail_cb != nullptr) { + static constexpr const size_t max_row_length = 78; + ThumbnailsList thumbnails = thumbnail_cb(ThumbnailsParams{ sizes, true, true, true, true }); + for (const ThumbnailData& data : thumbnails) + if (data.is_valid()) { + auto compressed = compress_thumbnail(data, format); + if (compressed->data && compressed->size) { + std::string encoded; + encoded.resize(boost::beast::detail::base64::encoded_size(compressed->size)); + encoded.resize(boost::beast::detail::base64::encode((void*)encoded.data(), (const void*)compressed->data, compressed->size)); + + output((boost::format("\n;\n; %s begin %dx%d %d\n") % compressed->tag() % data.width % data.height % encoded.size()).str().c_str()); + + while (encoded.size() > max_row_length) { + output((boost::format("; %s\n") % encoded.substr(0, max_row_length)).str().c_str()); + encoded = encoded.substr(max_row_length); + } + + if (encoded.size() > 0) + output((boost::format("; %s\n") % encoded).str().c_str()); + + output((boost::format("; %s end\n;\n") % compressed->tag()).str().c_str()); + } + throw_if_canceled(); + } + } +} + +} // namespace Slic3r::GCodeThumbnails + +#endif // slic3r_GCodeThumbnails_hpp_ diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 9dc9f3f96..870096bb9 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -74,7 +74,7 @@ static double calc_max_layer_height(const PrintConfig &config, double max_object { double max_layer_height = std::numeric_limits::max(); for (size_t i = 0; i < config.nozzle_diameter.values.size(); ++ i) { - double mlh = config.max_layer_height.values[i]; + double mlh = config.max_layer_height.get_at(i); if (mlh == 0.) mlh = 0.75 * config.nozzle_diameter.values[i]; max_layer_height = std::min(max_layer_height, mlh); diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 577ce9e34..33d3960d8 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -1180,7 +1180,7 @@ WipeTower::ToolChangeResult WipeTower::finish_layer() // Ask our writer about how much material was consumed. // Skip this in case the layer is sparse and config option to not print sparse layers is enabled. - if (! m_no_sparse_layers || toolchanges_on_layer) + if (! m_no_sparse_layers || toolchanges_on_layer || first_layer) if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); @@ -1196,7 +1196,7 @@ void WipeTower::plan_toolchange(float z_par, float layer_height_par, unsigned in if (m_plan.empty() || m_plan.back().z + WT_EPSILON < z_par) // if we moved to a new layer, we'll add it to m_plan first m_plan.push_back(WipeTowerInfo(z_par, layer_height_par)); - if (m_first_layer_idx == size_t(-1) && (! m_no_sparse_layers || old_tool != new_tool)) + if (m_first_layer_idx == size_t(-1) && (! m_no_sparse_layers || old_tool != new_tool || m_plan.size() == 1)) m_first_layer_idx = m_plan.size() - 1; if (old_tool == new_tool) // new layer without toolchanges - we are done diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index 233976b19..c5279c0f5 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -79,7 +79,7 @@ std::string GCodeWriter::postamble() const std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, int tool) const { if (wait && (FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish))) - return ""; + return {}; std::string code, comment; if (wait && FLAVOR_IS_NOT(gcfTeacup) && FLAVOR_IS_NOT(gcfRepRapFirmware)) { @@ -192,32 +192,18 @@ std::string GCodeWriter::set_acceleration(unsigned int acceleration) std::string GCodeWriter::reset_e(bool force) { - if (FLAVOR_IS(gcfMach3) - || FLAVOR_IS(gcfMakerWare) - || FLAVOR_IS(gcfSailfish)) - return ""; - - if (m_extruder != nullptr) { - if (m_extruder->E() == 0. && ! force) - return ""; - m_extruder->reset_E(); - } - - if (! m_extrusion_axis.empty() && ! this->config.use_relative_e_distances) { - std::ostringstream gcode; - gcode << "G92 " << m_extrusion_axis << "0"; - if (this->config.gcode_comments) gcode << " ; reset extrusion distance"; - gcode << "\n"; - return gcode.str(); - } else { - return ""; - } + return + FLAVOR_IS(gcfMach3) || FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish) || this->config.use_relative_e_distances || + (m_extruder != nullptr && ! m_extruder->reset_E() && ! force) || + m_extrusion_axis.empty() ? + std::string{} : + std::string("G92 ") + m_extrusion_axis + (this->config.gcode_comments ? "0 ; reset extrusion distance\n" : "0\n"); } std::string GCodeWriter::update_progress(unsigned int num, unsigned int tot, bool allow_100) const { if (FLAVOR_IS_NOT(gcfMakerWare) && FLAVOR_IS_NOT(gcfSailfish)) - return ""; + return {}; unsigned int percent = (unsigned int)floor(100.0 * num / tot + 0.5); if (!allow_100) percent = std::min(percent, (unsigned int)99); @@ -269,8 +255,8 @@ std::string GCodeWriter::set_speed(double F, const std::string &comment, const s std::string GCodeWriter::travel_to_xy(const Vec2d &point, const std::string &comment) { - m_pos(0) = point(0); - m_pos(1) = point(1); + m_pos.x() = point.x(); + m_pos.y() = point.y(); GCodeG1Formatter w; w.emit_xy(point); @@ -290,9 +276,9 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co don't perform the Z move but we only move in the XY plane and adjust the nominal Z by reducing the lift amount that will be used for unlift. */ - if (!this->will_move_z(point(2))) { - double nominal_z = m_pos(2) - m_lifted; - m_lifted -= (point(2) - nominal_z); + if (!this->will_move_z(point.z())) { + double nominal_z = m_pos.z() - m_lifted; + m_lifted -= (point.z() - nominal_z); // In case that retract_lift == layer_height we could end up with almost zero in_m_lifted // and a retract could be skipped (https://github.com/prusa3d/PrusaSlicer/issues/2154 if (std::abs(m_lifted) < EPSILON) @@ -318,11 +304,11 @@ std::string GCodeWriter::travel_to_z(double z, const std::string &comment) we don't perform the move but we only adjust the nominal Z by reducing the lift amount that will be used for unlift. */ if (!this->will_move_z(z)) { - double nominal_z = m_pos(2) - m_lifted; + double nominal_z = m_pos.z() - m_lifted; m_lifted -= (z - nominal_z); if (std::abs(m_lifted) < EPSILON) m_lifted = 0.; - return ""; + return {}; } /* In all the other cases, we perform an actual Z move and cancel @@ -333,7 +319,7 @@ std::string GCodeWriter::travel_to_z(double z, const std::string &comment) std::string GCodeWriter::_travel_to_z(double z, const std::string &comment) { - m_pos(2) = z; + m_pos.z() = z; double speed = this->config.travel_speed_z.value; if (speed == 0.) @@ -351,8 +337,8 @@ bool GCodeWriter::will_move_z(double z) const /* If target Z is lower than current Z but higher than nominal Z we don't perform an actual Z move. */ if (m_lifted > 0) { - double nominal_z = m_pos(2) - m_lifted; - if (z >= nominal_z && z <= m_pos(2)) + double nominal_z = m_pos.z() - m_lifted; + if (z >= nominal_z && z <= m_pos.z()) return false; } return true; @@ -360,17 +346,17 @@ bool GCodeWriter::will_move_z(double z) const std::string GCodeWriter::extrude_to_xy(const Vec2d &point, double dE, const std::string &comment) { - m_pos(0) = point(0); - m_pos(1) = point(1); - m_extruder->extrude(dE); + m_pos.x() = point.x(); + m_pos.y() = point.y(); GCodeG1Formatter w; w.emit_xy(point); - w.emit_e(m_extrusion_axis, m_extruder->E()); + w.emit_e(m_extrusion_axis, m_extruder->extrude(dE).second); w.emit_comment(this->config.gcode_comments, comment); return w.string(); } +#if 0 std::string GCodeWriter::extrude_to_xyz(const Vec3d &point, double dE, const std::string &comment) { m_pos = point; @@ -383,6 +369,7 @@ std::string GCodeWriter::extrude_to_xyz(const Vec3d &point, double dE, const std w.emit_comment(this->config.gcode_comments, comment); return w.string(); } +#endif std::string GCodeWriter::retract(bool before_wipe) { @@ -422,14 +409,13 @@ std::string GCodeWriter::_retract(double length, double restart_extra, const std restart_extra = restart_extra * area; } - std::string gcode; - if (double dE = m_extruder->retract(length, restart_extra); dE != 0) { + if (auto [dE, emitE] = m_extruder->retract(length, restart_extra); dE != 0) { if (this->config.use_firmware_retraction) { gcode = FLAVOR_IS(gcfMachinekit) ? "G22 ; retract\n" : "G10 ; retract\n"; } else if (! m_extrusion_axis.empty()) { GCodeG1Formatter w; - w.emit_e(m_extrusion_axis, m_extruder->E()); + w.emit_e(m_extrusion_axis, emitE); w.emit_f(m_extruder->retract_speed() * 60.); w.emit_comment(this->config.gcode_comments, comment); gcode = w.string(); @@ -449,14 +435,14 @@ std::string GCodeWriter::unretract() if (FLAVOR_IS(gcfMakerWare)) gcode = "M101 ; extruder on\n"; - if (double dE = m_extruder->unretract(); dE != 0) { + if (auto [dE, emitE] = m_extruder->unretract(); dE != 0) { if (this->config.use_firmware_retraction) { gcode += FLAVOR_IS(gcfMachinekit) ? "G23 ; unretract\n" : "G11 ; unretract\n"; gcode += this->reset_e(); } else if (! m_extrusion_axis.empty()) { // use G1 instead of G0 because G0 will blend the restart with the previous travel move GCodeG1Formatter w; - w.emit_e(m_extrusion_axis, m_extruder->E()); + w.emit_e(m_extrusion_axis, emitE); w.emit_f(m_extruder->deretract_speed() * 60.); w.emit_comment(this->config.gcode_comments, " ; unretract"); gcode += w.string(); @@ -476,21 +462,21 @@ std::string GCodeWriter::lift() { double above = this->config.retract_lift_above.get_at(m_extruder->id()); double below = this->config.retract_lift_below.get_at(m_extruder->id()); - if (m_pos(2) >= above && (below == 0 || m_pos(2) <= below)) + if (m_pos.z() >= above && (below == 0 || m_pos.z() <= below)) target_lift = this->config.retract_lift.get_at(m_extruder->id()); } if (m_lifted == 0 && target_lift > 0) { m_lifted = target_lift; - return this->_travel_to_z(m_pos(2) + target_lift, "lift Z"); + return this->_travel_to_z(m_pos.z() + target_lift, "lift Z"); } - return ""; + return {}; } std::string GCodeWriter::unlift() { std::string gcode; if (m_lifted > 0) { - gcode += this->_travel_to_z(m_pos(2) - m_lifted, "restore layer Z"); + gcode += this->_travel_to_z(m_pos.z() - m_lifted, "restore layer Z"); m_lifted = 0; } return gcode; diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index e8a54737e..6c36c0d3a 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -61,7 +61,7 @@ public: std::string travel_to_z(double z, const std::string &comment = std::string()); bool will_move_z(double z) const; std::string extrude_to_xy(const Vec2d &point, double dE, const std::string &comment = std::string()); - std::string extrude_to_xyz(const Vec3d &point, double dE, const std::string &comment = std::string()); +// std::string extrude_to_xyz(const Vec3d &point, double dE, const std::string &comment = std::string()); std::string retract(bool before_wipe = false); std::string retract_for_toolchange(bool before_wipe = false); std::string unretract(); @@ -121,6 +121,14 @@ public: // static constexpr const int E_EXPORT_DIGITS = 9; #endif + static constexpr const std::array pow_10 { 1., 10., 100., 1000., 10000., 100000., 1000000., 10000000., 100000000., 1000000000.}; + static constexpr const std::array pow_10_inv{1./1., 1./10., 1./100., 1./1000., 1./10000., 1./100000., 1./1000000., 1./10000000., 1./100000000., 1./1000000000.}; + + // Quantize doubles to a resolution of the G-code. + static double quantize(double v, size_t ndigits) { return std::round(v * pow_10[ndigits]) * pow_10_inv[ndigits]; } + static double quantize_xyzf(double v) { return quantize(v, XYZF_EXPORT_DIGITS); } + static double quantize_e(double v) { return quantize(v, E_EXPORT_DIGITS); } + void emit_axis(const char axis, const double v, size_t digits); void emit_xy(const Vec2d &point) { diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 0071c7f6e..0fe4952f4 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -18,6 +18,10 @@ class PrintObject; namespace FillAdaptive { struct Octree; +} + +namespace FillLightning { + class Generator; }; class LayerRegion @@ -151,8 +155,8 @@ public: } void make_perimeters(); // Phony version of make_fills() without parameters for Perl integration only. - void make_fills() { this->make_fills(nullptr, nullptr); } - void make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree); + void make_fills() { this->make_fills(nullptr, nullptr, nullptr); } + void make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree, FillLightning::Generator* lightning_generator); void make_ironing(); void export_region_slices_to_svg(const char *path) const; diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 67450fb11..3376cc888 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -903,7 +903,7 @@ indexed_triangle_set ModelObject::raw_indexed_triangle_set() const size_t j = out.indices.size(); append(out.vertices, v->mesh().its.vertices); append(out.indices, v->mesh().its.indices); - auto m = v->get_matrix(); + const Transform3d& m = v->get_matrix(); for (; i < out.vertices.size(); ++ i) out.vertices[i] = (m * out.vertices[i].cast()).cast().eval(); if (v->is_left_handed()) { diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 7a1cf206e..14d063155 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -817,7 +817,7 @@ private: this->set_material_id(other.material_id()); } // Providing a new mesh, therefore this volume will get a new unique ID assigned. - ModelVolume(ModelObject *object, const ModelVolume &other, const TriangleMesh &&mesh) : + ModelVolume(ModelObject *object, const ModelVolume &other, TriangleMesh &&mesh) : name(other.name), source(other.source), m_mesh(new TriangleMesh(std::move(mesh))), config(other.config), m_type(other.m_type), object(object), m_transformation(other.m_transformation) { assert(this->id().valid()); diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index 75537b6c6..9560096be 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -605,7 +605,7 @@ struct MMU_Graph if (arcs[arc_idx].to_idx == to_idx) return; for (const size_t &arc_idx : this->nodes[to_idx].arc_idxs) - if (arcs[arc_idx].to_idx == to_idx) + if (arcs[arc_idx].to_idx == from_idx) return; this->nodes[from_idx].arc_idxs.push_back(this->arcs.size()); @@ -1201,7 +1201,7 @@ static inline double compute_edge_length(const MMU_Graph &graph, const size_t st used_arcs[start_arc_idx] = true; const MMU_Graph::Arc *arc = &graph.arcs[start_arc_idx]; size_t idx = start_idx; - double line_total_length = (graph.nodes[arc->to_idx].point - graph.nodes[idx].point).norm();; + double line_total_length = (graph.nodes[arc->to_idx].point - graph.nodes[idx].point).norm(); while (graph.nodes[arc->to_idx].arc_idxs.size() == 2) { bool found = false; for (const size_t &arc_idx : graph.nodes[arc->to_idx].arc_idxs) { @@ -1711,7 +1711,7 @@ std::vector> multi_material_segmentation_by_painting(con // Such close points sometimes caused that the Voronoi diagram has self-intersecting edges around these vertices. // This consequently leads to issues with the extraction of colored segments by function extract_colored_segments. // Calling expolygons_simplify fixed these issues. - input_expolygons[layer_idx] = smooth_outward(expolygons_simplify(offset_ex(ex_polygons, -10.f * float(SCALED_EPSILON)), 5 * SCALED_EPSILON), 10 * coord_t(SCALED_EPSILON)); + input_expolygons[layer_idx] = remove_duplicates(expolygons_simplify(offset_ex(ex_polygons, -10.f * float(SCALED_EPSILON)), 5 * SCALED_EPSILON), scaled(0.01), PI/6); #ifdef MMU_SEGMENTATION_DEBUG_INPUT { diff --git a/src/libslic3r/MutablePolygon.cpp b/src/libslic3r/MutablePolygon.cpp index 403d625bf..45c74d0a6 100644 --- a/src/libslic3r/MutablePolygon.cpp +++ b/src/libslic3r/MutablePolygon.cpp @@ -37,6 +37,36 @@ void remove_duplicates(MutablePolygon &polygon, double eps) } } +// Remove nearly duplicate points. If a distance between two points is less than scaled_eps +// and if the angle between its surrounding lines is less than max_angle, the point will be removed. +// May reduce the polygon down to empty polygon. +void remove_duplicates(MutablePolygon &polygon, coord_t scaled_eps, const double max_angle) +{ + if (polygon.size() >= 3) { + auto cos_max_angle_2 = Slic3r::sqr(cos(max_angle)); + auto scaled_eps_sqr = Slic3r::sqr(scaled_eps); + auto begin = polygon.begin(); + auto it = begin; + for (++it; it != begin;) { + auto prev = it.prev(); + auto next = it.next(); + Vec2i64 v1 = (*it - *prev).cast(); + int64_t v1_sqr_norm = v1.squaredNorm(); + if (v1_sqr_norm < scaled_eps_sqr) { + if (Vec2i64 v2 = (*next - *prev).cast(); + Slic3r::sqr(double(v1.dot(v2))) > cos_max_angle_2 * double(v1_sqr_norm) * double(v2.squaredNorm())) { + it = it.remove(); + continue; + } + } + it = next; + } + } + + if (polygon.size() < 3) + polygon.clear(); +} + // Adapted from Cura ConstPolygonRef::smooth_corner_complex() by Tim Kuipers. // A concave corner at it1 with position p1 has been removed by the caller between it0 and it2, where |p2 - p0| < shortcut_length. // Now try to close a concave crack by walking left from it0 and right from it2 as long as the new clipping edge is smaller than shortcut_length diff --git a/src/libslic3r/MutablePolygon.hpp b/src/libslic3r/MutablePolygon.hpp index 1b2b4e445..ea41d6fb4 100644 --- a/src/libslic3r/MutablePolygon.hpp +++ b/src/libslic3r/MutablePolygon.hpp @@ -309,6 +309,28 @@ inline bool operator!=(const MutablePolygon &p1, const MutablePolygon &p2) { ret void remove_duplicates(MutablePolygon &polygon); void remove_duplicates(MutablePolygon &polygon, double eps); +// Remove nearly duplicate points. If a distance between two points is less than scaled_eps +// and if the angle between its surrounding lines is less than max_angle, the point will be removed. +// May reduce the polygon down to empty polygon. +void remove_duplicates(MutablePolygon &polygon, coord_t scaled_eps, const double max_angle); +inline ExPolygons remove_duplicates(ExPolygons expolygons, coord_t scaled_eps, double max_angle) +{ + MutablePolygon mp; + for (ExPolygon &expolygon : expolygons) { + mp.assign(expolygon.contour, expolygon.contour.size() * 2); + remove_duplicates(mp, scaled_eps, max_angle); + mp.polygon(expolygon.contour); + for (Polygon &hole : expolygon.holes) { + mp.assign(hole, hole.size() * 2); + remove_duplicates(mp, scaled_eps, max_angle); + mp.polygon(hole); + } + expolygon.holes.erase(std::remove_if(expolygon.holes.begin(), expolygon.holes.end(), [](const auto &p) { return p.empty(); }), expolygon.holes.end()); + } + expolygons.erase(std::remove_if(expolygons.begin(), expolygons.end(), [](const auto &p) { return p.empty(); }), expolygons.end()); + return expolygons; +} + void smooth_outward(MutablePolygon &polygon, coord_t clip_dist_scaled); inline Polygon smooth_outward(Polygon polygon, coord_t clip_dist_scaled) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 51c26209e..01d3c592a 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -8,7 +8,7 @@ namespace Slic3r { -static ExtrusionPaths thick_polyline_to_extrusion_paths(const ThickPolyline &thick_polyline, ExtrusionRole role, const Flow &flow, const float tolerance) +static ExtrusionPaths thick_polyline_to_extrusion_paths(const ThickPolyline &thick_polyline, ExtrusionRole role, const Flow &flow, const float tolerance, const float merge_tolerance) { ExtrusionPaths paths; ExtrusionPath path(role); @@ -71,7 +71,7 @@ static ExtrusionPaths thick_polyline_to_extrusion_paths(const ThickPolyline &thi path.height = new_flow.height(); } else { thickness_delta = fabs(scale_(flow.width()) - w); - if (thickness_delta <= tolerance) { + if (thickness_delta <= merge_tolerance) { // the width difference between this line and the current flow width is // within the accepted tolerance path.polyline.append(line.b); @@ -95,7 +95,7 @@ static void variable_width(const ThickPolylines& polylines, ExtrusionRole role, // of segments, and any pruning shall be performed before we apply this tolerance. const float tolerance = float(scale_(0.05)); for (const ThickPolyline &p : polylines) { - ExtrusionPaths paths = thick_polyline_to_extrusion_paths(p, role, flow, tolerance); + ExtrusionPaths paths = thick_polyline_to_extrusion_paths(p, role, flow, tolerance, tolerance); // Append paths to collection. if (! paths.empty()) { if (paths.front().first_point() == paths.back().last_point()) diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp index e5dc334f5..6b430c2fe 100644 --- a/src/libslic3r/Point.hpp +++ b/src/libslic3r/Point.hpp @@ -177,6 +177,11 @@ inline bool operator<(const Point &l, const Point &r) return l.x() < r.x() || (l.x() == r.x() && l.y() < r.y()); } +inline Point operator* (const Point& l, const double &r) +{ + return {coord_t(l.x() * r), coord_t(l.y() * r)}; +} + inline bool is_approx(const Point &p1, const Point &p2, coord_t epsilon = coord_t(SCALED_EPSILON)) { Point d = (p2 - p1).cwiseAbs(); diff --git a/src/libslic3r/Polygon.hpp b/src/libslic3r/Polygon.hpp index d24540339..089820565 100644 --- a/src/libslic3r/Polygon.hpp +++ b/src/libslic3r/Polygon.hpp @@ -220,10 +220,10 @@ inline Polylines to_polylines(Polygons &&polys) Polylines polylines; polylines.assign(polys.size(), Polyline()); size_t idx = 0; - for (Polygons::const_iterator it = polys.begin(); it != polys.end(); ++ it) { + for (auto it = polys.begin(); it != polys.end(); ++ it) { Polyline &pl = polylines[idx ++]; pl.points = std::move(it->points); - pl.points.push_back(it->points.front()); + pl.points.push_back(pl.points.front()); } assert(idx == polylines.size()); return polylines; @@ -242,7 +242,7 @@ inline Polygons to_polygons(std::vector &&paths) { Polygons out; out.reserve(paths.size()); - for (const Points &path : paths) + for (Points &path : paths) out.emplace_back(std::move(path)); return out; } diff --git a/src/libslic3r/Polyline.hpp b/src/libslic3r/Polyline.hpp index 5766d9671..256dca28c 100644 --- a/src/libslic3r/Polyline.hpp +++ b/src/libslic3r/Polyline.hpp @@ -139,7 +139,7 @@ inline Polylines to_polylines(std::vector &&paths) { Polylines out; out.reserve(paths.size()); - for (const Points &path : paths) + for (Points &path : paths) out.emplace_back(std::move(path)); return out; } diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index e65b604df..f3a1c15b3 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -412,6 +412,8 @@ void Preset::set_visible_from_appconfig(const AppConfig &app_config) for (auto it = this->renamed_from.begin(); ! is_visible && it != this->renamed_from.end(); ++ it) is_visible = has(*it); } + else + is_visible = false; } } @@ -484,7 +486,7 @@ static std::vector s_Preset_printer_options { "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "max_print_height", "default_print_profile", "inherits", "remaining_times", "silent_mode", - "machine_limits_usage", "thumbnails" + "machine_limits_usage", "thumbnails", "thumbnails_format" }; static std::vector s_Preset_sla_print_options { @@ -573,7 +575,7 @@ static std::vector s_Preset_sla_printer_options { "elefant_foot_min_width", "gamma_correction", "min_exposure_time", "max_exposure_time", - "min_initial_exposure_time", "max_initial_exposure_time", + "min_initial_exposure_time", "max_initial_exposure_time", "sla_archive_format", "sla_output_precision", //FIXME the print host keys are left here just for conversion from the Printer preset to Physical Printer preset. "print_host", "printhost_apikey", "printhost_cafile", "printer_notes", @@ -791,7 +793,8 @@ std::pair PresetCollection::load_external_preset( // The source config may contain keys from many possible preset types. Just copy those that relate to this preset. this->get_edited_preset().config.apply_only(combined_config, keys, true); this->update_dirty(); - update_saved_preset_from_current_preset(); + // Don't save the newly loaded project as a "saved into project" state. + //update_saved_preset_from_current_preset(); assert(this->get_edited_preset().is_dirty); return std::make_pair(&(*it), this->get_edited_preset().is_dirty); } @@ -1226,7 +1229,6 @@ Preset& PresetCollection::select_preset(size_t idx) idx = first_visible_idx(); m_idx_selected = idx; m_edited_preset = m_presets[idx]; - update_saved_preset_from_current_preset(); bool default_visible = ! m_default_suppressed || m_idx_selected < m_num_default_presets; for (size_t i = 0; i < m_num_default_presets; ++i) m_presets[i].is_visible = default_visible; @@ -1496,7 +1498,7 @@ void PhysicalPrinter::update_preset_names_in_config() if (!preset_names.empty()) { std::vector& values = config.option("preset_names")->values; values.clear(); - for (auto preset : preset_names) + for (const std::string& preset : preset_names) values.push_back(preset); // temporary workaround for compatibility with older Slicer @@ -1569,7 +1571,7 @@ void PhysicalPrinter::set_name(const std::string& name) this->name = name; } -std::string PhysicalPrinter::get_full_name(std::string preset_name) const +std::string PhysicalPrinter::get_full_name(const std::string& preset_name) const { return name + separator() + preset_name; } @@ -1886,7 +1888,7 @@ std::vector PhysicalPrinterCollection::get_printers_with_only_prese { std::vector printers; - for (auto printer : m_printers) + for (const PhysicalPrinter& printer : m_printers) if (printer.preset_names.size() == 1 && *printer.preset_names.begin() == preset_name) printers.emplace_back(printer.name); diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index fc45110fd..58ab57cfd 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -397,6 +397,7 @@ public: void discard_current_changes() { m_presets[m_idx_selected].reset_dirty(); m_edited_preset = m_presets[m_idx_selected]; + // Don't save the resetted preset state as a "saved into project" state. // update_saved_preset_from_current_preset(); } @@ -674,7 +675,7 @@ public: bool operator<(const PhysicalPrinter& other) const { return this->name < other.name; } // get full printer name included a name of the preset - std::string get_full_name(std::string preset_name) const; + std::string get_full_name(const std::string &preset_name) const; // get printer name from the full name uncluded preset name static std::string get_short_name(std::string full_name); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 874b775cd..85bcd69ba 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -267,7 +267,7 @@ PresetsConfigSubstitutions PresetBundle::load_presets(AppConfig &config, Forward std::string errors_cummulative; std::tie(substitutions, errors_cummulative) = this->load_system_presets(substitution_rule); - const std::string dir_user_presets = data_dir() + const std::string& dir_user_presets = data_dir() #ifdef SLIC3R_PROFILE_USE_PRESETS_SUBDIR // Store the print/filament/printer presets into a "presets" directory. + "/presets" diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index dc47b382d..c521393df 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -130,7 +130,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "start_gcode", "start_filament_gcode", "toolchange_gcode", - "threads", + "thumbnails", + "thumbnails_format", "use_firmware_retraction", "use_relative_e_distances", "use_volumetric_e", @@ -659,7 +660,8 @@ std::string Print::validate(std::string* warning) const bool layer_gcode_resets_extruder = boost::regex_search(m_config.layer_gcode.value, regex_g92e0); if (m_config.use_relative_e_distances) { // See GH issues #6336 #5073 - if (! before_layer_gcode_resets_extruder && ! layer_gcode_resets_extruder) + if ((m_config.gcode_flavor == gcfMarlinLegacy || m_config.gcode_flavor == gcfMarlinFirmware) && + ! before_layer_gcode_resets_extruder && ! layer_gcode_resets_extruder) return L("Relative extruder addressing requires resetting the extruder position at each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to layer_gcode."); } else if (before_layer_gcode_resets_extruder) return L("\"G92 E0\" was found in before_layer_gcode, which is incompatible with absolute extruder addressing."); @@ -883,9 +885,9 @@ std::string Print::export_gcode(const std::string& path_template, GCodeProcessor message = L("Generating G-code"); this->set_status(90, message); - // The following line may die for multiple reasons. - GCode gcode; - gcode.do_export(this, path.c_str(), result, thumbnail_cb); + // Create GCode on heap, it has quite a lot of data. + std::unique_ptr gcode(new GCode); + gcode->do_export(this, path.c_str(), result, thumbnail_cb); return path.c_str(); } diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index b6e4802bb..1cd983fb9 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -35,11 +35,17 @@ namespace FillAdaptive { struct Octree; struct OctreeDeleter; using OctreePtr = std::unique_ptr; -}; +}; // namespace FillAdaptive + +namespace FillLightning { + class Generator; + struct GeneratorDeleter; + using GeneratorPtr = std::unique_ptr; +}; // namespace FillLightning // Print step IDs for keeping track of the print state. // The Print steps are applied in this order. -enum PrintStep { +enum PrintStep : unsigned int { psWipeTower, // Ordering of the tools on PrintObjects for a multi-material print. // psToolOrdering is a synonym to psWipeTower, as the Wipe Tower calculates and modifies the ToolOrdering, @@ -53,7 +59,7 @@ enum PrintStep { psCount, }; -enum PrintObjectStep { +enum PrintObjectStep : unsigned int { posSlice, posPerimeters, posPrepareInfill, posInfill, posIroning, posSupportMaterial, posCount, }; @@ -344,12 +350,14 @@ public: private: // to be called from Print only. friend class Print; + friend class PrintBaseWithState; PrintObject(Print* print, ModelObject* model_object, const Transform3d& trafo, PrintInstances&& instances); - ~PrintObject() { + ~PrintObject() override { if (m_shared_regions && --m_shared_regions->m_ref_cnt == 0) delete m_shared_regions; clear_layers(); + clear_support_layers(); } void config_apply(const ConfigBase &other, bool ignore_nonexistent = false) { m_config.apply(other, ignore_nonexistent); } @@ -386,6 +394,7 @@ private: void combine_infill(); void _generate_support_material(); std::pair prepare_adaptive_infill_data(); + FillLightning::GeneratorPtr prepare_lightning_infill_data(); // XYZ in scaled coordinates Vec3crd m_size; @@ -529,8 +538,10 @@ public: std::vector print_object_ids() const override; ApplyStatus apply(const Model &model, DynamicPrintConfig config) override; - + void set_task(const TaskParams ¶ms) override { PrintBaseWithState::set_task_impl(params, m_objects); } void process() override; + void finalize() override { PrintBaseWithState::finalize_impl(m_objects); } + // Exports G-code into a file name based on the path_template, returns the file path of the generated G-code file. // If preview_data is not null, the preview_data is filled in for the G-code visualization (not used by the command line Slic3r). std::string export_gcode(const std::string& path_template, GCodeProcessorResult* result, ThumbnailsGeneratorCallback thumbnail_cb = nullptr); diff --git a/src/libslic3r/PrintBase.hpp b/src/libslic3r/PrintBase.hpp index 08711a7b2..13796abba 100644 --- a/src/libslic3r/PrintBase.hpp +++ b/src/libslic3r/PrintBase.hpp @@ -39,9 +39,9 @@ public: // A new unique timestamp is being assigned to the step every time the step changes its state. struct StateWithTimeStamp { - StateWithTimeStamp() : state(INVALID), timestamp(0) {} - State state; - TimeStamp timestamp; + State state { INVALID }; + TimeStamp timestamp { 0 }; + bool enabled { true }; }; struct Warning @@ -112,10 +112,24 @@ public: return this->state_with_timestamp_unguarded(step).state == DONE; } + void enable_unguarded(StepType step, bool enable) { + m_state[step].enabled = enable; + } + + void enable_all_unguarded(bool enable) { + for (size_t istep = 0; istep < COUNT; ++ istep) + m_state[istep].enabled = enable; + } + + bool is_enabled_unguarded(StepType step) const { + return this->state_with_timestamp_unguarded(step).enabled; + } + // Set the step as started. Block on mutex while the Print / PrintObject / PrintRegion objects are being // modified by the UI thread. // This is necessary to block until the Print::apply() updates its state, which may // influence the processing step being entered. + // Returns false if the step is not enabled or if the step has already been finished (it is done). template bool set_started(StepType step, std::mutex &mtx, ThrowIfCanceled throw_if_canceled) { std::scoped_lock lock(mtx); @@ -134,9 +148,9 @@ public: // for (int i = 0; i < int(COUNT); ++ i) // assert(m_state[i].state != STARTED); #endif // NDEBUG - if (m_state[step].state == DONE) - return false; PrintStateBase::StateWithWarnings &state = m_state[step]; + if (! state.enabled || state.state == DONE) + return false; state.state = STARTED; state.timestamp = ++ g_last_timestamp; state.mark_warnings_non_current(); @@ -388,12 +402,12 @@ public: int to_print_step; }; // After calling the apply() function, call set_task() to limit the task to be processed by process(). - virtual void set_task(const TaskParams ¶ms) {} + virtual void set_task(const TaskParams ¶ms) = 0; // Perform the calculation. This is the only method that is to be called at a worker thread. virtual void process() = 0; // Clean up after process() finished, either with success, error or if canceled. // The adjustments on the Print / PrintObject data due to set_task() are to be reverted here. - virtual void finalize() {} + virtual void finalize() = 0; struct SlicingStatus { SlicingStatus(int percent, const std::string &text, unsigned int flags = 0) : percent(percent), text(text), flags(flags) {} @@ -511,10 +525,15 @@ private: friend PrintTryCancel; }; -template +template class PrintBaseWithState : public PrintBase { public: + using PrintStepEnum = PrintStepEnumType; + static constexpr const size_t PrintStepEnumSize = COUNT; + + PrintBaseWithState() = default; + bool is_step_done(PrintStepEnum step) const { return m_state.is_done(step, this->state_mutex()); } PrintStateBase::StateWithTimeStamp step_state_with_timestamp(PrintStepEnum step) const { return m_state.state_with_timestamp(step, this->state_mutex()); } PrintStateBase::StateWithWarnings step_state_with_warnings(PrintStepEnum step) const { return m_state.state_with_warnings(step, this->state_mutex()); } @@ -549,14 +568,120 @@ protected: this->status_update_warnings(static_cast(active_step.first), warning_level, message); } + + // After calling the apply() function, set_task() may be called to limit the task to be processed by process(). + template + void set_task_impl(const TaskParams ¶ms, std::vector &print_objects) + { + static constexpr const auto PrintObjectStepEnumSize = int(PrintObject::PrintObjectStepEnumSize); + using PrintObjectStepEnum = typename PrintObject::PrintObjectStepEnum; + // Grab the lock for the Print / PrintObject milestones. + std::scoped_lock lock(this->state_mutex()); + + int n_object_steps = int(params.to_object_step) + 1; + if (n_object_steps == 0) + n_object_steps = PrintObjectStepEnumSize; + + if (params.single_model_object.valid()) { + // Find the print object to be processed with priority. + PrintObject *print_object = nullptr; + size_t idx_print_object = 0; + for (; idx_print_object < print_objects.size(); ++ idx_print_object) + if (print_objects[idx_print_object]->model_object()->id() == params.single_model_object) { + print_object = print_objects[idx_print_object]; + break; + } + assert(print_object != nullptr); + // Find out whether the priority print object is being currently processed. + bool running = false; + for (int istep = 0; istep < n_object_steps; ++ istep) { + if (! print_object->is_step_enabled_unguarded(PrintObjectStepEnum(istep))) + // Step was skipped, cancel. + break; + if (print_object->is_step_started_unguarded(PrintObjectStepEnum(istep))) { + // No step was skipped, and a wanted step is being processed. Don't cancel. + running = true; + break; + } + } + if (! running) + this->call_cancel_callback(); + + // Now the background process is either stopped, or it is inside one of the print object steps to be calculated anyway. + if (params.single_model_instance_only) { + // Suppress all the steps of other instances. + for (PrintObject *po : print_objects) + for (size_t istep = 0; istep < PrintObjectStepEnumSize; ++ istep) + po->enable_step_unguarded(PrintObjectStepEnum(istep), false); + } else if (! running) { + // Swap the print objects, so that the selected print_object is first in the row. + // At this point the background processing must be stopped, so it is safe to shuffle print objects. + if (idx_print_object != 0) + std::swap(print_objects.front(), print_objects[idx_print_object]); + } + // and set the steps for the current object. + for (int istep = 0; istep < n_object_steps; ++ istep) + print_object->enable_step_unguarded(PrintObjectStepEnum(istep), true); + for (int istep = n_object_steps; istep < PrintObjectStepEnumSize; ++ istep) + print_object->enable_step_unguarded(PrintObjectStepEnum(istep), false); + } else { + // Slicing all objects. + bool running = false; + for (PrintObject *print_object : print_objects) + for (int istep = 0; istep < n_object_steps; ++ istep) { + if (! print_object->is_step_enabled_unguarded(PrintObjectStepEnum(istep))) { + // Step may have been skipped. Restart. + goto loop_end; + } + if (print_object->is_step_started_unguarded(PrintObjectStepEnum(istep))) { + // This step is running, and the state cannot be changed due to the this->state_mutex() being locked. + // It is safe to manipulate m_stepmask of other PrintObjects and Print now. + running = true; + goto loop_end; + } + } + loop_end: + if (! running) + this->call_cancel_callback(); + for (PrintObject *po : print_objects) { + for (int istep = 0; istep < n_object_steps; ++ istep) + po->enable_step_unguarded(PrintObjectStepEnum(istep), true); + for (int istep = n_object_steps; istep < PrintObjectStepEnumSize; ++ istep) + po->enable_step_unguarded(PrintObjectStepEnum(istep), false); + } + } + + if (params.to_object_step != -1 || params.to_print_step != -1) { + // Limit the print steps. + size_t istep = (params.to_object_step != -1) ? 0 : size_t(params.to_print_step) + 1; + for (; istep < PrintStepEnumSize; ++ istep) + m_state.enable_unguarded(PrintStepEnum(istep), false); + } + } + + // Clean up after process() finished, either with success, error or if canceled. + // The adjustments on the Print / PrintObject m_stepmask data due to set_task() are to be reverted here. + template + void finalize_impl(std::vector &print_objects) + { + // Grab the lock for the Print / PrintObject milestones. + std::scoped_lock lock(this->state_mutex()); + for (auto *po : print_objects) + po->enable_all_steps_unguarded(true); + m_state.enable_all_unguarded(true); + } + private: - PrintState m_state; + PrintState m_state; }; -template +template class PrintObjectBaseWithState : public PrintObjectBase { public: + using PrintObjectStepEnum = PrintObjectStepEnumType; + static constexpr const size_t PrintObjectStepEnumSize = COUNT; + PrintType* print() { return m_print; } const PrintType* print() const { return m_print; } @@ -590,6 +715,10 @@ protected: bool is_step_started_unguarded(PrintObjectStepEnum step) const { return m_state.is_started_unguarded(step); } bool is_step_done_unguarded(PrintObjectStepEnum step) const { return m_state.is_done_unguarded(step); } + bool is_step_enabled_unguarded(PrintObjectStepEnum step) const { return m_state.is_enabled_unguarded(step); } + void enable_step_unguarded(PrintObjectStepEnum step, bool enable) { m_state.enable_unguarded(step, enable); } + void enable_all_steps_unguarded(bool enable) { m_state.enable_all_unguarded(enable); } + // Add a slicing warning to the active PrintObject step and send a status notification. // This method could be called multiple times between this->set_started() and this->set_done(). void active_step_add_warning(PrintStateBase::WarningLevel warning_level, const std::string &message, int message_id = 0) { @@ -604,10 +733,10 @@ protected: void throw_if_canceled() { if (m_print->canceled()) throw CanceledException(); } friend PrintType; - PrintType *m_print; + PrintType *m_print; private: - PrintState m_state; + PrintState m_state; }; } // namespace Slic3r diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 1aaf8c1dd..b21ed5631 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -43,7 +43,7 @@ static t_config_enum_values s_keys_map_PrinterTechnology { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PrinterTechnology) -static t_config_enum_values s_keys_map_GCodeFlavor { +static const t_config_enum_values s_keys_map_GCodeFlavor { { "reprap", gcfRepRapSprinter }, { "reprapfirmware", gcfRepRapFirmware }, { "repetier", gcfRepetier }, @@ -59,14 +59,14 @@ static t_config_enum_values s_keys_map_GCodeFlavor { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(GCodeFlavor) -static t_config_enum_values s_keys_map_MachineLimitsUsage { +static const t_config_enum_values s_keys_map_MachineLimitsUsage { { "emit_to_gcode", int(MachineLimitsUsage::EmitToGCode) }, { "time_estimate_only", int(MachineLimitsUsage::TimeEstimateOnly) }, { "ignore", int(MachineLimitsUsage::Ignore) } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(MachineLimitsUsage) -static t_config_enum_values s_keys_map_PrintHostType { +static const t_config_enum_values s_keys_map_PrintHostType { { "prusalink", htPrusaLink }, { "octoprint", htOctoPrint }, { "duet", htDuet }, @@ -77,20 +77,20 @@ static t_config_enum_values s_keys_map_PrintHostType { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PrintHostType) -static t_config_enum_values s_keys_map_AuthorizationType { +static const t_config_enum_values s_keys_map_AuthorizationType { { "key", atKeyPassword }, { "user", atUserPassword } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(AuthorizationType) -static t_config_enum_values s_keys_map_FuzzySkinType { +static const t_config_enum_values s_keys_map_FuzzySkinType { { "none", int(FuzzySkinType::None) }, { "external", int(FuzzySkinType::External) }, { "all", int(FuzzySkinType::All) } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(FuzzySkinType) -static t_config_enum_values s_keys_map_InfillPattern { +static const t_config_enum_values s_keys_map_InfillPattern { { "rectilinear", ipRectilinear }, { "monotonic", ipMonotonic }, { "alignedrectilinear", ipAlignedRectilinear }, @@ -108,47 +108,45 @@ static t_config_enum_values s_keys_map_InfillPattern { { "octagramspiral", ipOctagramSpiral }, { "adaptivecubic", ipAdaptiveCubic }, { "supportcubic", ipSupportCubic }, -#if HAS_LIGHTNING_INFILL { "lightning", ipLightning } -#endif // HAS_LIGHTNING_INFILL }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(InfillPattern) -static t_config_enum_values s_keys_map_IroningType { +static const t_config_enum_values s_keys_map_IroningType { { "top", int(IroningType::TopSurfaces) }, { "topmost", int(IroningType::TopmostOnly) }, { "solid", int(IroningType::AllSolid) } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(IroningType) -static t_config_enum_values s_keys_map_SlicingMode { +static const t_config_enum_values s_keys_map_SlicingMode { { "regular", int(SlicingMode::Regular) }, { "even_odd", int(SlicingMode::EvenOdd) }, { "close_holes", int(SlicingMode::CloseHoles) } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SlicingMode) -static t_config_enum_values s_keys_map_SupportMaterialPattern { +static const t_config_enum_values s_keys_map_SupportMaterialPattern { { "rectilinear", smpRectilinear }, { "rectilinear-grid", smpRectilinearGrid }, { "honeycomb", smpHoneycomb } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialPattern) -static t_config_enum_values s_keys_map_SupportMaterialStyle { +static const t_config_enum_values s_keys_map_SupportMaterialStyle { { "grid", smsGrid }, { "snug", smsSnug } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialStyle) -static t_config_enum_values s_keys_map_SupportMaterialInterfacePattern { +static const t_config_enum_values s_keys_map_SupportMaterialInterfacePattern { { "auto", smipAuto }, { "rectilinear", smipRectilinear }, { "concentric", smipConcentric } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialInterfacePattern) -static t_config_enum_values s_keys_map_SeamPosition { +static const t_config_enum_values s_keys_map_SeamPosition { { "random", spRandom }, { "nearest", spNearest }, { "aligned", spAligned }, @@ -190,6 +188,13 @@ static const t_config_enum_values s_keys_map_DraftShield = { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(DraftShield) +static const t_config_enum_values s_keys_map_GCodeThumbnailsFormat = { + { "PNG", int(GCodeThumbnailsFormat::PNG) }, + { "JPG", int(GCodeThumbnailsFormat::JPG) }, + { "QOI", int(GCodeThumbnailsFormat::QOI) } +}; +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(GCodeThumbnailsFormat) + static const t_config_enum_values s_keys_map_ForwardCompatibilitySubstitutionRule = { { "disable", ForwardCompatibilitySubstitutionRule::Disable }, { "enable", ForwardCompatibilitySubstitutionRule::Enable }, @@ -259,6 +264,16 @@ void PrintConfigDef::init_common_params() def->gui_type = ConfigOptionDef::GUIType::one_string; def->set_default_value(new ConfigOptionPoints()); + def = this->add("thumbnails_format", coEnum); + def->label = L("Format of G-code thumbnails"); + def->tooltip = L("Format of G-code thumbnails: PNG for best quality, JPG for smallest size, QOI for low memory firmware"); + def->mode = comExpert; + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("PNG"); + def->enum_values.push_back("JPG"); + def->enum_values.push_back("QOI"); + def->set_default_value(new ConfigOptionEnum(GCodeThumbnailsFormat::PNG)); + def = this->add("layer_height", coFloat); def->label = L("Layer height"); def->category = L("Layers and Perimeters"); @@ -1138,9 +1153,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("octagramspiral"); def->enum_values.push_back("adaptivecubic"); def->enum_values.push_back("supportcubic"); -#if HAS_LIGHTNING_INFILL def->enum_values.push_back("lightning"); -#endif // HAS_LIGHTNING_INFILL def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Aligned Rectilinear")); def->enum_labels.push_back(L("Grid")); @@ -1157,9 +1170,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Octagram Spiral")); def->enum_labels.push_back(L("Adaptive Cubic")); def->enum_labels.push_back(L("Support Cubic")); -#if HAS_LIGHTNING_INFILL def->enum_labels.push_back(L("Lightning")); -#endif // HAS_LIGHTNING_INFILL def->set_default_value(new ConfigOptionEnum(ipStars)); def = this->add("first_layer_acceleration", coFloat); @@ -3783,6 +3794,19 @@ void PrintConfigDef::init_sla_params() def->enum_labels.push_back(L("Fast")); def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(slamsFast)); + + def = this->add("sla_archive_format", coString); + def->label = L("Format of the output SLA archive"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionString("SL1")); + + def = this->add("sla_output_precision", coFloat); + def->label = L("SLA output precision"); + def->tooltip = L("Minimum resolution in nanometers"); + def->sidetext = L("mm"); + def->min = SCALING_FACTOR; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloat(0.001)); } void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &value) diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 2cc758e7b..950816fa9 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -57,14 +57,10 @@ enum class FuzzySkinType { All, }; -#define HAS_LIGHTNING_INFILL 0 - enum InfillPattern : int { ipRectilinear, ipMonotonic, ipAlignedRectilinear, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb, - ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipAdaptiveCubic, ipSupportCubic, ipSupportBase, -#if HAS_LIGHTNING_INFILL - ipLightning, -#endif // HAS_LIGHTNING_INFILL + ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipAdaptiveCubic, ipSupportCubic, ipSupportBase, + ipLightning, ipCount, }; @@ -131,6 +127,10 @@ enum DraftShield { dsDisabled, dsLimited, dsEnabled }; +enum class GCodeThumbnailsFormat { + PNG, JPG, QOI +}; + #define CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NAME) \ template<> const t_config_enum_names& ConfigOptionEnum::get_enum_names(); \ template<> const t_config_enum_values& ConfigOptionEnum::get_enum_values(); @@ -152,6 +152,7 @@ CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(SLADisplayOrientation) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(SLAPillarConnectionMode) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(BrimType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(DraftShield) +CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(GCodeThumbnailsFormat) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(ForwardCompatibilitySubstitutionRule) #undef CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS @@ -757,6 +758,8 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionInt, standby_temperature_delta)) ((ConfigOptionInts, temperature)) ((ConfigOptionInt, threads)) + ((ConfigOptionPoints, thumbnails)) + ((ConfigOptionEnum, thumbnails_format)) ((ConfigOptionBools, wipe)) ((ConfigOptionBool, wipe_tower)) ((ConfigOptionFloat, wipe_tower_x)) @@ -975,6 +978,8 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, max_exposure_time)) ((ConfigOptionFloat, min_initial_exposure_time)) ((ConfigOptionFloat, max_initial_exposure_time)) + ((ConfigOptionString, sla_archive_format)) + ((ConfigOptionFloat, sla_output_precision)) ) PRINT_CONFIG_CLASS_DERIVED_DEFINE0( diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 31d948db9..9c6178f8b 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -14,6 +14,7 @@ #include "TriangleMeshSlicer.hpp" #include "Utils.hpp" #include "Fill/FillAdaptive.hpp" +#include "Fill/FillLightning.hpp" #include "Format/STL.hpp" #include @@ -353,14 +354,15 @@ void PrintObject::infill() if (this->set_started(posInfill)) { auto [adaptive_fill_octree, support_fill_octree] = this->prepare_adaptive_infill_data(); + auto lightning_generator = this->prepare_lightning_infill_data(); BOOST_LOG_TRIVIAL(debug) << "Filling layers in parallel - start"; tbb::parallel_for( tbb::blocked_range(0, m_layers.size()), - [this, &adaptive_fill_octree = adaptive_fill_octree, &support_fill_octree = support_fill_octree](const tbb::blocked_range& range) { + [this, &adaptive_fill_octree = adaptive_fill_octree, &support_fill_octree = support_fill_octree, &lightning_generator](const tbb::blocked_range& range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) { m_print->throw_if_canceled(); - m_layers[layer_idx]->make_fills(adaptive_fill_octree.get(), support_fill_octree.get()); + m_layers[layer_idx]->make_fills(adaptive_fill_octree.get(), support_fill_octree.get(), lightning_generator.get()); } } ); @@ -453,6 +455,18 @@ std::pair PrintObject::prepare support_line_spacing ? build_octree(mesh, overhangs.front(), support_line_spacing, true) : OctreePtr()); } +FillLightning::GeneratorPtr PrintObject::prepare_lightning_infill_data() +{ + bool has_lightning_infill = false; + for (size_t region_id = 0; region_id < this->num_printing_regions(); ++region_id) + if (const PrintRegionConfig &config = this->printing_region(region_id).config(); config.fill_density > 0 && config.fill_pattern == ipLightning) { + has_lightning_infill = true; + break; + } + + return has_lightning_infill ? FillLightning::build_generator(std::as_const(*this)) : FillLightning::GeneratorPtr(); +} + void PrintObject::clear_layers() { for (Layer *l : m_layers) diff --git a/src/libslic3r/SLA/AGGRaster.hpp b/src/libslic3r/SLA/AGGRaster.hpp index bc68cd377..7c8e71c2a 100644 --- a/src/libslic3r/SLA/AGGRaster.hpp +++ b/src/libslic3r/SLA/AGGRaster.hpp @@ -41,7 +41,7 @@ public: using TValue = typename TColor::value_type; using TPixel = typename PixelRenderer::pixel_type; using TRawBuffer = agg::rendering_buffer; - + protected: Resolution m_resolution; @@ -153,8 +153,8 @@ public: } Trafo trafo() const override { return m_trafo; } - Resolution resolution() const override { return m_resolution; } - PixelDim pixel_dimensions() const override + Resolution resolution() const { return m_resolution; } + PixelDim pixel_dimensions() const { return {SCALING_FACTOR / m_pxdim_scaled.w_mm, SCALING_FACTOR / m_pxdim_scaled.h_mm}; @@ -186,11 +186,15 @@ class RasterGrayscaleAA : public _RasterGrayscaleAA { using typename Base::TValue; public: template - RasterGrayscaleAA(const RasterBase::Resolution &res, - const RasterBase::PixelDim & pd, - const RasterBase::Trafo & trafo, - GammaFn && fn) - : Base(res, pd, trafo, Colors::White, Colors::Black, + RasterGrayscaleAA(const Resolution &res, + const PixelDim &pd, + const RasterBase::Trafo &trafo, + GammaFn &&fn) + : Base(res, + pd, + trafo, + Colors::White, + Colors::Black, std::forward(fn)) {} @@ -208,10 +212,10 @@ public: class RasterGrayscaleAAGammaPower: public RasterGrayscaleAA { public: - RasterGrayscaleAAGammaPower(const RasterBase::Resolution &res, - const RasterBase::PixelDim & pd, - const RasterBase::Trafo & trafo, - double gamma = 1.) + RasterGrayscaleAAGammaPower(const Resolution &res, + const PixelDim &pd, + const RasterBase::Trafo &trafo, + double gamma = 1.) : RasterGrayscaleAA(res, pd, trafo, agg::gamma_power(gamma)) {} }; diff --git a/src/libslic3r/SLA/RasterBase.cpp b/src/libslic3r/SLA/RasterBase.cpp index cc9aca027..0b6c45eff 100644 --- a/src/libslic3r/SLA/RasterBase.cpp +++ b/src/libslic3r/SLA/RasterBase.cpp @@ -68,10 +68,10 @@ EncodedRaster PPMRasterEncoder::operator()(const void *ptr, size_t w, size_t h, } std::unique_ptr create_raster_grayscale_aa( - const RasterBase::Resolution &res, - const RasterBase::PixelDim & pxdim, - double gamma, - const RasterBase::Trafo & tr) + const Resolution &res, + const PixelDim &pxdim, + double gamma, + const RasterBase::Trafo &tr) { std::unique_ptr rst; diff --git a/src/libslic3r/SLA/RasterBase.hpp b/src/libslic3r/SLA/RasterBase.hpp index 6439830fe..657fc865c 100644 --- a/src/libslic3r/SLA/RasterBase.hpp +++ b/src/libslic3r/SLA/RasterBase.hpp @@ -31,6 +31,27 @@ public: const char * extension() const { return m_ext.c_str(); } }; +/// Type that represents a resolution in pixels. +struct Resolution { + size_t width_px = 0; + size_t height_px = 0; + + Resolution() = default; + Resolution(size_t w, size_t h) : width_px(w), height_px(h) {} + size_t pixels() const { return width_px * height_px; } +}; + +/// Types that represents the dimension of a pixel in millimeters. +struct PixelDim { + double w_mm = 1.; + double h_mm = 1.; + + PixelDim() = default; + PixelDim(double px_width_mm, double px_height_mm) + : w_mm(px_width_mm), h_mm(px_height_mm) + {} +}; + using RasterEncoder = std::function; @@ -63,35 +84,14 @@ public: Point get_center() const { return {center_x, center_y}; } }; - /// Type that represents a resolution in pixels. - struct Resolution { - size_t width_px = 0; - size_t height_px = 0; - - Resolution() = default; - Resolution(size_t w, size_t h) : width_px(w), height_px(h) {} - size_t pixels() const { return width_px * height_px; } - }; - - /// Types that represents the dimension of a pixel in millimeters. - struct PixelDim { - double w_mm = 1.; - double h_mm = 1.; - - PixelDim() = default; - PixelDim(double px_width_mm, double px_height_mm) - : w_mm(px_width_mm), h_mm(px_height_mm) - {} - }; - virtual ~RasterBase() = default; /// Draw a polygon with holes. virtual void draw(const ExPolygon& poly) = 0; /// Get the resolution of the raster. - virtual Resolution resolution() const = 0; - virtual PixelDim pixel_dimensions() const = 0; +// virtual Resolution resolution() const = 0; +// virtual PixelDim pixel_dimensions() const = 0; virtual Trafo trafo() const = 0; virtual EncodedRaster encode(RasterEncoder encoder) const = 0; @@ -109,10 +109,10 @@ std::ostream& operator<<(std::ostream &stream, const EncodedRaster &bytes); // If gamma is zero, thresholding will be performed which disables AA. std::unique_ptr create_raster_grayscale_aa( - const RasterBase::Resolution &res, - const RasterBase::PixelDim & pxdim, - double gamma = 1.0, - const RasterBase::Trafo & tr = {}); + const Resolution &res, + const PixelDim &pxdim, + double gamma = 1.0, + const RasterBase::Trafo &tr = {}); }} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/SupportTreeBuildsteps.cpp b/src/libslic3r/SLA/SupportTreeBuildsteps.cpp index 6134e1f5a..aa69fdc77 100644 --- a/src/libslic3r/SLA/SupportTreeBuildsteps.cpp +++ b/src/libslic3r/SLA/SupportTreeBuildsteps.cpp @@ -982,7 +982,7 @@ bool SupportTreeBuildsteps::connect_to_model_body(Head &head) double w = dist - 2 * head.r_pin_mm - head.r_back_mm; if (w < 0.) { - BOOST_LOG_TRIVIAL(error) << "Pinhead width is negative!"; + BOOST_LOG_TRIVIAL(warning) << "Pinhead width is negative!"; w = 0.; } diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 55acd3846..203393e9c 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -1,6 +1,10 @@ #include "SLAPrint.hpp" #include "SLAPrintSteps.hpp" +#include "Format/SL1.hpp" +#include "Format/SL1_SVG.hpp" +#include "Format/pwmx.hpp" + #include "ClipperUtils.hpp" #include "Geometry.hpp" #include "MTUtils.hpp" @@ -240,8 +244,9 @@ SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, DynamicPrintConfig con m_material_config.apply_only(config, material_diff, true); // Handle changes to object config defaults m_default_object_config.apply_only(config, object_diff, true); - - if (m_printer) m_printer->apply(m_printer_config); + + if (!m_archiver || !printer_diff.empty()) + m_archiver = SLAArchive::create(m_printer_config.sla_archive_format.value.c_str(), m_printer_config); struct ModelObjectStatus { enum Status { @@ -508,104 +513,6 @@ SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, DynamicPrintConfig con return static_cast(apply_status); } -// After calling the apply() function, set_task() may be called to limit the task to be processed by process(). -void SLAPrint::set_task(const TaskParams ¶ms) -{ - // Grab the lock for the Print / PrintObject milestones. - std::scoped_lock lock(this->state_mutex()); - - int n_object_steps = int(params.to_object_step) + 1; - if (n_object_steps == 0) - n_object_steps = int(slaposCount); - - if (params.single_model_object.valid()) { - // Find the print object to be processed with priority. - SLAPrintObject *print_object = nullptr; - size_t idx_print_object = 0; - for (; idx_print_object < m_objects.size(); ++ idx_print_object) - if (m_objects[idx_print_object]->model_object()->id() == params.single_model_object) { - print_object = m_objects[idx_print_object]; - break; - } - assert(print_object != nullptr); - // Find out whether the priority print object is being currently processed. - bool running = false; - for (int istep = 0; istep < n_object_steps; ++ istep) { - if (! print_object->m_stepmask[size_t(istep)]) - // Step was skipped, cancel. - break; - if (print_object->is_step_started_unguarded(SLAPrintObjectStep(istep))) { - // No step was skipped, and a wanted step is being processed. Don't cancel. - running = true; - break; - } - } - if (! running) - this->call_cancel_callback(); - - // Now the background process is either stopped, or it is inside one of the print object steps to be calculated anyway. - if (params.single_model_instance_only) { - // Suppress all the steps of other instances. - for (SLAPrintObject *po : m_objects) - for (size_t istep = 0; istep < slaposCount; ++ istep) - po->m_stepmask[istep] = false; - } else if (! running) { - // Swap the print objects, so that the selected print_object is first in the row. - // At this point the background processing must be stopped, so it is safe to shuffle print objects. - if (idx_print_object != 0) - std::swap(m_objects.front(), m_objects[idx_print_object]); - } - // and set the steps for the current object. - for (int istep = 0; istep < n_object_steps; ++ istep) - print_object->m_stepmask[size_t(istep)] = true; - for (int istep = n_object_steps; istep < int(slaposCount); ++ istep) - print_object->m_stepmask[size_t(istep)] = false; - } else { - // Slicing all objects. - bool running = false; - for (SLAPrintObject *print_object : m_objects) - for (int istep = 0; istep < n_object_steps; ++ istep) { - if (! print_object->m_stepmask[size_t(istep)]) { - // Step may have been skipped. Restart. - goto loop_end; - } - if (print_object->is_step_started_unguarded(SLAPrintObjectStep(istep))) { - // This step is running, and the state cannot be changed due to the this->state_mutex() being locked. - // It is safe to manipulate m_stepmask of other SLAPrintObjects and SLAPrint now. - running = true; - goto loop_end; - } - } - loop_end: - if (! running) - this->call_cancel_callback(); - for (SLAPrintObject *po : m_objects) { - for (int istep = 0; istep < n_object_steps; ++ istep) - po->m_stepmask[size_t(istep)] = true; - for (auto istep = size_t(n_object_steps); istep < slaposCount; ++ istep) - po->m_stepmask[istep] = false; - } - } - - if (params.to_object_step != -1 || params.to_print_step != -1) { - // Limit the print steps. - size_t istep = (params.to_object_step != -1) ? 0 : size_t(params.to_print_step) + 1; - for (; istep < m_stepmask.size(); ++ istep) - m_stepmask[istep] = false; - } -} - -// Clean up after process() finished, either with success, error or if canceled. -// The adjustments on the SLAPrint / SLAPrintObject data due to set_task() are to be reverted here. -void SLAPrint::finalize() -{ - for (SLAPrintObject *po : m_objects) - for (size_t istep = 0; istep < slaposCount; ++ istep) - po->m_stepmask[istep] = true; - for (size_t istep = 0; istep < slapsCount; ++ istep) - m_stepmask[istep] = true; -} - // Generate a recommended output file name based on the format template, default extension, and template parameters // (timestamps, object placeholders derived from the model, current placeholder prameters and print statistics. // Use the final print statistics if available, or just keep the print statistics placeholders if not available yet (before the output is finalized). @@ -670,12 +577,6 @@ std::string SLAPrint::validate(std::string*) const return ""; } -void SLAPrint::set_printer(SLAArchive *arch) -{ - invalidate_step(slapsRasterize); - m_printer = arch; -} - bool SLAPrint::invalidate_step(SLAPrintStep step) { bool invalidated = Inherited::invalidate_step(step); @@ -742,7 +643,7 @@ void SLAPrint::process() st += incr; - if (po->m_stepmask[step] && po->set_started(step)) { + if (po->set_started(step)) { m_report_status(*this, st, printsteps.label(step)); bench.start(); printsteps.execute(step, *po); @@ -760,14 +661,11 @@ void SLAPrint::process() apply_steps_on_objects(level1_obj_steps); apply_steps_on_objects(level2_obj_steps); - // this would disable the rasterization step - // std::fill(m_stepmask.begin(), m_stepmask.end(), false); - st = Steps::max_objstatus; for(SLAPrintStep currentstep : print_steps) { throw_if_canceled(); - if (m_stepmask[currentstep] && set_started(currentstep)) { + if (set_started(currentstep)) { m_report_status(*this, st, printsteps.label(currentstep)); bench.start(); printsteps.execute(currentstep); @@ -835,7 +733,9 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector steps_ignore = { @@ -897,7 +797,6 @@ bool SLAPrint::is_step_done(SLAPrintObjectStep step) const SLAPrintObject::SLAPrintObject(SLAPrint *print, ModelObject *model_object) : Inherited(print, model_object) - , m_stepmask(slaposCount, true) , m_transformed_rmesh([this](TriangleMesh &obj) { obj = m_model_object->raw_mesh(); if (!obj.empty()) { @@ -1173,7 +1072,8 @@ sla::SupportPoints SLAPrintObject::transformed_support_points() const { assert(m_model_object != nullptr); auto spts = m_model_object->sla_support_points; - auto tr = trafo().cast(); + const Transform3d& vol_trafo = m_model_object->volumes.front()->get_transformation().get_matrix(); + const Transform3f& tr = (trafo() * vol_trafo).cast(); for (sla::SupportPoint& suppt : spts) { suppt.pos = tr * suppt.pos; } @@ -1185,8 +1085,10 @@ sla::DrainHoles SLAPrintObject::transformed_drainhole_points() const { assert(m_model_object != nullptr); auto pts = m_model_object->sla_drain_holes; - auto tr = trafo().cast(); - auto sc = m_model_object->instances.front()->get_scaling_factor().cast(); + const Transform3d& vol_trafo = m_model_object->volumes.front()->get_transformation().get_matrix(); + const Geometry::Transformation trans(trafo() * vol_trafo); + const Transform3f& tr = trans.get_matrix().cast(); + const Vec3f sc = trans.get_scaling_factor().cast(); for (sla::DrainHole &hl : pts) { hl.pos = tr * hl.pos; hl.normal = tr * hl.normal - tr.translation(); diff --git a/src/libslic3r/SLAPrint.hpp b/src/libslic3r/SLAPrint.hpp index 0622bec4e..6d8dc058b 100644 --- a/src/libslic3r/SLAPrint.hpp +++ b/src/libslic3r/SLAPrint.hpp @@ -9,6 +9,8 @@ #include "Point.hpp" #include "MTUtils.hpp" #include "Zipper.hpp" +#include "Format/SLAArchive.hpp" +#include "GCode/ThumbnailData.hpp" #include "libslic3r/Execution/ExecutionTBB.hpp" @@ -263,6 +265,7 @@ public: protected: // to be called from SLAPrint only. friend class SLAPrint; + friend class PrintBaseWithState; SLAPrintObject(SLAPrint* print, ModelObject* model_object); ~SLAPrintObject(); @@ -283,10 +286,6 @@ protected: // Invalidate steps based on a set of parameters changed. bool invalidate_state_by_config_options(const std::vector &opt_keys); - // Which steps have to be performed. Implicitly: all - // to be accessible from SLAPrint - std::vector m_stepmask; - private: // Object specific configuration, pulled from the configuration layer. SLAPrintObjectConfig m_config; @@ -389,41 +388,6 @@ struct SLAPrintStatistics } }; -class SLAArchive { -protected: - std::vector m_layers; - - virtual std::unique_ptr create_raster() const = 0; - virtual sla::RasterEncoder get_encoder() const = 0; - -public: - virtual ~SLAArchive() = default; - - virtual void apply(const SLAPrinterConfig &cfg) = 0; - - // Fn have to be thread safe: void(sla::RasterBase& raster, size_t lyrid); - template - void draw_layers( - size_t layer_num, - Fn && drawfn, - CancelFn cancelfn = []() { return false; }, - const EP & ep = {}) - { - m_layers.resize(layer_num); - execution::for_each( - ep, size_t(0), m_layers.size(), - [this, &drawfn, &cancelfn](size_t idx) { - if (cancelfn()) return; - - sla::EncodedRaster &enc = m_layers[idx]; - auto rst = create_raster(); - drawfn(*rst, idx); - enc = rst->encode(get_encoder()); - }, - execution::max_concurrency(ep)); - } -}; - /** * @brief This class is the high level FSM for the SLA printing process. * @@ -441,7 +405,7 @@ private: // Prevents erroneous use by other classes. public: - SLAPrint(): m_stepmask(slapsCount, true) {} + SLAPrint() = default; virtual ~SLAPrint() override { this->clear(); } @@ -452,9 +416,9 @@ public: // List of existing PrintObject IDs, to remove notifications for non-existent IDs. std::vector print_object_ids() const override; ApplyStatus apply(const Model &model, DynamicPrintConfig config) override; - void set_task(const TaskParams ¶ms) override; + void set_task(const TaskParams ¶ms) override { PrintBaseWithState::set_task_impl(params, m_objects); } void process() override; - void finalize() override; + void finalize() override { PrintBaseWithState::finalize_impl(m_objects); } // Returns true if an object step is done on all objects and there's at least one object. bool is_step_done(SLAPrintObjectStep step) const; // Returns true if the last step was finished with success. @@ -527,8 +491,19 @@ public: // The aggregated and leveled print records from various objects. // TODO: use this structure for the preview in the future. const std::vector& print_layers() const { return m_printer_input; } - - void set_printer(SLAArchive *archiver); + + void export_print(const std::string &fname, const std::string &projectname = "") + { + ThumbnailsList thumbnails; //empty thumbnail list + export_print(fname, thumbnails, projectname); + } + + void export_print(const std::string &fname, + const ThumbnailsList &thumbnails, + const std::string &projectname = "") + { + m_archiver->export_print(fname, *this, thumbnails, projectname); + } private: @@ -544,13 +519,12 @@ private: SLAPrintObjectConfig m_default_object_config; PrintObjects m_objects; - std::vector m_stepmask; // Ready-made data for rasterization. std::vector m_printer_input; // The archive object which collects the raster images after slicing - SLAArchive *m_printer = nullptr; + std::unique_ptr m_archiver; // Estimated print time, material consumed. SLAPrintStatistics m_print_statistics; diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index fa7348781..435e8c8e3 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -1044,7 +1044,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { // Rasterizing the model objects, and their supports void SLAPrint::Steps::rasterize() { - if(canceled() || !m_print->m_printer) return; + if(canceled() || !m_print->m_archiver) return; // coefficient to map the rasterization state (0-99) to the allocated // portion (slot) of the process state @@ -1089,7 +1089,7 @@ void SLAPrint::Steps::rasterize() if(canceled()) return; // Print all the layers in parallel - m_print->m_printer->draw_layers(m_print->m_printer_input.size(), lvlfn, + m_print->m_archiver->draw_layers(m_print->m_printer_input.size(), lvlfn, [this]() { return canceled(); }, ex_tbb); } diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 67bd2639b..195fc9e17 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -3754,6 +3754,7 @@ void modulate_extrusion_by_overlapping_layers( assert(path != nullptr); polylines.emplace_back(Polyline(std::move(path->polyline))); path_ends.emplace_back(std::pair(polylines.back().points.front(), polylines.back().points.back())); + delete path; } } // Destroy the original extrusion paths, their polylines were moved to path_fragments already. diff --git a/src/libslic3r/Surface.hpp b/src/libslic3r/Surface.hpp index 4920efbbf..ef1de30e9 100644 --- a/src/libslic3r/Surface.hpp +++ b/src/libslic3r/Surface.hpp @@ -58,11 +58,11 @@ public: thickness(rhs.thickness), thickness_layers(rhs.thickness_layers), bridge_angle(rhs.bridge_angle), extra_perimeters(rhs.extra_perimeters) {}; - Surface(SurfaceType _surface_type, const ExPolygon &&_expolygon) + Surface(SurfaceType _surface_type, ExPolygon &&_expolygon) : surface_type(_surface_type), expolygon(std::move(_expolygon)), thickness(-1), thickness_layers(1), bridge_angle(-1), extra_perimeters(0) {}; - Surface(const Surface &other, const ExPolygon &&_expolygon) + Surface(const Surface &other, ExPolygon &&_expolygon) : surface_type(other.surface_type), expolygon(std::move(_expolygon)), thickness(other.thickness), thickness_layers(other.thickness_layers), bridge_angle(other.bridge_angle), extra_perimeters(other.extra_perimeters) @@ -159,7 +159,7 @@ inline ExPolygons to_expolygons(Surfaces &&src) { ExPolygons expolygons; expolygons.reserve(src.size()); - for (Surfaces::const_iterator it = src.begin(); it != src.end(); ++it) + for (auto it = src.begin(); it != src.end(); ++it) expolygons.emplace_back(ExPolygon(std::move(it->expolygon))); src.clear(); return expolygons; @@ -260,8 +260,8 @@ inline void surfaces_append(Surfaces &dst, ExPolygons &&src, SurfaceType surface inline void surfaces_append(Surfaces &dst, ExPolygons &&src, const Surface &surfaceTempl) { dst.reserve(dst.size() + number_polygons(src)); - for (ExPolygons::const_iterator it = src.begin(); it != src.end(); ++ it) - dst.emplace_back(Surface(surfaceTempl, std::move(*it))); + for (ExPolygon& explg : src) + dst.emplace_back(Surface(surfaceTempl, std::move(explg))); src.clear(); } diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 52c9e10d3..a9e38e016 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -34,19 +34,6 @@ #define ENABLE_ENVIRONMENT_MAP 0 // Enable smoothing of objects normals #define ENABLE_SMOOTH_NORMALS 0 -// Enable rendering markers for options in preview as fixed screen size points -#define ENABLE_FIXED_SCREEN_SIZE_POINT_MARKERS 1 - - -//================ -// 2.4.1.rc techs -//================ -#define ENABLE_2_4_1_RC 1 - -// Enable detection of layers for spiral vase prints -#define ENABLE_SPIRAL_VASE_LAYERS (1 && ENABLE_2_4_1_RC) -// Enable correction of toolpaths when z offset is set -#define ENABLE_Z_OFFSET_CORRECTION (1 && ENABLE_2_4_1_RC) //==================== @@ -66,10 +53,30 @@ #define ENABLE_OBJECT_MANIPULATOR_FOCUS (1 && ENABLE_2_5_0_ALPHA1) // Enable removal of wipe tower magic object_id equal to 1000 #define ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL (1 && ENABLE_2_5_0_ALPHA1) -// Enable removal of old OpenGL render calls -#define ENABLE_GLBEGIN_GLEND_REMOVAL (1 && ENABLE_2_5_0_ALPHA1) +// Enable removal of legacy OpenGL calls +#define ENABLE_LEGACY_OPENGL_REMOVAL (1 && ENABLE_2_5_0_ALPHA1) +// Enable using vertex attributes and matrices in shaders +#define ENABLE_GL_SHADERS_ATTRIBUTES (1 && ENABLE_LEGACY_OPENGL_REMOVAL) +// Enable rendering imgui using shaders +#define ENABLE_GL_IMGUI_SHADERS (1 && ENABLE_GL_SHADERS_ATTRIBUTES) +// Shows an imgui dialog with GLModel statistics data +#define ENABLE_GLMODEL_STATISTICS (0 && ENABLE_LEGACY_OPENGL_REMOVAL) // Enable show non-manifold edges #define ENABLE_SHOW_NON_MANIFOLD_EDGES (1 && ENABLE_2_5_0_ALPHA1) +// Enable rework of Reload from disk command +#define ENABLE_RELOAD_FROM_DISK_REWORK (1 && ENABLE_2_5_0_ALPHA1) +// Enable showing toolpaths center of gravity +#define ENABLE_SHOW_TOOLPATHS_COG (1 && ENABLE_2_5_0_ALPHA1) +// Enable recalculating toolpaths when switching to/from volumetric rate visualization +#define ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC (1 && ENABLE_2_5_0_ALPHA1) +// Enable modified camera control using mouse +#define ENABLE_NEW_CAMERA_MOVEMENTS (1 && ENABLE_2_5_0_ALPHA1) +// Enable modified rectangle selection +#define ENABLE_NEW_RECTANGLE_SELECTION (1 && ENABLE_2_5_0_ALPHA1) +// Enable alternative version of file_wildcards() +#define ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR (1 && ENABLE_2_5_0_ALPHA1) +// Enable processing of gcode G2 and G3 lines +#define ENABLE_PROCESS_G2_G3_LINES (1 && ENABLE_2_5_0_ALPHA1) #endif // _prusaslicer_technologies_h_ diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index e00b6e71c..ddc9a4081 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -961,9 +961,11 @@ std::string string_printf(const char *format, ...) buffer.resize(size_t(bufflen) + 1); ::vsnprintf(buffer.data(), buffer.size(), format, args2); } + + va_end(args1); + va_end(args2); buffer.resize(bufflen); - return buffer; } diff --git a/src/qoi/CMakeLists.txt b/src/qoi/CMakeLists.txt new file mode 100644 index 000000000..af8bf2e05 --- /dev/null +++ b/src/qoi/CMakeLists.txt @@ -0,0 +1,9 @@ +# PrusaSlicer specific CMake + +cmake_minimum_required(VERSION 2.8.12) +project(qoi) + +add_library(qoi STATIC + qoi.h + qoilib.c +) diff --git a/src/qoi/README.md b/src/qoi/README.md new file mode 100644 index 000000000..4006c3850 --- /dev/null +++ b/src/qoi/README.md @@ -0,0 +1,108 @@ +Bundled with PrusaSlicer: commit 6c0831f91ffde5dfe2ceef32cbaff91d62b0e0ee +Original README follows: + + +![QOI Logo](https://qoiformat.org/qoi-logo.svg) + +# QOI - The “Quite OK Image Format” for fast, lossless image compression + +Single-file MIT licensed library for C/C++ + +See [qoi.h](https://github.com/phoboslab/qoi/blob/master/qoi.h) for +the documentation and format specification. + +More info at https://qoiformat.org + + +## Why? + +Compared to stb_image and stb_image_write QOI offers 20x-50x faster encoding, +3x-4x faster decoding and 20% better compression. It's also stupidly simple and +fits in about 300 lines of C. + + +## Example Usage + +- [qoiconv.c](https://github.com/phoboslab/qoi/blob/master/qoiconv.c) +converts between png <> qoi + - [qoibench.c](https://github.com/phoboslab/qoi/blob/master/qoibench.c) +a simple wrapper to benchmark stbi, libpng and qoi + + +## Limitations + +The QOI file format allows for huge images with up to 18 exa-pixels. A streaming +en-/decoder can handle these with minimal RAM requirements, assuming there is +enough storage space. + +This particular implementation of QOI however is limited to images with a +maximum size of 400 million pixels. It will safely refuse to en-/decode anything +larger than that. This is not a streaming en-/decoder. It loads the whole image +file into RAM before doing any work and is not extensively optimized for +performance (but it's still very fast). + +If this is a limitation for your use case, please look into any of the other +implementations listed below. + + +## Tools + +- https://github.com/floooh/qoiview - native QOI viewer +- https://github.com/pfusik/qoi-ci/releases/tag/qoi-ci-1.1.0 - QOI Plugin installer for GIMP, Imagine, Paint.NET and XnView MP +- https://github.com/iOrange/QoiFileTypeNet/releases/tag/v0.2 - QOI Plugin for Paint.NET +- https://github.com/iOrange/QOIThumbnailProvider - Add thumbnails for QOI images in Windows Explorer +- https://github.com/Tom94/tev - another native QOI viewer (allows pixel peeping and comparison with other image formats) +- https://apps.apple.com/br/app/qoiconverterx/id1602159820 QOI <=> PNG converter available on the Mac App Store +- https://github.com/kaetemi/qoi-max - QOI Bitmap I/O Plugin for 3ds Max +- https://raylibtech.itch.io/rtexviewer - texture viewer, supports QOI + + +## Implementations & Bindings of QOI + +- https://github.com/pfusik/qoi-ci (Ć, transpiled to C, C++, C#, Java, JavaScript, Python and Swift) +- https://github.com/kodonnell/qoi (Python) +- https://github.com/Cr4xy/lua-qoi (Lua) +- https://github.com/superzazu/SDL_QOI (C, SDL2 bindings) +- https://github.com/saharNooby/qoi-java (Java) +- https://github.com/MasterQ32/zig-qoi (Zig) +- https://github.com/rbino/qoix (Elixir) +- https://github.com/NUlliiON/QoiSharp (C#) +- https://github.com/aldanor/qoi-rust (Rust) +- https://github.com/zakarumych/rapid-qoi (Rust) +- https://github.com/takeyourhatoff/qoi (Go) +- https://github.com/DosWorld/pasqoi (Pascal) +- https://github.com/elihwyma/Swift-QOI (Swift) +- https://github.com/xfmoulet/qoi (Go) +- https://erratique.ch/software/qoic (OCaml) +- https://github.com/arian/go-qoi (Go) +- https://github.com/kchapelier/qoijs (JavaScript) +- https://github.com/KristofferC/QOI.jl (Julia) +- https://github.com/shadowMitia/libqoi/ (C++) +- https://github.com/MKCG/php-qoi (PHP) +- https://github.com/LightHouseSoftware/qoiformats (D) +- https://github.com/mhoward540/qoi-nim (Nim) + + +## QOI Support in Other Software + +- [SerenityOS](https://github.com/SerenityOS/serenity) supports decoding QOI system wide through a custom [cpp implementation in LibGfx](https://github.com/SerenityOS/serenity/blob/master/Userland/Libraries/LibGfx/QOILoader.h) +- [Raylib](https://github.com/raysan5/raylib) supports decoding and encoding QOI textures through its [rtextures module](https://github.com/raysan5/raylib/blob/master/src/rtextures.c) +- [Rebol3](https://github.com/Oldes/Rebol3/issues/39) supports decoding and encoding QOI using a native codec +- [c-ray](https://github.com/vkoskiv/c-ray) supports QOI natively +- [SAIL](https://github.com/HappySeaFox/sail) image decoding library, supports decoding and encoding QOI images +- [Orx](https://github.com/orx/orx) 2D game engine, supports QOI natively + + +## Packages + +[AUR](https://aur.archlinux.org/pkgbase/qoi-git/) - system-wide qoi.h, qoiconv and qoibench install as split packages. + + +## Implementations not yet conforming to the final specification + +These implementations are based on the pre-release version of QOI. Resulting files are not compatible with the current version. + +- https://github.com/ChevyRay/qoi_rs (Rust) +- https://github.com/panzi/jsqoi (TypeScript) +- https://github.com/0xd34df00d/hsqoi (Haskell) + diff --git a/src/qoi/qoi.h b/src/qoi/qoi.h new file mode 100644 index 000000000..988f9edcb --- /dev/null +++ b/src/qoi/qoi.h @@ -0,0 +1,671 @@ +/* + +QOI - The "Quite OK Image" format for fast, lossless image compression + +Dominic Szablewski - https://phoboslab.org + + +-- LICENSE: The MIT License(MIT) + +Copyright(c) 2021 Dominic Szablewski + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files(the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions : +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-- About + +QOI encodes and decodes images in a lossless format. Compared to stb_image and +stb_image_write QOI offers 20x-50x faster encoding, 3x-4x faster decoding and +20% better compression. + + +-- Synopsis + +// Define `QOI_IMPLEMENTATION` in *one* C/C++ file before including this +// library to create the implementation. + +#define QOI_IMPLEMENTATION +#include "qoi.h" + +// Encode and store an RGBA buffer to the file system. The qoi_desc describes +// the input pixel data. +qoi_write("image_new.qoi", rgba_pixels, &(qoi_desc){ + .width = 1920, + .height = 1080, + .channels = 4, + .colorspace = QOI_SRGB +}); + +// Load and decode a QOI image from the file system into a 32bbp RGBA buffer. +// The qoi_desc struct will be filled with the width, height, number of channels +// and colorspace read from the file header. +qoi_desc desc; +void *rgba_pixels = qoi_read("image.qoi", &desc, 4); + + + +-- Documentation + +This library provides the following functions; +- qoi_read -- read and decode a QOI file +- qoi_decode -- decode the raw bytes of a QOI image from memory +- qoi_write -- encode and write a QOI file +- qoi_encode -- encode an rgba buffer into a QOI image in memory + +See the function declaration below for the signature and more information. + +If you don't want/need the qoi_read and qoi_write functions, you can define +QOI_NO_STDIO before including this library. + +This library uses malloc() and free(). To supply your own malloc implementation +you can define QOI_MALLOC and QOI_FREE before including this library. + +This library uses memset() to zero-initialize the index. To supply your own +implementation you can define QOI_ZEROARR before including this library. + + +-- Data Format + +A QOI file has a 14 byte header, followed by any number of data "chunks" and an +8-byte end marker. + +struct qoi_header_t { + char magic[4]; // magic bytes "qoif" + uint32_t width; // image width in pixels (BE) + uint32_t height; // image height in pixels (BE) + uint8_t channels; // 3 = RGB, 4 = RGBA + uint8_t colorspace; // 0 = sRGB with linear alpha, 1 = all channels linear +}; + +Images are encoded row by row, left to right, top to bottom. The decoder and +encoder start with {r: 0, g: 0, b: 0, a: 255} as the previous pixel value. An +image is complete when all pixels specified by width * height have been covered. + +Pixels are encoded as + - a run of the previous pixel + - an index into an array of previously seen pixels + - a difference to the previous pixel value in r,g,b + - full r,g,b or r,g,b,a values + +The color channels are assumed to not be premultiplied with the alpha channel +("un-premultiplied alpha"). + +A running array[64] (zero-initialized) of previously seen pixel values is +maintained by the encoder and decoder. Each pixel that is seen by the encoder +and decoder is put into this array at the position formed by a hash function of +the color value. In the encoder, if the pixel value at the index matches the +current pixel, this index position is written to the stream as QOI_OP_INDEX. +The hash function for the index is: + + index_position = (r * 3 + g * 5 + b * 7 + a * 11) % 64 + +Each chunk starts with a 2- or 8-bit tag, followed by a number of data bits. The +bit length of chunks is divisible by 8 - i.e. all chunks are byte aligned. All +values encoded in these data bits have the most significant bit on the left. + +The 8-bit tags have precedence over the 2-bit tags. A decoder must check for the +presence of an 8-bit tag first. + +The byte stream's end is marked with 7 0x00 bytes followed a single 0x01 byte. + + +The possible chunks are: + + +.- QOI_OP_INDEX ----------. +| Byte[0] | +| 7 6 5 4 3 2 1 0 | +|-------+-----------------| +| 0 0 | index | +`-------------------------` +2-bit tag b00 +6-bit index into the color index array: 0..63 + +A valid encoder must not issue 2 or more consecutive QOI_OP_INDEX chunks to the +same index. QOI_OP_RUN should be used instead. + + +.- QOI_OP_DIFF -----------. +| Byte[0] | +| 7 6 5 4 3 2 1 0 | +|-------+-----+-----+-----| +| 0 1 | dr | dg | db | +`-------------------------` +2-bit tag b01 +2-bit red channel difference from the previous pixel between -2..1 +2-bit green channel difference from the previous pixel between -2..1 +2-bit blue channel difference from the previous pixel between -2..1 + +The difference to the current channel values are using a wraparound operation, +so "1 - 2" will result in 255, while "255 + 1" will result in 0. + +Values are stored as unsigned integers with a bias of 2. E.g. -2 is stored as +0 (b00). 1 is stored as 3 (b11). + +The alpha value remains unchanged from the previous pixel. + + +.- QOI_OP_LUMA -------------------------------------. +| Byte[0] | Byte[1] | +| 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | +|-------+-----------------+-------------+-----------| +| 1 0 | green diff | dr - dg | db - dg | +`---------------------------------------------------` +2-bit tag b10 +6-bit green channel difference from the previous pixel -32..31 +4-bit red channel difference minus green channel difference -8..7 +4-bit blue channel difference minus green channel difference -8..7 + +The green channel is used to indicate the general direction of change and is +encoded in 6 bits. The red and blue channels (dr and db) base their diffs off +of the green channel difference and are encoded in 4 bits. I.e.: + dr_dg = (cur_px.r - prev_px.r) - (cur_px.g - prev_px.g) + db_dg = (cur_px.b - prev_px.b) - (cur_px.g - prev_px.g) + +The difference to the current channel values are using a wraparound operation, +so "10 - 13" will result in 253, while "250 + 7" will result in 1. + +Values are stored as unsigned integers with a bias of 32 for the green channel +and a bias of 8 for the red and blue channel. + +The alpha value remains unchanged from the previous pixel. + + +.- QOI_OP_RUN ------------. +| Byte[0] | +| 7 6 5 4 3 2 1 0 | +|-------+-----------------| +| 1 1 | run | +`-------------------------` +2-bit tag b11 +6-bit run-length repeating the previous pixel: 1..62 + +The run-length is stored with a bias of -1. Note that the run-lengths 63 and 64 +(b111110 and b111111) are illegal as they are occupied by the QOI_OP_RGB and +QOI_OP_RGBA tags. + + +.- QOI_OP_RGB ------------------------------------------. +| Byte[0] | Byte[1] | Byte[2] | Byte[3] | +| 7 6 5 4 3 2 1 0 | 7 .. 0 | 7 .. 0 | 7 .. 0 | +|-------------------------+---------+---------+---------| +| 1 1 1 1 1 1 1 0 | red | green | blue | +`-------------------------------------------------------` +8-bit tag b11111110 +8-bit red channel value +8-bit green channel value +8-bit blue channel value + +The alpha value remains unchanged from the previous pixel. + + +.- QOI_OP_RGBA ---------------------------------------------------. +| Byte[0] | Byte[1] | Byte[2] | Byte[3] | Byte[4] | +| 7 6 5 4 3 2 1 0 | 7 .. 0 | 7 .. 0 | 7 .. 0 | 7 .. 0 | +|-------------------------+---------+---------+---------+---------| +| 1 1 1 1 1 1 1 1 | red | green | blue | alpha | +`-----------------------------------------------------------------` +8-bit tag b11111111 +8-bit red channel value +8-bit green channel value +8-bit blue channel value +8-bit alpha channel value + +*/ + + +/* ----------------------------------------------------------------------------- +Header - Public functions */ + +#ifndef QOI_H +#define QOI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* A pointer to a qoi_desc struct has to be supplied to all of qoi's functions. +It describes either the input format (for qoi_write and qoi_encode), or is +filled with the description read from the file header (for qoi_read and +qoi_decode). + +The colorspace in this qoi_desc is an enum where + 0 = sRGB, i.e. gamma scaled RGB channels and a linear alpha channel + 1 = all channels are linear +You may use the constants QOI_SRGB or QOI_LINEAR. The colorspace is purely +informative. It will be saved to the file header, but does not affect +how chunks are en-/decoded. */ + +#define QOI_SRGB 0 +#define QOI_LINEAR 1 + +typedef struct { + unsigned int width; + unsigned int height; + unsigned char channels; + unsigned char colorspace; +} qoi_desc; + +#ifndef QOI_NO_STDIO + +/* Encode raw RGB or RGBA pixels into a QOI image and write it to the file +system. The qoi_desc struct must be filled with the image width, height, +number of channels (3 = RGB, 4 = RGBA) and the colorspace. + +The function returns 0 on failure (invalid parameters, or fopen or malloc +failed) or the number of bytes written on success. */ + +int qoi_write(const char *filename, const void *data, const qoi_desc *desc); + + +/* Read and decode a QOI image from the file system. If channels is 0, the +number of channels from the file header is used. If channels is 3 or 4 the +output format will be forced into this number of channels. + +The function either returns NULL on failure (invalid data, or malloc or fopen +failed) or a pointer to the decoded pixels. On success, the qoi_desc struct +will be filled with the description from the file header. + +The returned pixel data should be free()d after use. */ + +void *qoi_read(const char *filename, qoi_desc *desc, int channels); + +#endif /* QOI_NO_STDIO */ + + +/* Encode raw RGB or RGBA pixels into a QOI image in memory. + +The function either returns NULL on failure (invalid parameters or malloc +failed) or a pointer to the encoded data on success. On success the out_len +is set to the size in bytes of the encoded data. + +The returned qoi data should be free()d after use. */ + +void *qoi_encode(const void *data, const qoi_desc *desc, int *out_len); + + +/* Decode a QOI image from memory. + +The function either returns NULL on failure (invalid parameters or malloc +failed) or a pointer to the decoded pixels. On success, the qoi_desc struct +is filled with the description from the file header. + +The returned pixel data should be free()d after use. */ + +void *qoi_decode(const void *data, int size, qoi_desc *desc, int channels); + + +#ifdef __cplusplus +} +#endif +#endif /* QOI_H */ + + +/* ----------------------------------------------------------------------------- +Implementation */ + +#ifdef QOI_IMPLEMENTATION +#include +#include + +#ifndef QOI_MALLOC + #define QOI_MALLOC(sz) malloc(sz) + #define QOI_FREE(p) free(p) +#endif +#ifndef QOI_ZEROARR + #define QOI_ZEROARR(a) memset((a),0,sizeof(a)) +#endif + +#define QOI_OP_INDEX 0x00 /* 00xxxxxx */ +#define QOI_OP_DIFF 0x40 /* 01xxxxxx */ +#define QOI_OP_LUMA 0x80 /* 10xxxxxx */ +#define QOI_OP_RUN 0xc0 /* 11xxxxxx */ +#define QOI_OP_RGB 0xfe /* 11111110 */ +#define QOI_OP_RGBA 0xff /* 11111111 */ + +#define QOI_MASK_2 0xc0 /* 11000000 */ + +#define QOI_COLOR_HASH(C) (C.rgba.r*3 + C.rgba.g*5 + C.rgba.b*7 + C.rgba.a*11) +#define QOI_MAGIC \ + (((unsigned int)'q') << 24 | ((unsigned int)'o') << 16 | \ + ((unsigned int)'i') << 8 | ((unsigned int)'f')) +#define QOI_HEADER_SIZE 14 + +/* 2GB is the max file size that this implementation can safely handle. We guard +against anything larger than that, assuming the worst case with 5 bytes per +pixel, rounded down to a nice clean value. 400 million pixels ought to be +enough for anybody. */ +#define QOI_PIXELS_MAX ((unsigned int)400000000) + +typedef union { + struct { unsigned char r, g, b, a; } rgba; + unsigned int v; +} qoi_rgba_t; + +static const unsigned char qoi_padding[8] = {0,0,0,0,0,0,0,1}; + +static void qoi_write_32(unsigned char *bytes, int *p, unsigned int v) { + bytes[(*p)++] = (0xff000000 & v) >> 24; + bytes[(*p)++] = (0x00ff0000 & v) >> 16; + bytes[(*p)++] = (0x0000ff00 & v) >> 8; + bytes[(*p)++] = (0x000000ff & v); +} + +static unsigned int qoi_read_32(const unsigned char *bytes, int *p) { + unsigned int a = bytes[(*p)++]; + unsigned int b = bytes[(*p)++]; + unsigned int c = bytes[(*p)++]; + unsigned int d = bytes[(*p)++]; + return a << 24 | b << 16 | c << 8 | d; +} + +void *qoi_encode(const void *data, const qoi_desc *desc, int *out_len) { + int i, max_size, p, run; + int px_len, px_end, px_pos, channels; + unsigned char *bytes; + const unsigned char *pixels; + qoi_rgba_t index[64]; + qoi_rgba_t px, px_prev; + + if ( + data == NULL || out_len == NULL || desc == NULL || + desc->width == 0 || desc->height == 0 || + desc->channels < 3 || desc->channels > 4 || + desc->colorspace > 1 || + desc->height >= QOI_PIXELS_MAX / desc->width + ) { + return NULL; + } + + max_size = + desc->width * desc->height * (desc->channels + 1) + + QOI_HEADER_SIZE + sizeof(qoi_padding); + + p = 0; + bytes = (unsigned char *) QOI_MALLOC(max_size); + if (!bytes) { + return NULL; + } + + qoi_write_32(bytes, &p, QOI_MAGIC); + qoi_write_32(bytes, &p, desc->width); + qoi_write_32(bytes, &p, desc->height); + bytes[p++] = desc->channels; + bytes[p++] = desc->colorspace; + + + pixels = (const unsigned char *)data; + + QOI_ZEROARR(index); + + run = 0; + px_prev.rgba.r = 0; + px_prev.rgba.g = 0; + px_prev.rgba.b = 0; + px_prev.rgba.a = 255; + px = px_prev; + + px_len = desc->width * desc->height * desc->channels; + px_end = px_len - desc->channels; + channels = desc->channels; + + for (px_pos = 0; px_pos < px_len; px_pos += channels) { + if (channels == 4) { + px = *(qoi_rgba_t *)(pixels + px_pos); + } + else { + px.rgba.r = pixels[px_pos + 0]; + px.rgba.g = pixels[px_pos + 1]; + px.rgba.b = pixels[px_pos + 2]; + } + + if (px.v == px_prev.v) { + run++; + if (run == 62 || px_pos == px_end) { + bytes[p++] = QOI_OP_RUN | (run - 1); + run = 0; + } + } + else { + int index_pos; + + if (run > 0) { + bytes[p++] = QOI_OP_RUN | (run - 1); + run = 0; + } + + index_pos = QOI_COLOR_HASH(px) % 64; + + if (index[index_pos].v == px.v) { + bytes[p++] = QOI_OP_INDEX | index_pos; + } + else { + index[index_pos] = px; + + if (px.rgba.a == px_prev.rgba.a) { + signed char vr = px.rgba.r - px_prev.rgba.r; + signed char vg = px.rgba.g - px_prev.rgba.g; + signed char vb = px.rgba.b - px_prev.rgba.b; + + signed char vg_r = vr - vg; + signed char vg_b = vb - vg; + + if ( + vr > -3 && vr < 2 && + vg > -3 && vg < 2 && + vb > -3 && vb < 2 + ) { + bytes[p++] = QOI_OP_DIFF | (vr + 2) << 4 | (vg + 2) << 2 | (vb + 2); + } + else if ( + vg_r > -9 && vg_r < 8 && + vg > -33 && vg < 32 && + vg_b > -9 && vg_b < 8 + ) { + bytes[p++] = QOI_OP_LUMA | (vg + 32); + bytes[p++] = (vg_r + 8) << 4 | (vg_b + 8); + } + else { + bytes[p++] = QOI_OP_RGB; + bytes[p++] = px.rgba.r; + bytes[p++] = px.rgba.g; + bytes[p++] = px.rgba.b; + } + } + else { + bytes[p++] = QOI_OP_RGBA; + bytes[p++] = px.rgba.r; + bytes[p++] = px.rgba.g; + bytes[p++] = px.rgba.b; + bytes[p++] = px.rgba.a; + } + } + } + px_prev = px; + } + + for (i = 0; i < (int)sizeof(qoi_padding); i++) { + bytes[p++] = qoi_padding[i]; + } + + *out_len = p; + return bytes; +} + +void *qoi_decode(const void *data, int size, qoi_desc *desc, int channels) { + const unsigned char *bytes; + unsigned int header_magic; + unsigned char *pixels; + qoi_rgba_t index[64]; + qoi_rgba_t px; + int px_len, chunks_len, px_pos; + int p = 0, run = 0; + + if ( + data == NULL || desc == NULL || + (channels != 0 && channels != 3 && channels != 4) || + size < QOI_HEADER_SIZE + (int)sizeof(qoi_padding) + ) { + return NULL; + } + + bytes = (const unsigned char *)data; + + header_magic = qoi_read_32(bytes, &p); + desc->width = qoi_read_32(bytes, &p); + desc->height = qoi_read_32(bytes, &p); + desc->channels = bytes[p++]; + desc->colorspace = bytes[p++]; + + if ( + desc->width == 0 || desc->height == 0 || + desc->channels < 3 || desc->channels > 4 || + desc->colorspace > 1 || + header_magic != QOI_MAGIC || + desc->height >= QOI_PIXELS_MAX / desc->width + ) { + return NULL; + } + + if (channels == 0) { + channels = desc->channels; + } + + px_len = desc->width * desc->height * channels; + pixels = (unsigned char *) QOI_MALLOC(px_len); + if (!pixels) { + return NULL; + } + + QOI_ZEROARR(index); + px.rgba.r = 0; + px.rgba.g = 0; + px.rgba.b = 0; + px.rgba.a = 255; + + chunks_len = size - (int)sizeof(qoi_padding); + for (px_pos = 0; px_pos < px_len; px_pos += channels) { + if (run > 0) { + run--; + } + else if (p < chunks_len) { + int b1 = bytes[p++]; + + if (b1 == QOI_OP_RGB) { + px.rgba.r = bytes[p++]; + px.rgba.g = bytes[p++]; + px.rgba.b = bytes[p++]; + } + else if (b1 == QOI_OP_RGBA) { + px.rgba.r = bytes[p++]; + px.rgba.g = bytes[p++]; + px.rgba.b = bytes[p++]; + px.rgba.a = bytes[p++]; + } + else if ((b1 & QOI_MASK_2) == QOI_OP_INDEX) { + px = index[b1]; + } + else if ((b1 & QOI_MASK_2) == QOI_OP_DIFF) { + px.rgba.r += ((b1 >> 4) & 0x03) - 2; + px.rgba.g += ((b1 >> 2) & 0x03) - 2; + px.rgba.b += ( b1 & 0x03) - 2; + } + else if ((b1 & QOI_MASK_2) == QOI_OP_LUMA) { + int b2 = bytes[p++]; + int vg = (b1 & 0x3f) - 32; + px.rgba.r += vg - 8 + ((b2 >> 4) & 0x0f); + px.rgba.g += vg; + px.rgba.b += vg - 8 + (b2 & 0x0f); + } + else if ((b1 & QOI_MASK_2) == QOI_OP_RUN) { + run = (b1 & 0x3f); + } + + index[QOI_COLOR_HASH(px) % 64] = px; + } + + if (channels == 4) { + *(qoi_rgba_t*)(pixels + px_pos) = px; + } + else { + pixels[px_pos + 0] = px.rgba.r; + pixels[px_pos + 1] = px.rgba.g; + pixels[px_pos + 2] = px.rgba.b; + } + } + + return pixels; +} + +#ifndef QOI_NO_STDIO +#include + +int qoi_write(const char *filename, const void *data, const qoi_desc *desc) { + FILE *f = fopen(filename, "wb"); + int size; + void *encoded; + + if (!f) { + return 0; + } + + encoded = qoi_encode(data, desc, &size); + if (!encoded) { + fclose(f); + return 0; + } + + fwrite(encoded, 1, size, f); + fclose(f); + + QOI_FREE(encoded); + return size; +} + +void *qoi_read(const char *filename, qoi_desc *desc, int channels) { + FILE *f = fopen(filename, "rb"); + int size, bytes_read; + void *pixels, *data; + + if (!f) { + return NULL; + } + + fseek(f, 0, SEEK_END); + size = ftell(f); + if (size <= 0) { + fclose(f); + return NULL; + } + fseek(f, 0, SEEK_SET); + + data = QOI_MALLOC(size); + if (!data) { + fclose(f); + return NULL; + } + + bytes_read = fread(data, 1, size, f); + fclose(f); + + pixels = qoi_decode(data, bytes_read, desc, channels); + QOI_FREE(data); + return pixels; +} + +#endif /* QOI_NO_STDIO */ +#endif /* QOI_IMPLEMENTATION */ diff --git a/src/qoi/qoilib.c b/src/qoi/qoilib.c new file mode 100644 index 000000000..e3aa809c7 --- /dev/null +++ b/src/qoi/qoilib.c @@ -0,0 +1,6 @@ +// PrusaSlicer specific: +// Include and compile QOI library. + +#define QOI_IMPLEMENTATION +#define QOI_NO_STDIO +#include "qoi.h" diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 34c0efd01..ef7687f00 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -193,7 +193,6 @@ set(SLIC3R_GUI_SOURCES GUI/Mouse3DController.hpp GUI/DoubleSlider.cpp GUI/DoubleSlider.hpp - GUI/DoubleSlider_Utils.hpp GUI/Notebook.cpp GUI/Notebook.hpp GUI/ObjectDataViewModel.cpp @@ -214,6 +213,8 @@ set(SLIC3R_GUI_SOURCES GUI/DesktopIntegrationDialog.hpp GUI/HintNotification.cpp GUI/HintNotification.hpp + Utils/AppUpdater.cpp + Utils/AppUpdater.hpp Utils/Http.cpp Utils/Http.hpp Utils/FixModelByWin10.cpp @@ -251,6 +252,7 @@ if (APPLE) list(APPEND SLIC3R_GUI_SOURCES Utils/RetinaHelperImpl.mm Utils/MacDarkMode.mm + Utils/MacUtils.mm GUI/RemovableDriveManagerMM.mm GUI/RemovableDriveManagerMM.h GUI/Mouse3DHandlerMac.mm @@ -270,7 +272,7 @@ endforeach() encoding_check(libslic3r_gui) -target_link_libraries(libslic3r_gui libslic3r avrdude cereal imgui GLEW::GLEW OpenGL::GL hidapi libcurl ${wxWidgets_LIBRARIES}) +target_link_libraries(libslic3r_gui libslic3r avrdude libcereal imgui GLEW::GLEW OpenGL::GL hidapi libcurl ${wxWidgets_LIBRARIES}) if (MSVC) target_link_libraries(libslic3r_gui Setupapi.lib) diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index c4f1a4407..66fa8fb92 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -11,6 +11,10 @@ #include "GUI_App.hpp" #include "GLCanvas3D.hpp" +#if ENABLE_GL_SHADERS_ATTRIBUTES +#include "Plater.hpp" +#include "Camera.hpp" +#endif // ENABLE_GL_SHADERS_ATTRIBUTES #include @@ -27,6 +31,7 @@ static const Slic3r::ColorRGBA DEFAULT_TRANSPARENT_GRID_COLOR = { 0.9f, 0.9f, 0 namespace Slic3r { namespace GUI { +#if !ENABLE_LEGACY_OPENGL_REMOVAL bool GeometryBuffer::set_from_triangles(const std::vector &triangles, float z) { if (triangles.empty()) { @@ -95,6 +100,7 @@ const float* GeometryBuffer::get_vertices_data() const { return (m_vertices.size() > 0) ? (const float*)m_vertices.data() : nullptr; } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL const float Bed3D::Axes::DefaultStemRadius = 0.5f; const float Bed3D::Axes::DefaultStemLength = 25.0f; @@ -103,11 +109,22 @@ const float Bed3D::Axes::DefaultTipLength = 5.0f; void Bed3D::Axes::render() { +#if ENABLE_GL_SHADERS_ATTRIBUTES + auto render_axis = [this](GLShaderProgram* shader, const Transform3d& transform) { + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d matrix = camera.get_view_matrix() * transform; + shader->set_uniform("view_model_matrix", matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + shader->set_uniform("normal_matrix", (Matrix3d)matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else auto render_axis = [this](const Transform3f& transform) { glsafe(::glPushMatrix()); glsafe(::glMultMatrixf(transform.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_arrow.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES }; if (!m_arrow.is_initialized()) @@ -123,28 +140,40 @@ void Bed3D::Axes::render() shader->set_uniform("emission_factor", 0.0f); // x axis -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_arrow.set_color(ColorRGBA::X()); #else m_arrow.set_color(-1, ColorRGBA::X()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_axis(shader, Geometry::assemble_transform(m_origin, { 0.0, 0.5 * M_PI, 0.0 })); +#else render_axis(Geometry::assemble_transform(m_origin, { 0.0, 0.5 * M_PI, 0.0 }).cast()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // y axis -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_arrow.set_color(ColorRGBA::Y()); #else m_arrow.set_color(-1, ColorRGBA::Y()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_axis(shader, Geometry::assemble_transform(m_origin, { -0.5 * M_PI, 0.0, 0.0 })); +#else render_axis(Geometry::assemble_transform(m_origin, { -0.5 * M_PI, 0.0, 0.0 }).cast()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // z axis -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_arrow.set_color(ColorRGBA::Z()); #else m_arrow.set_color(-1, ColorRGBA::Z()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_axis(shader, Geometry::assemble_transform(m_origin)); +#else render_axis(Geometry::assemble_transform(m_origin).cast()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES shader->stop_using(); @@ -198,6 +227,13 @@ bool Bed3D::set_shape(const Pointfs& bed_shape, const double max_print_height, c m_model_filename = model_filename; m_extended_bounding_box = this->calc_extended_bounding_box(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_contour = ExPolygon(Polygon::new_scale(bed_shape)); + m_polygon = offset(m_contour.contour, (float)m_contour.contour.bounding_box().radius() * 1.7f, jtRound, scale_(0.5)).front(); + + m_triangles.reset(); + m_gridlines.reset(); +#else ExPolygon poly{ Polygon::new_scale(bed_shape) }; calc_triangles(poly); @@ -205,9 +241,10 @@ bool Bed3D::set_shape(const Pointfs& bed_shape, const double max_print_height, c const BoundingBox& bed_bbox = poly.contour.bounding_box(); calc_gridlines(poly, bed_bbox); - m_polygon = offset(poly.contour, (float)bed_bbox.radius() * 1.7f, jtRound, scale_(0.5))[0]; + m_polygon = offset(poly.contour, (float)bed_bbox.radius() * 1.7f, jtRound, scale_(0.5)).front(); this->release_VBOs(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_texture.reset(); m_model.reset(); @@ -229,6 +266,17 @@ Point Bed3D::point_projection(const Point& point) const return m_polygon.point_projection(point); } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Bed3D::render(GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, float scale_factor, bool show_axes, bool show_texture) +{ + render_internal(canvas, view_matrix, projection_matrix, bottom, scale_factor, show_axes, show_texture, false); +} + +void Bed3D::render_for_picking(GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, float scale_factor) +{ + render_internal(canvas, view_matrix, projection_matrix, bottom, scale_factor, false, false, true); +} +#else void Bed3D::render(GLCanvas3D& canvas, bool bottom, float scale_factor, bool show_axes, bool show_texture) { render_internal(canvas, bottom, scale_factor, show_axes, show_texture, false); @@ -238,9 +286,15 @@ void Bed3D::render_for_picking(GLCanvas3D& canvas, bool bottom, float scale_fact { render_internal(canvas, bottom, scale_factor, false, false, true); } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Bed3D::render_internal(GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, float scale_factor, + bool show_axes, bool show_texture, bool picking) +#else void Bed3D::render_internal(GLCanvas3D& canvas, bool bottom, float scale_factor, bool show_axes, bool show_texture, bool picking) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { m_scale_factor = scale_factor; @@ -249,17 +303,23 @@ void Bed3D::render_internal(GLCanvas3D& canvas, bool bottom, float scale_factor, glsafe(::glEnable(GL_DEPTH_TEST)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_model.set_color(picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR); #else m_model.set_color(-1, picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL switch (m_type) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + case Type::System: { render_system(canvas, view_matrix, projection_matrix, bottom, show_texture); break; } + default: + case Type::Custom: { render_custom(canvas, view_matrix, projection_matrix, bottom, show_texture, picking); break; } +#else case Type::System: { render_system(canvas, bottom, show_texture); break; } default: case Type::Custom: { render_custom(canvas, bottom, show_texture, picking); break; } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } glsafe(::glDisable(GL_DEPTH_TEST)); @@ -288,6 +348,98 @@ BoundingBoxf3 Bed3D::calc_extended_bounding_box() const return out; } +#if ENABLE_LEGACY_OPENGL_REMOVAL +void Bed3D::init_triangles() +{ + if (m_triangles.is_initialized()) + return; + + if (m_contour.empty()) + return; + + const std::vector triangles = triangulate_expolygon_2f(m_contour, NORMALS_UP); + if (triangles.empty() || triangles.size() % 3 != 0) + return; + + GLModel::Geometry init_data; + init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3T2 }; + init_data.reserve_vertices(triangles.size()); + init_data.reserve_indices(triangles.size() / 3); + + Vec2f min = triangles.front(); + Vec2f max = min; + for (const Vec2f& v : triangles) { + min = min.cwiseMin(v).eval(); + max = max.cwiseMax(v).eval(); + } + + const Vec2f size = max - min; + if (size.x() <= 0.0f || size.y() <= 0.0f) + return; + + Vec2f inv_size = size.cwiseInverse(); + inv_size.y() *= -1.0f; + + // vertices + indices + unsigned int vertices_counter = 0; + for (const Vec2f& v : triangles) { + const Vec3f p = { v.x(), v.y(), GROUND_Z }; + init_data.add_vertex(p, (Vec2f)(v - min).cwiseProduct(inv_size).eval()); + ++vertices_counter; + if (vertices_counter % 3 == 0) + init_data.add_triangle(vertices_counter - 3, vertices_counter - 2, vertices_counter - 1); + } + + m_triangles.init_from(std::move(init_data)); +} + +void Bed3D::init_gridlines() +{ + if (m_gridlines.is_initialized()) + return; + + if (m_contour.empty()) + return; + + const BoundingBox& bed_bbox = m_contour.contour.bounding_box(); + const coord_t step = scale_(10.0); + + Polylines axes_lines; + for (coord_t x = bed_bbox.min.x(); x <= bed_bbox.max.x(); x += step) { + Polyline line; + line.append(Point(x, bed_bbox.min.y())); + line.append(Point(x, bed_bbox.max.y())); + axes_lines.push_back(line); + } + for (coord_t y = bed_bbox.min.y(); y <= bed_bbox.max.y(); y += step) { + Polyline line; + line.append(Point(bed_bbox.min.x(), y)); + line.append(Point(bed_bbox.max.x(), y)); + axes_lines.push_back(line); + } + + // clip with a slightly grown expolygon because our lines lay on the contours and may get erroneously clipped + Lines gridlines = to_lines(intersection_pl(axes_lines, offset(m_contour, float(SCALED_EPSILON)))); + + // append bed contours + Lines contour_lines = to_lines(m_contour); + std::copy(contour_lines.begin(), contour_lines.end(), std::back_inserter(gridlines)); + + GLModel::Geometry init_data; + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(2 * gridlines.size()); + init_data.reserve_indices(2 * gridlines.size()); + + for (const Slic3r::Line& l : gridlines) { + init_data.add_vertex(Vec3f(unscale(l.a.x()), unscale(l.a.y()), GROUND_Z)); + init_data.add_vertex(Vec3f(unscale(l.b.x()), unscale(l.b.y()), GROUND_Z)); + const unsigned int vertices_counter = (unsigned int)init_data.vertices_count(); + init_data.add_line(vertices_counter - 2, vertices_counter - 1); + } + + m_gridlines.init_from(std::move(init_data)); +} +#else void Bed3D::calc_triangles(const ExPolygon& poly) { if (! m_triangles.set_from_triangles(triangulate_expolygon_2f(poly, NORMALS_UP), GROUND_Z)) @@ -320,6 +472,7 @@ void Bed3D::calc_gridlines(const ExPolygon& poly, const BoundingBox& bed_bbox) if (!m_gridlines.set_from_lines(gridlines, GROUND_Z)) BOOST_LOG_TRIVIAL(error) << "Unable to create bed grid lines\n"; } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Try to match the print bed shape with the shape of an active profile. If such a match exists, // return the print bed model. @@ -351,6 +504,16 @@ void Bed3D::render_axes() m_axes.render(); } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Bed3D::render_system(GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool show_texture) +{ + if (!bottom) + render_model(view_matrix, projection_matrix); + + if (show_texture) + render_texture(bottom, canvas, view_matrix, projection_matrix); +} +#else void Bed3D::render_system(GLCanvas3D& canvas, bool bottom, bool show_texture) { if (!bottom) @@ -359,12 +522,21 @@ void Bed3D::render_system(GLCanvas3D& canvas, bool bottom, bool show_texture) if (show_texture) render_texture(bottom, canvas); } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix) +#else void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { if (m_texture_filename.empty()) { m_texture.reset(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_default(bottom, false, view_matrix, projection_matrix); +#else render_default(bottom, false); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES return; } @@ -377,7 +549,11 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) if (m_temp_texture.get_id() == 0 || m_temp_texture.get_source() != m_texture_filename) { // generate a temporary lower resolution texture to show while no main texture levels have been compressed if (!m_temp_texture.load_from_svg_file(m_texture_filename, false, false, false, max_tex_size / 8)) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_default(bottom, false, view_matrix, projection_matrix); +#else render_default(bottom, false); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES return; } canvas.request_extra_frame(); @@ -385,7 +561,11 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) // starts generating the main texture, compression will run asynchronously if (!m_texture.load_from_svg_file(m_texture_filename, true, true, true, max_tex_size)) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_default(bottom, false, view_matrix, projection_matrix); +#else render_default(bottom, false); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES return; } } @@ -393,7 +573,11 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) // generate a temporary lower resolution texture to show while no main texture levels have been compressed if (m_temp_texture.get_id() == 0 || m_temp_texture.get_source() != m_texture_filename) { if (!m_temp_texture.load_from_file(m_texture_filename, false, GLTexture::None, false)) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_default(bottom, false, view_matrix, projection_matrix); +#else render_default(bottom, false); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES return; } canvas.request_extra_frame(); @@ -401,12 +585,20 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) // starts generating the main texture, compression will run asynchronously if (!m_texture.load_from_file(m_texture_filename, true, GLTexture::MultiThreaded, true)) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_default(bottom, false, view_matrix, projection_matrix); +#else render_default(bottom, false); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES return; } } else { +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_default(bottom, false, view_matrix, projection_matrix); +#else render_default(bottom, false); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES return; } } @@ -421,6 +613,48 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) canvas.request_extra_frame(); } +#if ENABLE_LEGACY_OPENGL_REMOVAL + init_triangles(); + + GLShaderProgram* shader = wxGetApp().get_shader("printbed"); + if (shader != nullptr) { + shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + shader->set_uniform("view_model_matrix", view_matrix); + shader->set_uniform("projection_matrix", projection_matrix); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + shader->set_uniform("transparent_background", bottom); + shader->set_uniform("svg_source", boost::algorithm::iends_with(m_texture.get_source(), ".svg")); + + glsafe(::glEnable(GL_DEPTH_TEST)); + if (bottom) + glsafe(::glDepthMask(GL_FALSE)); + + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + + if (bottom) + glsafe(::glFrontFace(GL_CW)); + + // show the temporary texture while no compressed data is available + GLuint tex_id = (GLuint)m_temp_texture.get_id(); + if (tex_id == 0) + tex_id = (GLuint)m_texture.get_id(); + + glsafe(::glBindTexture(GL_TEXTURE_2D, tex_id)); + m_triangles.render(); + glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); + + if (bottom) + glsafe(::glFrontFace(GL_CCW)); + + glsafe(::glDisable(GL_BLEND)); + if (bottom) + glsafe(::glDepthMask(GL_TRUE)); + + shader->stop_using(); + } +#else if (m_triangles.get_vertices_count() > 0) { GLShaderProgram* shader = wxGetApp().get_shader("printbed"); if (shader != nullptr) { @@ -445,10 +679,7 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) if (bottom) glsafe(::glFrontFace(GL_CW)); - unsigned int stride = m_triangles.get_vertex_data_size(); - - GLint position_id = shader->get_attrib_location("v_position"); - GLint tex_coords_id = shader->get_attrib_location("v_tex_coords"); + const unsigned int stride = m_triangles.get_vertex_data_size(); // show the temporary texture while no compressed data is available GLuint tex_id = (GLuint)m_temp_texture.get_id(); @@ -458,22 +689,16 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) glsafe(::glBindTexture(GL_TEXTURE_2D, tex_id)); glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_vbo_id)); - if (position_id != -1) { - glsafe(::glEnableVertexAttribArray(position_id)); - glsafe(::glVertexAttribPointer(position_id, 3, GL_FLOAT, GL_FALSE, stride, (GLvoid*)(intptr_t)m_triangles.get_position_offset())); - } - if (tex_coords_id != -1) { - glsafe(::glEnableVertexAttribArray(tex_coords_id)); - glsafe(::glVertexAttribPointer(tex_coords_id, 2, GL_FLOAT, GL_FALSE, stride, (GLvoid*)(intptr_t)m_triangles.get_tex_coords_offset())); - } + glsafe(::glVertexPointer(3, GL_FLOAT, stride, (const void*)(intptr_t)m_triangles.get_position_offset())); + glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); + + glsafe(::glTexCoordPointer(2, GL_FLOAT, stride, (const void*)(intptr_t)m_triangles.get_tex_coords_offset())); + glsafe(::glEnableClientState(GL_TEXTURE_COORD_ARRAY)); glsafe(::glDrawArrays(GL_TRIANGLES, 0, (GLsizei)m_triangles.get_vertices_count())); - if (tex_coords_id != -1) - glsafe(::glDisableVertexAttribArray(tex_coords_id)); - - if (position_id != -1) - glsafe(::glDisableVertexAttribArray(position_id)); + glsafe(::glDisableClientState(GL_TEXTURE_COORD_ARRAY)); + glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); @@ -488,19 +713,24 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) shader->stop_using(); } } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Bed3D::render_model(const Transform3d& view_matrix, const Transform3d& projection_matrix) +#else void Bed3D::render_model() +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { if (m_model_filename.empty()) return; if (m_model.get_filename() != m_model_filename && m_model.init_from_file(m_model_filename)) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_model.set_color(DEFAULT_MODEL_COLOR); #else m_model.set_color(-1, DEFAULT_MODEL_COLOR); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // move the model so that its origin (0.0, 0.0, 0.0) goes into the bed shape center and a bit down to avoid z-fighting with the texture quad m_model_offset = to_3d(m_build_volume.bounding_volume2d().center(), -0.03); @@ -514,33 +744,101 @@ void Bed3D::render_model() if (shader != nullptr) { shader->start_using(); shader->set_uniform("emission_factor", 0.0f); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d matrix = view_matrix * Geometry::assemble_transform(m_model_offset); + shader->set_uniform("view_model_matrix", matrix); + shader->set_uniform("projection_matrix", projection_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glPushMatrix()); glsafe(::glTranslated(m_model_offset.x(), m_model_offset.y(), m_model_offset.z())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_model.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES shader->stop_using(); } } } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Bed3D::render_custom(GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool show_texture, bool picking) +#else void Bed3D::render_custom(GLCanvas3D& canvas, bool bottom, bool show_texture, bool picking) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { if (m_texture_filename.empty() && m_model_filename.empty()) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_default(bottom, picking, view_matrix, projection_matrix); +#else render_default(bottom, picking); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES return; } if (!bottom) +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_model(view_matrix, projection_matrix); +#else render_model(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (show_texture) +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_texture(bottom, canvas, view_matrix, projection_matrix); +#else render_texture(bottom, canvas); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Bed3D::render_default(bool bottom, bool picking, const Transform3d& view_matrix, const Transform3d& projection_matrix) +#else void Bed3D::render_default(bool bottom, bool picking) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { m_texture.reset(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + init_gridlines(); + init_triangles(); + + GLShaderProgram* shader = wxGetApp().get_shader("flat"); + if (shader != nullptr) { + shader->start_using(); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + shader->set_uniform("view_model_matrix", view_matrix); + shader->set_uniform("projection_matrix", projection_matrix); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + + glsafe(::glEnable(GL_DEPTH_TEST)); + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + + const bool has_model = !m_model.get_filename().empty(); + + if (!has_model && !bottom) { + // draw background + glsafe(::glDepthMask(GL_FALSE)); + m_triangles.set_color(picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR); + m_triangles.render(); + glsafe(::glDepthMask(GL_TRUE)); + } + + if (!picking) { + // draw grid + glsafe(::glLineWidth(1.5f * m_scale_factor)); + m_gridlines.set_color(has_model && !bottom ? DEFAULT_SOLID_GRID_COLOR : DEFAULT_TRANSPARENT_GRID_COLOR); + m_gridlines.render(); + } + + glsafe(::glDisable(GL_BLEND)); + + shader->stop_using(); + } +#else const unsigned int triangles_vcount = m_triangles.get_vertices_count(); if (triangles_vcount > 0) { const bool has_model = !m_model.get_filename().empty(); @@ -573,8 +871,10 @@ void Bed3D::render_default(bool bottom, bool picking) glsafe(::glDisable(GL_BLEND)); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } +#if !ENABLE_LEGACY_OPENGL_REMOVAL void Bed3D::release_VBOs() { if (m_vbo_id > 0) { @@ -582,6 +882,7 @@ void Bed3D::release_VBOs() m_vbo_id = 0; } } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL } // GUI } // Slic3r diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp index 82c6b817b..7c334cb93 100644 --- a/src/slic3r/GUI/3DBed.hpp +++ b/src/slic3r/GUI/3DBed.hpp @@ -5,7 +5,10 @@ #include "3DScene.hpp" #include "GLModel.hpp" -#include +#include "libslic3r/BuildVolume.hpp" +#if ENABLE_LEGACY_OPENGL_REMOVAL +#include "libslic3r/ExPolygon.hpp" +#endif // ENABLE_LEGACY_OPENGL_REMOVAL #include #include @@ -15,6 +18,7 @@ namespace GUI { class GLCanvas3D; +#if !ENABLE_LEGACY_OPENGL_REMOVAL class GeometryBuffer { struct Vertex @@ -36,6 +40,7 @@ public: size_t get_tex_coords_offset() const { return (size_t)(3 * sizeof(float)); } unsigned int get_vertices_count() const { return (unsigned int)m_vertices.size(); } }; +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL class Bed3D { @@ -79,23 +84,38 @@ private: std::string m_model_filename; // Print volume bounding box exteded with axes and model. BoundingBoxf3 m_extended_bounding_box; +#if ENABLE_LEGACY_OPENGL_REMOVAL + // Print bed polygon + ExPolygon m_contour; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Slightly expanded print bed polygon, for collision detection. Polygon m_polygon; +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLModel m_triangles; + GLModel m_gridlines; +#else GeometryBuffer m_triangles; GeometryBuffer m_gridlines; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL GLTexture m_texture; // temporary texture shown until the main texture has still no levels compressed GLTexture m_temp_texture; GLModel m_model; Vec3d m_model_offset{ Vec3d::Zero() }; +#if !ENABLE_LEGACY_OPENGL_REMOVAL unsigned int m_vbo_id{ 0 }; +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL Axes m_axes; float m_scale_factor{ 1.0f }; public: Bed3D() = default; +#if ENABLE_LEGACY_OPENGL_REMOVAL + ~Bed3D() = default; +#else ~Bed3D() { release_VBOs(); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Update print bed model from configuration. // Return true if the bed shape changed, so the calee will update the UI. @@ -119,24 +139,50 @@ public: bool contains(const Point& point) const; Point point_projection(const Point& point) const; +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render(GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, float scale_factor, bool show_axes, bool show_texture); + void render_for_picking(GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, float scale_factor); +#else void render(GLCanvas3D& canvas, bool bottom, float scale_factor, bool show_axes, bool show_texture); void render_for_picking(GLCanvas3D& canvas, bool bottom, float scale_factor); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES private: // Calculate an extended bounding box from axes and current model for visualization purposes. BoundingBoxf3 calc_extended_bounding_box() const; +#if ENABLE_LEGACY_OPENGL_REMOVAL + void init_triangles(); + void init_gridlines(); +#else void calc_triangles(const ExPolygon& poly); void calc_gridlines(const ExPolygon& poly, const BoundingBox& bed_bbox); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL static std::tuple detect_type(const Pointfs& shape); +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render_internal(GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, float scale_factor, + bool show_axes, bool show_texture, bool picking); +#else void render_internal(GLCanvas3D& canvas, bool bottom, float scale_factor, bool show_axes, bool show_texture, bool picking); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES void render_axes(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render_system(GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool show_texture); + void render_texture(bool bottom, GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix); + void render_model(const Transform3d& view_matrix, const Transform3d& projection_matrix); + void render_custom(GLCanvas3D& canvas, const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool show_texture, bool picking); + void render_default(bool bottom, bool picking, const Transform3d& view_matrix, const Transform3d& projection_matrix); +#else void render_system(GLCanvas3D& canvas, bool bottom, bool show_texture); void render_texture(bool bottom, GLCanvas3D& canvas); void render_model(); void render_custom(GLCanvas3D& canvas, bool bottom, bool show_texture, bool picking); void render_default(bool bottom, bool picking); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + +#if !ENABLE_LEGACY_OPENGL_REMOVAL void release_VBOs(); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL }; } // GUI diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 4e929d060..f25b89da8 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -1,16 +1,21 @@ #include +#if !ENABLE_LEGACY_OPENGL_REMOVAL #if ENABLE_SMOOTH_NORMALS #include #include #include #endif // ENABLE_SMOOTH_NORMALS +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL #include "3DScene.hpp" #include "GLShader.hpp" #include "GUI_App.hpp" #include "Plater.hpp" #include "BitmapCache.hpp" +#if ENABLE_GL_SHADERS_ATTRIBUTES +#include "Camera.hpp" +#endif // ENABLE_GL_SHADERS_ATTRIBUTES #include "libslic3r/BuildVolume.hpp" #include "libslic3r/ExtrusionEntity.hpp" @@ -69,6 +74,7 @@ void glAssertRecentCallImpl(const char* file_name, unsigned int line, const char namespace Slic3r { +#if !ENABLE_LEGACY_OPENGL_REMOVAL #if ENABLE_SMOOTH_NORMALS static void smooth_normals_corner(TriangleMesh& mesh, std::vector& normals) { @@ -287,6 +293,7 @@ void GLIndexedVertexArray::render( glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL const float GLVolume::SinkingContours::HalfWidth = 0.25f; @@ -294,10 +301,22 @@ void GLVolume::SinkingContours::render() { update(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + GLShaderProgram* shader = GUI::wxGetApp().get_current_shader(); + if (shader == nullptr) + return; + + const GUI::Camera& camera = GUI::wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix() * Geometry::assemble_transform(m_shift)); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#else glsafe(::glPushMatrix()); glsafe(::glTranslated(m_shift.x(), m_shift.y(), m_shift.z())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_model.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } void GLVolume::SinkingContours::update() @@ -315,24 +334,24 @@ void GLVolume::SinkingContours::update() m_model.reset(); GUI::GLModel::Geometry init_data; -#if ENABLE_GLBEGIN_GLEND_REMOVAL - init_data.format = { GUI::GLModel::Geometry::EPrimitiveType::Triangles, GUI::GLModel::Geometry::EVertexLayout::P3, GUI::GLModel::Geometry::EIndexType::UINT }; +#if ENABLE_LEGACY_OPENGL_REMOVAL + init_data.format = { GUI::GLModel::Geometry::EPrimitiveType::Triangles, GUI::GLModel::Geometry::EVertexLayout::P3 }; init_data.color = ColorRGBA::WHITE(); unsigned int vertices_counter = 0; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL MeshSlicingParams slicing_params; slicing_params.trafo = m_parent.world_matrix(); const Polygons polygons = union_(slice_mesh(mesh.its, 0.0f, slicing_params)); for (const ExPolygon& expoly : diff_ex(expand(polygons, float(scale_(HalfWidth))), shrink(polygons, float(scale_(HalfWidth))))) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL const std::vector triangulation = triangulate_expolygon_3d(expoly); - init_data.vertices.reserve(init_data.vertices.size() + triangulation.size() * GUI::GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(init_data.indices.size() + triangulation.size() * GUI::GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.reserve_vertices(init_data.vertices_count() + triangulation.size()); + init_data.reserve_indices(init_data.indices_count() + triangulation.size()); for (const Vec3d& v : triangulation) { init_data.add_vertex((Vec3f)(v.cast() + 0.015f * Vec3f::UnitZ())); // add a small positive z to avoid z-fighting ++vertices_counter; if (vertices_counter % 3 == 0) - init_data.add_uint_triangle(vertices_counter - 3, vertices_counter - 2, vertices_counter - 1); + init_data.add_triangle(vertices_counter - 3, vertices_counter - 2, vertices_counter - 1); } } m_model.init_from(std::move(init_data)); @@ -356,7 +375,7 @@ void GLVolume::SinkingContours::update() init_data.entities.emplace_back(entity); } m_model.init_from(init_data); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } else m_shift = box.center() - m_old_box.center(); @@ -371,15 +390,27 @@ void GLVolume::NonManifoldEdges::render() update(); glsafe(::glLineWidth(2.0f)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + GLShaderProgram* shader = GUI::wxGetApp().get_current_shader(); + if (shader == nullptr) + return; + + const GUI::Camera& camera = GUI::wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix() * m_parent.world_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#else glsafe(::glPushMatrix()); glsafe(::glMultMatrixd(m_parent.world_matrix().data())); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_LEGACY_OPENGL_REMOVAL m_model.set_color(complementary(m_parent.render_color)); #else m_model.set_color(-1, complementary(m_parent.render_color)); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_model.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } void GLVolume::NonManifoldEdges::update() @@ -399,10 +430,10 @@ void GLVolume::NonManifoldEdges::update() const std::vector> edges = its_get_open_edges(mesh.its); if (!edges.empty()) { GUI::GLModel::Geometry init_data; -#if ENABLE_GLBEGIN_GLEND_REMOVAL - init_data.format = { GUI::GLModel::Geometry::EPrimitiveType::Lines, GUI::GLModel::Geometry::EVertexLayout::P3, GUI::GLModel::Geometry::EIndexType::UINT }; - init_data.vertices.reserve(2 * edges.size() * GUI::GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(2 * edges.size() * GUI::GLModel::Geometry::index_stride_bytes(init_data.format)); +#if ENABLE_LEGACY_OPENGL_REMOVAL + init_data.format = { GUI::GLModel::Geometry::EPrimitiveType::Lines, GUI::GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(2 * edges.size()); + init_data.reserve_indices(2 * edges.size()); // vertices + indices unsigned int vertices_count = 0; @@ -410,7 +441,7 @@ void GLVolume::NonManifoldEdges::update() init_data.add_vertex((Vec3f)mesh.its.vertices[edge.first].cast()); init_data.add_vertex((Vec3f)mesh.its.vertices[edge.second].cast()); vertices_count += 2; - init_data.add_uint_line(vertices_count - 2, vertices_count - 1); + init_data.add_line(vertices_count - 2, vertices_count - 1); } m_model.init_from(std::move(init_data)); #else @@ -431,7 +462,7 @@ void GLVolume::NonManifoldEdges::update() init_data.entities.emplace_back(entity); m_model.init_from(init_data); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } } @@ -480,7 +511,9 @@ GLVolume::GLVolume(float r, float g, float b, float a) , force_neutral_color(false) , force_sinking_contours(false) , tverts_range(0, size_t(-1)) +#if !ENABLE_LEGACY_OPENGL_REMOVAL , qverts_range(0, size_t(-1)) +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL { color = { r, g, b, a }; set_render_color(color); @@ -596,6 +629,36 @@ const BoundingBoxf3& GLVolume::transformed_non_sinking_bounding_box() const return *m_transformed_non_sinking_bounding_box; } +#if ENABLE_LEGACY_OPENGL_REMOVAL +void GLVolume::set_range(double min_z, double max_z) +{ + this->tverts_range.first = 0; + this->tverts_range.second = this->model.indices_count(); + + if (!this->print_zs.empty()) { + // The Z layer range is specified. + // First test whether the Z span of this object is not out of (min_z, max_z) completely. + if (this->print_zs.front() > max_z || this->print_zs.back() < min_z) + this->tverts_range.second = 0; + else { + // Then find the lowest layer to be displayed. + size_t i = 0; + for (; i < this->print_zs.size() && this->print_zs[i] < min_z; ++i); + if (i == this->print_zs.size()) + // This shall not happen. + this->tverts_range.second = 0; + else { + // Remember start of the layer. + this->tverts_range.first = this->offsets[i]; + // Some layers are above $min_z. Which? + for (; i < this->print_zs.size() && this->print_zs[i] <= max_z; ++i); + if (i < this->print_zs.size()) + this->tverts_range.second = this->offsets[i]; + } + } + } +} +#else void GLVolume::set_range(double min_z, double max_z) { this->qverts_range.first = 0; @@ -608,7 +671,8 @@ void GLVolume::set_range(double min_z, double max_z) if (this->print_zs.front() > max_z || this->print_zs.back() < min_z) { this->qverts_range.second = 0; this->tverts_range.second = 0; - } else { + } + else { // Then find the lowest layer to be displayed. size_t i = 0; for (; i < this->print_zs.size() && this->print_zs[i] < min_z; ++ i); @@ -616,7 +680,8 @@ void GLVolume::set_range(double min_z, double max_z) // This shall not happen. this->qverts_range.second = 0; this->tverts_range.second = 0; - } else { + } + else { // Remember start of the layer. this->qverts_range.first = this->offsets[i * 2]; this->tverts_range.first = this->offsets[i * 2 + 1]; @@ -630,21 +695,40 @@ void GLVolume::set_range(double min_z, double max_z) } } } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL -void GLVolume::render() const +void GLVolume::render() { if (!is_active) return; +#if ENABLE_GL_SHADERS_ATTRIBUTES + GLShaderProgram* shader = GUI::wxGetApp().get_current_shader(); + if (shader == nullptr) + return; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + if (this->is_left_handed()) glFrontFace(GL_CW); glsafe(::glCullFace(GL_BACK)); - glsafe(::glPushMatrix()); - glsafe(::glMultMatrixd(world_matrix().data())); +#if !ENABLE_GL_SHADERS_ATTRIBUTES + glsafe(::glPushMatrix()); + glsafe(::glMultMatrixd(world_matrix().data())); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_LEGACY_OPENGL_REMOVAL + if (tverts_range == std::make_pair(0, -1)) + model.render(); + else + model.render(this->tverts_range); +#else this->indexed_vertex_array.render(this->tverts_range, this->qverts_range); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + +#if !ENABLE_GL_SHADERS_ATTRIBUTES + glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES - glsafe(::glPopMatrix()); if (this->is_left_handed()) glFrontFace(GL_CCW); } @@ -677,46 +761,68 @@ void GLVolume::render_non_manifold_edges() } #endif // ENABLE_SHOW_NON_MANIFOLD_EDGES +#if ENABLE_LEGACY_OPENGL_REMOVAL +std::vector GLVolumeCollection::load_object( + const ModelObject* model_object, + int obj_idx, + const std::vector& instance_idxs) +#else std::vector GLVolumeCollection::load_object( const ModelObject *model_object, int obj_idx, const std::vector &instance_idxs, - const std::string &color_by, bool opengl_initialized) +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { std::vector volumes_idx; for (int volume_idx = 0; volume_idx < int(model_object->volumes.size()); ++volume_idx) for (int instance_idx : instance_idxs) - volumes_idx.emplace_back(this->GLVolumeCollection::load_object_volume(model_object, obj_idx, volume_idx, instance_idx, color_by, opengl_initialized)); +#if ENABLE_LEGACY_OPENGL_REMOVAL + volumes_idx.emplace_back(this->GLVolumeCollection::load_object_volume(model_object, obj_idx, volume_idx, instance_idx)); +#else + volumes_idx.emplace_back(this->GLVolumeCollection::load_object_volume(model_object, obj_idx, volume_idx, instance_idx, opengl_initialized)); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL return volumes_idx; } +#if ENABLE_LEGACY_OPENGL_REMOVAL +int GLVolumeCollection::load_object_volume( + const ModelObject* model_object, + int obj_idx, + int volume_idx, + int instance_idx) +#else int GLVolumeCollection::load_object_volume( const ModelObject *model_object, int obj_idx, int volume_idx, int instance_idx, - const std::string &color_by, bool opengl_initialized) +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { const ModelVolume *model_volume = model_object->volumes[volume_idx]; const int extruder_id = model_volume->extruder_id(); const ModelInstance *instance = model_object->instances[instance_idx]; const TriangleMesh &mesh = model_volume->mesh(); - ColorRGBA color = GLVolume::MODEL_COLOR[((color_by == "volume") ? volume_idx : obj_idx) % 4]; - color.a(model_volume->is_model_part() ? 1.0f : 0.5f); - this->volumes.emplace_back(new GLVolume(color)); + this->volumes.emplace_back(new GLVolume()); GLVolume& v = *this->volumes.back(); v.set_color(color_from_model_volume(*model_volume)); +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_SMOOTH_NORMALS + v.model.init_from(mesh, true); +#else + v.model.init_from(mesh); +#endif // ENABLE_SMOOTH_NORMALS +#else #if ENABLE_SMOOTH_NORMALS v.indexed_vertex_array.load_mesh(mesh, true); #else v.indexed_vertex_array.load_mesh(mesh); #endif // ENABLE_SMOOTH_NORMALS v.indexed_vertex_array.finalize_geometry(opengl_initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL v.composite_id = GLVolume::CompositeID(obj_idx, volume_idx, instance_idx); - if (model_volume->is_model_part()) - { + if (model_volume->is_model_part()) { // GLVolume will reference a convex hull from model_volume! v.set_convex_hull(model_volume->get_convex_hull_shared_ptr()); if (extruder_id != -1) @@ -733,6 +839,16 @@ int GLVolumeCollection::load_object_volume( // Load SLA auxiliary GLVolumes (for support trees or pad). // This function produces volumes for multiple instances in a single shot, // as some object specific mesh conversions may be expensive. +#if ENABLE_LEGACY_OPENGL_REMOVAL +void GLVolumeCollection::load_object_auxiliary( + const SLAPrintObject* print_object, + int obj_idx, + // pairs of + const std::vector>& instances, + SLAPrintObjectStep milestone, + // Timestamp of the last change of the milestone + size_t timestamp) +#else void GLVolumeCollection::load_object_auxiliary( const SLAPrintObject *print_object, int obj_idx, @@ -742,6 +858,7 @@ void GLVolumeCollection::load_object_auxiliary( // Timestamp of the last change of the milestone size_t timestamp, bool opengl_initialized) +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { assert(print_object->is_step_done(milestone)); Transform3d mesh_trafo_inv = print_object->trafo().inverse(); @@ -754,12 +871,21 @@ void GLVolumeCollection::load_object_auxiliary( const ModelInstance& model_instance = *print_object->model_object()->instances[instance_idx.first]; this->volumes.emplace_back(new GLVolume((milestone == slaposPad) ? GLVolume::SLA_PAD_COLOR : GLVolume::SLA_SUPPORT_COLOR)); GLVolume& v = *this->volumes.back(); +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_SMOOTH_NORMALS + v.model.init_from(mesh, true); +#else + v.model.init_from(mesh); +#endif // ENABLE_SMOOTH_NORMALS + v.model.set_color((milestone == slaposPad) ? GLVolume::SLA_PAD_COLOR : GLVolume::SLA_SUPPORT_COLOR); +#else #if ENABLE_SMOOTH_NORMALS v.indexed_vertex_array.load_mesh(mesh, true); #else v.indexed_vertex_array.load_mesh(mesh); #endif // ENABLE_SMOOTH_NORMALS v.indexed_vertex_array.finalize_geometry(opengl_initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL v.composite_id = GLVolume::CompositeID(obj_idx, -int(milestone), (int)instance_idx.first); v.geometry_id = std::pair(timestamp, model_instance.id().id); // Create a copy of the convex hull mesh for each instance. Use a move operator on the last instance. @@ -775,6 +901,17 @@ void GLVolumeCollection::load_object_auxiliary( } } +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL +int GLVolumeCollection::load_wipe_tower_preview( + float pos_x, float pos_y, float width, float depth, float height, + float rotation_angle, bool size_unknown, float brim_width) +#else +int GLVolumeCollection::load_wipe_tower_preview( + int obj_idx, float pos_x, float pos_y, float width, float depth, float height, + float rotation_angle, bool size_unknown, float brim_width) +#endif // ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL +#else #if ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL int GLVolumeCollection::load_wipe_tower_preview( float pos_x, float pos_y, float width, float depth, float height, @@ -784,6 +921,7 @@ int GLVolumeCollection::load_wipe_tower_preview( int obj_idx, float pos_x, float pos_y, float width, float depth, float height, float rotation_angle, bool size_unknown, float brim_width, bool opengl_initialized) #endif // ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { if (depth < 0.01f) return int(this->volumes.size() - 1); @@ -840,9 +978,16 @@ int GLVolumeCollection::load_wipe_tower_preview( volumes.emplace_back(new GLVolume(color)); GLVolume& v = *volumes.back(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + v.model.init_from(mesh); + v.model.set_color(color); +#else v.indexed_vertex_array.load_mesh(mesh); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL v.set_convex_hull(mesh.convex_hull_3d()); +#if !ENABLE_LEGACY_OPENGL_REMOVAL v.indexed_vertex_array.finalize_geometry(opengl_initialized); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL v.set_volume_offset(Vec3d(pos_x, pos_y, 0.0)); v.set_volume_rotation(Vec3d(0., 0., (M_PI / 180.) * rotation_angle)); #if ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL @@ -857,6 +1002,22 @@ int GLVolumeCollection::load_wipe_tower_preview( return int(volumes.size() - 1); } +#if ENABLE_LEGACY_OPENGL_REMOVAL +GLVolume* GLVolumeCollection::new_toolpath_volume(const ColorRGBA& rgba) +{ + GLVolume* out = new_nontoolpath_volume(rgba); + out->is_extrusion_path = true; + return out; +} + +GLVolume* GLVolumeCollection::new_nontoolpath_volume(const ColorRGBA& rgba) +{ + GLVolume* out = new GLVolume(rgba); + out->is_extrusion_path = false; + this->volumes.emplace_back(out); + return out; +} +#else GLVolume* GLVolumeCollection::new_toolpath_volume(const ColorRGBA& rgba, size_t reserve_vbo_floats) { GLVolume *out = new_nontoolpath_volume(rgba, reserve_vbo_floats); @@ -873,6 +1034,7 @@ GLVolume* GLVolumeCollection::new_nontoolpath_volume(const ColorRGBA& rgba, size this->volumes.emplace_back(out); return out; } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL GLVolumeWithIdAndZList volumes_to_render(const GLVolumePtrs& volumes, GLVolumeCollection::ERenderType type, const Transform3d& view_matrix, std::function filter_func) { @@ -907,7 +1069,12 @@ GLVolumeWithIdAndZList volumes_to_render(const GLVolumePtrs& volumes, GLVolumeCo return list; } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disable_cullface, const Transform3d& view_matrix, const Transform3d& projection_matrix, + std::function filter_func) const +#else void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disable_cullface, const Transform3d& view_matrix, std::function filter_func) const +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { GLVolumeWithIdAndZList to_render = volumes_to_render(volumes, type, view_matrix, filter_func); if (to_render.empty()) @@ -917,10 +1084,10 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab if (shader == nullptr) return; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* sink_shader = GUI::wxGetApp().get_shader("flat"); GLShaderProgram* edges_shader = GUI::wxGetApp().get_shader("flat"); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (type == ERenderType::Transparent) { glsafe(::glEnable(GL_BLEND)); @@ -935,35 +1102,36 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab volume.first->set_render_color(true); // render sinking contours of non-hovered volumes -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); if (sink_shader != nullptr) { sink_shader->start_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (m_show_sinking_contours) { if (volume.first->is_sinking() && !volume.first->is_below_printbed() && volume.first->hover == GLVolume::HS_None && !volume.first->force_sinking_contours) { -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL volume.first->render_sinking_contours(); -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL shader->start_using(); -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL } } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL sink_shader->stop_using(); } shader->start_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL - glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); - glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); +#if !ENABLE_GL_SHADERS_ATTRIBUTES + glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); + glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES - shader->set_uniform("uniform_color", volume.first->render_color); - shader->set_uniform("z_range", m_z_range, 2); - shader->set_uniform("clipping_plane", m_clipping_plane, 4); + shader->set_uniform("z_range", m_z_range); + shader->set_uniform("clipping_plane", m_clipping_plane); shader->set_uniform("print_volume.type", static_cast(m_print_volume.type)); shader->set_uniform("print_volume.xy_data", m_print_volume.data); shader->set_uniform("print_volume.z_data", m_print_volume.zs); @@ -981,6 +1149,17 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab #endif // ENABLE_ENVIRONMENT_MAP glcheck(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + volume.first->model.set_color(volume.first->render_color); +#else + shader->set_uniform("uniform_color", volume.first->render_color); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d matrix = view_matrix * volume.first->world_matrix(); + shader->set_uniform("view_model_matrix", matrix); + shader->set_uniform("projection_matrix", projection_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES volume.first->render(); #if ENABLE_ENVIRONMENT_MAP @@ -991,54 +1170,56 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } if (m_show_sinking_contours) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); if (sink_shader != nullptr) { sink_shader->start_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL for (GLVolumeWithIdAndZ& volume : to_render) { // render sinking contours of hovered/displaced volumes if (volume.first->is_sinking() && !volume.first->is_below_printbed() && (volume.first->hover != GLVolume::HS_None || volume.first->force_sinking_contours)) { -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glDepthFunc(GL_ALWAYS)); volume.first->render_sinking_contours(); glsafe(::glDepthFunc(GL_LESS)); -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL shader->start_using(); -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL } } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL sink_shader->start_using(); } shader->start_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } #if ENABLE_SHOW_NON_MANIFOLD_EDGES -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); if (edges_shader != nullptr) { edges_shader->start_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (m_show_non_manifold_edges && GUI::wxGetApp().app_config->get("non_manifold_edges") == "1") { for (GLVolumeWithIdAndZ& volume : to_render) { volume.first->render_non_manifold_edges(); } } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL edges_shader->stop_using(); } shader->start_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL #endif // ENABLE_SHOW_NON_MANIFOLD_EDGES if (disable_cullface) @@ -1216,6 +1397,466 @@ std::string GLVolumeCollection::log_memory_info() const return " (GLVolumeCollection RAM: " + format_memsize_MB(this->cpu_memory_used()) + " GPU: " + format_memsize_MB(this->gpu_memory_used()) + " Both: " + format_memsize_MB(this->gpu_memory_used()) + ")"; } +#if ENABLE_LEGACY_OPENGL_REMOVAL +static void thick_lines_to_geometry( + const Lines& lines, + const std::vector& widths, + const std::vector& heights, + bool closed, + double top_z, + GUI::GLModel::Geometry& geometry) +{ + assert(!lines.empty()); + if (lines.empty()) + return; + + enum Direction : unsigned char + { + Left, + Right, + Top, + Bottom + }; + + // right, left, top, bottom + std::array idx_prev = { -1, -1, -1, -1 }; + std::array idx_initial = { -1, -1, -1, -1 }; + + double bottom_z_prev = 0.0; + Vec2d b1_prev(Vec2d::Zero()); + Vec2d v_prev(Vec2d::Zero()); + double len_prev = 0.0; + double width_initial = 0.0; + double bottom_z_initial = 0.0; + + // loop once more in case of closed loops + const size_t lines_end = closed ? (lines.size() + 1) : lines.size(); + for (size_t ii = 0; ii < lines_end; ++ii) { + const size_t i = (ii == lines.size()) ? 0 : ii; + const Line& line = lines[i]; + const double bottom_z = top_z - heights[i]; + const double middle_z = 0.5 * (top_z + bottom_z); + const double width = widths[i]; + + const bool is_first = (ii == 0); + const bool is_last = (ii == lines_end - 1); + const bool is_closing = closed && is_last; + + const Vec2d v = unscale(line.vector()).normalized(); + const double len = unscale(line.length()); + + const Vec2d a = unscale(line.a); + const Vec2d b = unscale(line.b); + Vec2d a1 = a; + Vec2d a2 = a; + Vec2d b1 = b; + Vec2d b2 = b; + { + const double dist = 0.5 * width; // scaled + const double dx = dist * v.x(); + const double dy = dist * v.y(); + a1 += Vec2d(+dy, -dx); + a2 += Vec2d(-dy, +dx); + b1 += Vec2d(+dy, -dx); + b2 += Vec2d(-dy, +dx); + } + + // calculate new XY normals + const Vec2d xy_right_normal = unscale(line.normal()).normalized(); + + std::array idx_a = { 0, 0, 0, 0 }; + std::array idx_b = { 0, 0, 0, 0 }; + int idx_last = int(geometry.vertices_count()); + + const bool bottom_z_different = bottom_z_prev != bottom_z; + bottom_z_prev = bottom_z; + + if (!is_first && bottom_z_different) { + // Found a change of the layer thickness -> Add a cap at the end of the previous segment. + geometry.add_triangle(idx_b[Bottom], idx_b[Left], idx_b[Top]); + geometry.add_triangle(idx_b[Bottom], idx_b[Top], idx_b[Right]); + } + + // Share top / bottom vertices if possible. + if (is_first) { + idx_a[Top] = idx_last++; + geometry.add_vertex(Vec3f(a.x(), a.y(), top_z), Vec3f(0.0f, 0.0f, 1.0f)); + } + else + idx_a[Top] = idx_prev[Top]; + + if (is_first || bottom_z_different) { + // Start of the 1st line segment or a change of the layer thickness while maintaining the print_z. + idx_a[Bottom] = idx_last++; + geometry.add_vertex(Vec3f(a.x(), a.y(), bottom_z), Vec3f(0.0f, 0.0f, -1.0f)); + idx_a[Left] = idx_last++; + geometry.add_vertex(Vec3f(a2.x(), a2.y(), middle_z), Vec3f(-xy_right_normal.x(), -xy_right_normal.y(), 0.0f)); + idx_a[Right] = idx_last++; + geometry.add_vertex(Vec3f(a1.x(), a1.y(), middle_z), Vec3f(xy_right_normal.x(), xy_right_normal.y(), 0.0f)); + } + else + idx_a[Bottom] = idx_prev[Bottom]; + + if (is_first) { + // Start of the 1st line segment. + width_initial = width; + bottom_z_initial = bottom_z; + idx_initial = idx_a; + } + else { + // Continuing a previous segment. + // Share left / right vertices if possible. + const double v_dot = v_prev.dot(v); + // To reduce gpu memory usage, we try to reuse vertices + // To reduce the visual artifacts, due to averaged normals, we allow to reuse vertices only when any of two adjacent edges + // is longer than a fixed threshold. + // The following value is arbitrary, it comes from tests made on a bunch of models showing the visual artifacts + const double len_threshold = 2.5; + + // Generate new vertices if the angle between adjacent edges is greater than 45 degrees or thresholds conditions are met + const bool sharp = (v_dot < 0.707) || (len_prev > len_threshold) || (len > len_threshold); + if (sharp) { + if (!bottom_z_different) { + // Allocate new left / right points for the start of this segment as these points will receive their own normals to indicate a sharp turn. + idx_a[Right] = idx_last++; + geometry.add_vertex(Vec3f(a1.x(), a1.y(), middle_z), Vec3f(xy_right_normal.x(), xy_right_normal.y(), 0.0f)); + idx_a[Left] = idx_last++; + geometry.add_vertex(Vec3f(a2.x(), a2.y(), middle_z), Vec3f(-xy_right_normal.x(), -xy_right_normal.y(), 0.0f)); + if (cross2(v_prev, v) > 0.0) { + // Right turn. Fill in the right turn wedge. + geometry.add_triangle(idx_prev[Right], idx_a[Right], idx_prev[Top]); + geometry.add_triangle(idx_prev[Right], idx_prev[Bottom], idx_a[Right]); + } + else { + // Left turn. Fill in the left turn wedge. + geometry.add_triangle(idx_prev[Left], idx_prev[Top], idx_a[Left]); + geometry.add_triangle(idx_prev[Left], idx_a[Left], idx_prev[Bottom]); + } + } + } + else { + if (!bottom_z_different) { + // The two successive segments are nearly collinear. + idx_a[Left] = idx_prev[Left]; + idx_a[Right] = idx_prev[Right]; + } + } + if (is_closing) { + if (!sharp) { + if (!bottom_z_different) { + // Closing a loop with smooth transition. Unify the closing left / right vertices. + geometry.set_vertex(idx_initial[Left], geometry.extract_position_3(idx_prev[Left]), geometry.extract_normal_3(idx_prev[Left])); + geometry.set_vertex(idx_initial[Right], geometry.extract_position_3(idx_prev[Right]), geometry.extract_normal_3(idx_prev[Right])); + geometry.remove_vertex(geometry.vertices_count() - 1); + geometry.remove_vertex(geometry.vertices_count() - 1); + // Replace the left / right vertex indices to point to the start of the loop. + const size_t indices_count = geometry.indices_count(); + for (size_t u = indices_count - 24; u < indices_count; ++u) { + const unsigned int id = geometry.extract_index(u); + if (id == (unsigned int)idx_prev[Left]) + geometry.set_index(u, (unsigned int)idx_initial[Left]); + else if (id == (unsigned int)idx_prev[Right]) + geometry.set_index(u, (unsigned int)idx_initial[Right]); + } + } + } + // This is the last iteration, only required to solve the transition. + break; + } + } + + // Only new allocate top / bottom vertices, if not closing a loop. + if (is_closing) + idx_b[Top] = idx_initial[Top]; + else { + idx_b[Top] = idx_last++; + geometry.add_vertex(Vec3f(b.x(), b.y(), top_z), Vec3f(0.0f, 0.0f, 1.0f)); + } + + if (is_closing && width == width_initial && bottom_z == bottom_z_initial) + idx_b[Bottom] = idx_initial[Bottom]; + else { + idx_b[Bottom] = idx_last++; + geometry.add_vertex(Vec3f(b.x(), b.y(), bottom_z), Vec3f(0.0f, 0.0f, -1.0f)); + } + // Generate new vertices for the end of this line segment. + idx_b[Left] = idx_last++; + geometry.add_vertex(Vec3f(b2.x(), b2.y(), middle_z), Vec3f(-xy_right_normal.x(), -xy_right_normal.y(), 0.0f)); + idx_b[Right] = idx_last++; + geometry.add_vertex(Vec3f(b1.x(), b1.y(), middle_z), Vec3f(xy_right_normal.x(), xy_right_normal.y(), 0.0f)); + + idx_prev = idx_b; + bottom_z_prev = bottom_z; + b1_prev = b1; + v_prev = v; + len_prev = len; + + if (bottom_z_different && (closed || (!is_first && !is_last))) { + // Found a change of the layer thickness -> Add a cap at the beginning of this segment. + geometry.add_triangle(idx_a[Bottom], idx_a[Right], idx_a[Top]); + geometry.add_triangle(idx_a[Bottom], idx_a[Top], idx_a[Left]); + } + + if (!closed) { + // Terminate open paths with caps. + if (is_first) { + geometry.add_triangle(idx_a[Bottom], idx_a[Right], idx_a[Top]); + geometry.add_triangle(idx_a[Bottom], idx_a[Top], idx_a[Left]); + } + // We don't use 'else' because both cases are true if we have only one line. + if (is_last) { + geometry.add_triangle(idx_b[Bottom], idx_b[Left], idx_b[Top]); + geometry.add_triangle(idx_b[Bottom], idx_b[Top], idx_b[Right]); + } + } + + // Add quads for a straight hollow tube-like segment. + // bottom-right face + geometry.add_triangle(idx_a[Bottom], idx_b[Bottom], idx_b[Right]); + geometry.add_triangle(idx_a[Bottom], idx_b[Right], idx_a[Right]); + // top-right face + geometry.add_triangle(idx_a[Right], idx_b[Right], idx_b[Top]); + geometry.add_triangle(idx_a[Right], idx_b[Top], idx_a[Top]); + // top-left face + geometry.add_triangle(idx_a[Top], idx_b[Top], idx_b[Left]); + geometry.add_triangle(idx_a[Top], idx_b[Left], idx_a[Left]); + // bottom-left face + geometry.add_triangle(idx_a[Left], idx_b[Left], idx_b[Bottom]); + geometry.add_triangle(idx_a[Left], idx_b[Bottom], idx_a[Bottom]); + } +} + +// caller is responsible for supplying NO lines with zero length +static void thick_lines_to_geometry( + const Lines3& lines, + const std::vector& widths, + const std::vector& heights, + bool closed, + GUI::GLModel::Geometry& geometry) +{ + assert(!lines.empty()); + if (lines.empty()) + return; + + enum Direction : unsigned char + { + Left, + Right, + Top, + Bottom + }; + + // left, right, top, bottom + std::array idx_prev = { -1, -1, -1, -1 }; + std::array idx_initial = { -1, -1, -1, -1 }; + + double z_prev = 0.0; + double len_prev = 0.0; + Vec3d n_right_prev = Vec3d::Zero(); + Vec3d n_top_prev = Vec3d::Zero(); + Vec3d unit_v_prev = Vec3d::Zero(); + double width_initial = 0.0; + + // new vertices around the line endpoints + // left, right, top, bottom + std::array a = { Vec3d::Zero(), Vec3d::Zero(), Vec3d::Zero(), Vec3d::Zero() }; + std::array b = { Vec3d::Zero(), Vec3d::Zero(), Vec3d::Zero(), Vec3d::Zero() }; + + // loop once more in case of closed loops + const size_t lines_end = closed ? (lines.size() + 1) : lines.size(); + for (size_t ii = 0; ii < lines_end; ++ii) { + const size_t i = (ii == lines.size()) ? 0 : ii; + + const Line3& line = lines[i]; + const double height = heights[i]; + const double width = widths[i]; + + const Vec3d unit_v = unscale(line.vector()).normalized(); + const double len = unscale(line.length()); + + Vec3d n_top = Vec3d::Zero(); + Vec3d n_right = Vec3d::Zero(); + + if (line.a.x() == line.b.x() && line.a.y() == line.b.y()) { + // vertical segment + n_top = Vec3d::UnitY(); + n_right = Vec3d::UnitX(); + if (line.a.z() < line.b.z()) + n_right = -n_right; + } + else { + // horizontal segment + n_right = unit_v.cross(Vec3d::UnitZ()).normalized(); + n_top = n_right.cross(unit_v).normalized(); + } + + const Vec3d rl_displacement = 0.5 * width * n_right; + const Vec3d tb_displacement = 0.5 * height * n_top; + const Vec3d l_a = unscale(line.a); + const Vec3d l_b = unscale(line.b); + + a[Right] = l_a + rl_displacement; + a[Left] = l_a - rl_displacement; + a[Top] = l_a + tb_displacement; + a[Bottom] = l_a - tb_displacement; + b[Right] = l_b + rl_displacement; + b[Left] = l_b - rl_displacement; + b[Top] = l_b + tb_displacement; + b[Bottom] = l_b - tb_displacement; + + const Vec3d n_bottom = -n_top; + const Vec3d n_left = -n_right; + + std::array idx_a = { 0, 0, 0, 0}; + std::array idx_b = { 0, 0, 0, 0 }; + int idx_last = int(geometry.vertices_count()); + + const bool z_different = (z_prev != l_a.z()); + z_prev = l_b.z(); + + // Share top / bottom vertices if possible. + if (ii == 0) { + idx_a[Top] = idx_last++; + geometry.add_vertex((Vec3f)a[Top].cast(), (Vec3f)n_top.cast()); + } + else + idx_a[Top] = idx_prev[Top]; + + if (ii == 0 || z_different) { + // Start of the 1st line segment or a change of the layer thickness while maintaining the print_z. + idx_a[Bottom] = idx_last++; + geometry.add_vertex((Vec3f)a[Bottom].cast(), (Vec3f)n_bottom.cast()); + idx_a[Left] = idx_last++; + geometry.add_vertex((Vec3f)a[Left].cast(), (Vec3f)n_left.cast()); + idx_a[Right] = idx_last++; + geometry.add_vertex((Vec3f)a[Right].cast(), (Vec3f)n_right.cast()); + } + else + idx_a[Bottom] = idx_prev[Bottom]; + + if (ii == 0) { + // Start of the 1st line segment. + width_initial = width; + idx_initial = idx_a; + } + else { + // Continuing a previous segment. + // Share left / right vertices if possible. + const double v_dot = unit_v_prev.dot(unit_v); + const bool is_right_turn = n_top_prev.dot(unit_v_prev.cross(unit_v)) > 0.0; + + // To reduce gpu memory usage, we try to reuse vertices + // To reduce the visual artifacts, due to averaged normals, we allow to reuse vertices only when any of two adjacent edges + // is longer than a fixed threshold. + // The following value is arbitrary, it comes from tests made on a bunch of models showing the visual artifacts + const double len_threshold = 2.5; + + // Generate new vertices if the angle between adjacent edges is greater than 45 degrees or thresholds conditions are met + const bool is_sharp = v_dot < 0.707 || len_prev > len_threshold || len > len_threshold; + if (is_sharp) { + // Allocate new left / right points for the start of this segment as these points will receive their own normals to indicate a sharp turn. + idx_a[Right] = idx_last++; + geometry.add_vertex((Vec3f)a[Right].cast(), (Vec3f)n_right.cast()); + idx_a[Left] = idx_last++; + geometry.add_vertex((Vec3f)a[Left].cast(), (Vec3f)n_left.cast()); + + if (is_right_turn) { + // Right turn. Fill in the right turn wedge. + geometry.add_triangle(idx_prev[Right], idx_a[Right], idx_prev[Top]); + geometry.add_triangle(idx_prev[Right], idx_prev[Bottom], idx_a[Right]); + } + else { + // Left turn. Fill in the left turn wedge. + geometry.add_triangle(idx_prev[Left], idx_prev[Top], idx_a[Left]); + geometry.add_triangle(idx_prev[Left], idx_a[Left], idx_prev[Bottom]); + } + } + else { + // The two successive segments are nearly collinear. + idx_a[Left] = idx_prev[Left]; + idx_a[Right] = idx_prev[Right]; + } + + if (ii == lines.size()) { + if (!is_sharp) { + // Closing a loop with smooth transition. Unify the closing left / right vertices. + geometry.set_vertex(idx_initial[Left], geometry.extract_position_3(idx_prev[Left]), geometry.extract_normal_3(idx_prev[Left])); + geometry.set_vertex(idx_initial[Right], geometry.extract_position_3(idx_prev[Right]), geometry.extract_normal_3(idx_prev[Right])); + geometry.remove_vertex(geometry.vertices_count() - 1); + geometry.remove_vertex(geometry.vertices_count() - 1); + // Replace the left / right vertex indices to point to the start of the loop. + const size_t indices_count = geometry.indices_count(); + for (size_t u = indices_count - 24; u < indices_count; ++u) { + const unsigned int id = geometry.extract_index(u); + if (id == (unsigned int)idx_prev[Left]) + geometry.set_index(u, (unsigned int)idx_initial[Left]); + else if (id == (unsigned int)idx_prev[Right]) + geometry.set_index(u, (unsigned int)idx_initial[Right]); + } + } + + // This is the last iteration, only required to solve the transition. + break; + } + } + + // Only new allocate top / bottom vertices, if not closing a loop. + if (closed && ii + 1 == lines.size()) + idx_b[Top] = idx_initial[Top]; + else { + idx_b[Top] = idx_last++; + geometry.add_vertex((Vec3f)b[Top].cast(), (Vec3f)n_top.cast()); + } + + if (closed && ii + 1 == lines.size() && width == width_initial) + idx_b[Bottom] = idx_initial[Bottom]; + else { + idx_b[Bottom] = idx_last++; + geometry.add_vertex((Vec3f)b[Bottom].cast(), (Vec3f)n_bottom.cast()); + } + + // Generate new vertices for the end of this line segment. + idx_b[Left] = idx_last++; + geometry.add_vertex((Vec3f)b[Left].cast(), (Vec3f)n_left.cast()); + idx_b[Right] = idx_last++; + geometry.add_vertex((Vec3f)b[Right].cast(), (Vec3f)n_right.cast()); + + idx_prev = idx_b; + n_right_prev = n_right; + n_top_prev = n_top; + unit_v_prev = unit_v; + len_prev = len; + + if (!closed) { + // Terminate open paths with caps. + if (i == 0) { + geometry.add_triangle(idx_a[Bottom], idx_a[Right], idx_a[Top]); + geometry.add_triangle(idx_a[Bottom], idx_a[Top], idx_a[Left]); + } + + // We don't use 'else' because both cases are true if we have only one line. + if (i + 1 == lines.size()) { + geometry.add_triangle(idx_b[Bottom], idx_b[Left], idx_b[Top]); + geometry.add_triangle(idx_b[Bottom], idx_b[Top], idx_b[Right]); + } + } + + // Add quads for a straight hollow tube-like segment. + // bottom-right face + geometry.add_triangle(idx_a[Bottom], idx_b[Bottom], idx_b[Right]); + geometry.add_triangle(idx_a[Bottom], idx_b[Right], idx_a[Right]); + // top-right face + geometry.add_triangle(idx_a[Right], idx_b[Right], idx_b[Top]); + geometry.add_triangle(idx_a[Right], idx_b[Top], idx_a[Top]); + // top-left face + geometry.add_triangle(idx_a[Top], idx_b[Top], idx_b[Left]); + geometry.add_triangle(idx_a[Top], idx_b[Left], idx_a[Left]); + // bottom-left face + geometry.add_triangle(idx_a[Left], idx_b[Left], idx_b[Bottom]); + geometry.add_triangle(idx_a[Left], idx_b[Bottom], idx_a[Bottom]); + } +} +#else // caller is responsible for supplying NO lines with zero length static void thick_lines_to_indexed_vertex_array( const Lines &lines, @@ -1725,7 +2366,30 @@ static void point_to_indexed_vertex_array(const Vec3crd& point, volume.push_triangle(idxs[3], idxs[1], idxs[4]); volume.push_triangle(idxs[0], idxs[3], idxs[4]); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +void _3DScene::thick_lines_to_verts( + const Lines& lines, + const std::vector& widths, + const std::vector& heights, + bool closed, + double top_z, + GUI::GLModel::Geometry& geometry) +{ + thick_lines_to_geometry(lines, widths, heights, closed, top_z, geometry); +} + +void _3DScene::thick_lines_to_verts( + const Lines3& lines, + const std::vector& widths, + const std::vector& heights, + bool closed, + GUI::GLModel::Geometry& geometry) +{ + thick_lines_to_geometry(lines, widths, heights, closed, geometry); +} +#else void _3DScene::thick_lines_to_verts( const Lines &lines, const std::vector &widths, @@ -1767,8 +2431,21 @@ void _3DScene::extrusionentity_to_verts(const ExtrusionPath &extrusion_path, flo { extrusionentity_to_verts(extrusion_path.polyline, extrusion_path.width, extrusion_path.height, print_z, volume); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Fill in the qverts and tverts with quads and triangles for the extrusion_path. +#if ENABLE_LEGACY_OPENGL_REMOVAL +void _3DScene::extrusionentity_to_verts(const ExtrusionPath& extrusion_path, float print_z, const Point& copy, GUI::GLModel::Geometry& geometry) +{ + Polyline polyline = extrusion_path.polyline; + polyline.remove_duplicate_points(); + polyline.translate(copy); + const Lines lines = polyline.lines(); + std::vector widths(lines.size(), extrusion_path.width); + std::vector heights(lines.size(), extrusion_path.height); + thick_lines_to_verts(lines, widths, heights, false, print_z, geometry); +} +#else void _3DScene::extrusionentity_to_verts(const ExtrusionPath &extrusion_path, float print_z, const Point ©, GLVolume &volume) { Polyline polyline = extrusion_path.polyline; @@ -1779,8 +2456,27 @@ void _3DScene::extrusionentity_to_verts(const ExtrusionPath &extrusion_path, flo std::vector heights(lines.size(), extrusion_path.height); thick_lines_to_verts(lines, widths, heights, false, print_z, volume); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Fill in the qverts and tverts with quads and triangles for the extrusion_loop. +#if ENABLE_LEGACY_OPENGL_REMOVAL +void _3DScene::extrusionentity_to_verts(const ExtrusionLoop& extrusion_loop, float print_z, const Point& copy, GUI::GLModel::Geometry& geometry) +{ + Lines lines; + std::vector widths; + std::vector heights; + for (const ExtrusionPath& extrusion_path : extrusion_loop.paths) { + Polyline polyline = extrusion_path.polyline; + polyline.remove_duplicate_points(); + polyline.translate(copy); + const Lines lines_this = polyline.lines(); + append(lines, lines_this); + widths.insert(widths.end(), lines_this.size(), extrusion_path.width); + heights.insert(heights.end(), lines_this.size(), extrusion_path.height); + } + thick_lines_to_verts(lines, widths, heights, true, print_z, geometry); +} +#else void _3DScene::extrusionentity_to_verts(const ExtrusionLoop &extrusion_loop, float print_z, const Point ©, GLVolume &volume) { Lines lines; @@ -1797,8 +2493,27 @@ void _3DScene::extrusionentity_to_verts(const ExtrusionLoop &extrusion_loop, flo } thick_lines_to_verts(lines, widths, heights, true, print_z, volume); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Fill in the qverts and tverts with quads and triangles for the extrusion_multi_path. +#if ENABLE_LEGACY_OPENGL_REMOVAL +void _3DScene::extrusionentity_to_verts(const ExtrusionMultiPath& extrusion_multi_path, float print_z, const Point& copy, GUI::GLModel::Geometry& geometry) +{ + Lines lines; + std::vector widths; + std::vector heights; + for (const ExtrusionPath& extrusion_path : extrusion_multi_path.paths) { + Polyline polyline = extrusion_path.polyline; + polyline.remove_duplicate_points(); + polyline.translate(copy); + const Lines lines_this = polyline.lines(); + append(lines, lines_this); + widths.insert(widths.end(), lines_this.size(), extrusion_path.width); + heights.insert(heights.end(), lines_this.size(), extrusion_path.height); + } + thick_lines_to_verts(lines, widths, heights, false, print_z, geometry); +} +#else void _3DScene::extrusionentity_to_verts(const ExtrusionMultiPath &extrusion_multi_path, float print_z, const Point ©, GLVolume &volume) { Lines lines; @@ -1815,13 +2530,49 @@ void _3DScene::extrusionentity_to_verts(const ExtrusionMultiPath &extrusion_mult } thick_lines_to_verts(lines, widths, heights, false, print_z, volume); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +void _3DScene::extrusionentity_to_verts(const ExtrusionEntityCollection& extrusion_entity_collection, float print_z, const Point& copy, GUI::GLModel::Geometry& geometry) +{ + for (const ExtrusionEntity* extrusion_entity : extrusion_entity_collection.entities) + extrusionentity_to_verts(extrusion_entity, print_z, copy, geometry); +} +#else void _3DScene::extrusionentity_to_verts(const ExtrusionEntityCollection &extrusion_entity_collection, float print_z, const Point ©, GLVolume &volume) { for (const ExtrusionEntity *extrusion_entity : extrusion_entity_collection.entities) extrusionentity_to_verts(extrusion_entity, print_z, copy, volume); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +void _3DScene::extrusionentity_to_verts(const ExtrusionEntity* extrusion_entity, float print_z, const Point& copy, GUI::GLModel::Geometry& geometry) +{ + if (extrusion_entity != nullptr) { + auto* extrusion_path = dynamic_cast(extrusion_entity); + if (extrusion_path != nullptr) + extrusionentity_to_verts(*extrusion_path, print_z, copy, geometry); + else { + auto* extrusion_loop = dynamic_cast(extrusion_entity); + if (extrusion_loop != nullptr) + extrusionentity_to_verts(*extrusion_loop, print_z, copy, geometry); + else { + auto* extrusion_multi_path = dynamic_cast(extrusion_entity); + if (extrusion_multi_path != nullptr) + extrusionentity_to_verts(*extrusion_multi_path, print_z, copy, geometry); + else { + auto* extrusion_entity_collection = dynamic_cast(extrusion_entity); + if (extrusion_entity_collection != nullptr) + extrusionentity_to_verts(*extrusion_entity_collection, print_z, copy, geometry); + else + throw Slic3r::RuntimeError("Unexpected extrusion_entity type in to_verts()"); + } + } + } + } +} +#else void _3DScene::extrusionentity_to_verts(const ExtrusionEntity *extrusion_entity, float print_z, const Point ©, GLVolume &volume) { if (extrusion_entity != nullptr) { @@ -1840,9 +2591,8 @@ void _3DScene::extrusionentity_to_verts(const ExtrusionEntity *extrusion_entity, auto *extrusion_entity_collection = dynamic_cast(extrusion_entity); if (extrusion_entity_collection != nullptr) extrusionentity_to_verts(*extrusion_entity_collection, print_z, copy, volume); - else { + else throw Slic3r::RuntimeError("Unexpected extrusion_entity type in to_verts()"); - } } } } @@ -1861,5 +2611,6 @@ void _3DScene::point3_to_verts(const Vec3crd& point, double width, double height { thick_point_to_verts(point, width, height, volume); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } // namespace Slic3r diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index 5aaa759f2..a85b8092a 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -46,6 +46,7 @@ enum ModelInstanceEPrintVolumeState : unsigned char; // Return appropriate color based on the ModelVolume. extern ColorRGBA color_from_model_volume(const ModelVolume& model_volume); +#if !ENABLE_LEGACY_OPENGL_REMOVAL // A container for interleaved arrays of 3D vertices and normals, // possibly indexed by triangles and / or quads. class GLIndexedVertexArray { @@ -246,6 +247,7 @@ public: private: BoundingBox m_bounding_box; }; +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL class GLVolume { public: @@ -388,11 +390,17 @@ public: // Is mouse or rectangle selection over this object to select/deselect it ? EHoverState hover; +#if ENABLE_LEGACY_OPENGL_REMOVAL + GUI::GLModel model; +#else // Interleaved triangles & normals with indexed triangles & quads. GLIndexedVertexArray indexed_vertex_array; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Ranges of triangle and quad indices to be rendered. std::pair tverts_range; +#if !ENABLE_LEGACY_OPENGL_REMOVAL std::pair qverts_range; +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL // If the qverts or tverts contain thick extrusions, then offsets keeps pointers of the starts // of the extrusions per layer. @@ -402,13 +410,17 @@ public: // Bounding box of this volume, in unscaled coordinates. BoundingBoxf3 bounding_box() const { +#if ENABLE_LEGACY_OPENGL_REMOVAL + return this->model.get_bounding_box(); +#else BoundingBoxf3 out; - if (! this->indexed_vertex_array.bounding_box().isEmpty()) { + if (!this->indexed_vertex_array.bounding_box().isEmpty()) { out.min = this->indexed_vertex_array.bounding_box().min().cast(); out.max = this->indexed_vertex_array.bounding_box().max().cast(); out.defined = true; - }; + } return out; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } void set_color(const ColorRGBA& rgba) { color = rgba; } @@ -498,14 +510,20 @@ public: // convex hull const TriangleMesh* convex_hull() const { return m_convex_hull.get(); } +#if ENABLE_LEGACY_OPENGL_REMOVAL + bool empty() const { return this->model.is_empty(); } +#else bool empty() const { return this->indexed_vertex_array.empty(); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL void set_range(double low, double high); - void render() const; + void render(); +#if !ENABLE_LEGACY_OPENGL_REMOVAL void finalize_geometry(bool opengl_initialized) { this->indexed_vertex_array.finalize_geometry(opengl_initialized); } void release_geometry() { this->indexed_vertex_array.release_geometry(); } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL void set_bounding_boxes_as_dirty() { m_transformed_bounding_box.reset(); @@ -524,12 +542,20 @@ public: #endif // ENABLE_SHOW_NON_MANIFOLD_EDGES // Return an estimate of the memory consumed by this class. - size_t cpu_memory_used() const { - //FIXME what to do wih m_convex_hull? + size_t cpu_memory_used() const { +#if ENABLE_LEGACY_OPENGL_REMOVAL + return sizeof(*this) + this->model.cpu_memory_used() + this->print_zs.capacity() * sizeof(coordf_t) + + this->offsets.capacity() * sizeof(size_t); + } + // Return an estimate of the memory held by GPU vertex buffers. + size_t gpu_memory_used() const { return this->model.gpu_memory_used(); } +#else + //FIXME what to do wih m_convex_hull? return sizeof(*this) - sizeof(this->indexed_vertex_array) + this->indexed_vertex_array.cpu_memory_used() + this->print_zs.capacity() * sizeof(coordf_t) + this->offsets.capacity() * sizeof(size_t); } // Return an estimate of the memory held by GPU vertex buffers. size_t gpu_memory_used() const { return this->indexed_vertex_array.gpu_memory_used(); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL size_t total_memory_used() const { return this->cpu_memory_used() + this->gpu_memory_used(); } }; @@ -565,10 +591,10 @@ private: PrintVolume m_print_volume; // z range for clipping in shaders - float m_z_range[2]; + std::array m_z_range; // plane coeffs for clipping in shaders - float m_clipping_plane[4]; + std::array m_clipping_plane; struct Slope { @@ -589,11 +615,40 @@ public: GLVolumeCollection() { set_default_slope_normal_z(); } ~GLVolumeCollection() { clear(); } +#if ENABLE_LEGACY_OPENGL_REMOVAL + std::vector load_object( + const ModelObject* model_object, + int obj_idx, + const std::vector& instance_idxs); + + int load_object_volume( + const ModelObject* model_object, + int obj_idx, + int volume_idx, + int instance_idx); + + // Load SLA auxiliary GLVolumes (for support trees or pad). + void load_object_auxiliary( + const SLAPrintObject* print_object, + int obj_idx, + // pairs of + const std::vector>& instances, + SLAPrintObjectStep milestone, + // Timestamp of the last change of the milestone + size_t timestamp); + +#if ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL + int load_wipe_tower_preview( + float pos_x, float pos_y, float width, float depth, float height, float rotation_angle, bool size_unknown, float brim_width); +#else + int load_wipe_tower_preview( + int obj_idx, float pos_x, float pos_y, float width, float depth, float height, float rotation_angle, bool size_unknown, float brim_width); +#endif // ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL +#else std::vector load_object( const ModelObject *model_object, int obj_idx, const std::vector &instance_idxs, - const std::string &color_by, bool opengl_initialized); int load_object_volume( @@ -601,7 +656,6 @@ public: int obj_idx, int volume_idx, int instance_idx, - const std::string &color_by, bool opengl_initialized); // Load SLA auxiliary GLVolumes (for support trees or pad). @@ -622,13 +676,25 @@ public: int load_wipe_tower_preview( int obj_idx, float pos_x, float pos_y, float width, float depth, float height, float rotation_angle, bool size_unknown, float brim_width, bool opengl_initialized); #endif // ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLVolume* new_toolpath_volume(const ColorRGBA& rgba); + GLVolume* new_nontoolpath_volume(const ColorRGBA& rgba); +#else GLVolume* new_toolpath_volume(const ColorRGBA& rgba, size_t reserve_vbo_floats = 0); GLVolume* new_nontoolpath_volume(const ColorRGBA& rgba, size_t reserve_vbo_floats = 0); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Render the volumes by OpenGL. +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render(ERenderType type, bool disable_cullface, const Transform3d& view_matrix, const Transform3d& projection_matrix, + std::function filter_func = std::function()) const; +#else void render(ERenderType type, bool disable_cullface, const Transform3d& view_matrix, std::function filter_func = std::function()) const; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if !ENABLE_LEGACY_OPENGL_REMOVAL // Finalize the initialization of the geometry & indices, // upload the geometry and indices to OpenGL VBO objects // and shrink the allocated data, possibly relasing it if it has been loaded into the VBOs. @@ -636,16 +702,20 @@ public: // Release the geometry data assigned to the volumes. // If OpenGL VBOs were allocated, an OpenGL context has to be active to release them. void release_geometry() { for (auto *v : volumes) v->release_geometry(); } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL // Clear the geometry void clear() { for (auto *v : volumes) delete v; volumes.clear(); } bool empty() const { return volumes.empty(); } - void set_range(double low, double high) { for (GLVolume *vol : this->volumes) vol->set_range(low, high); } + void set_range(double low, double high) { for (GLVolume* vol : this->volumes) vol->set_range(low, high); } void set_print_volume(const PrintVolume& print_volume) { m_print_volume = print_volume; } void set_z_range(float min_z, float max_z) { m_z_range[0] = min_z; m_z_range[1] = max_z; } - void set_clipping_plane(const double* coeffs) { m_clipping_plane[0] = coeffs[0]; m_clipping_plane[1] = coeffs[1]; m_clipping_plane[2] = coeffs[2]; m_clipping_plane[3] = coeffs[3]; } + void set_clipping_plane(const std::array& coeffs) { m_clipping_plane = coeffs; } + + const std::array& get_z_range() const { return m_z_range; } + const std::array& get_clipping_plane() const { return m_clipping_plane; } bool is_slope_active() const { return m_slope.active; } void set_slope_active(bool active) { m_slope.active = active; } @@ -685,9 +755,18 @@ GLVolumeWithIdAndZList volumes_to_render(const GLVolumePtrs& volumes, GLVolumeCo struct _3DScene { +#if ENABLE_LEGACY_OPENGL_REMOVAL + static void thick_lines_to_verts(const Lines& lines, const std::vector& widths, const std::vector& heights, bool closed, double top_z, GUI::GLModel::Geometry& geometry); + static void thick_lines_to_verts(const Lines3& lines, const std::vector& widths, const std::vector& heights, bool closed, GUI::GLModel::Geometry& geometry); + static void extrusionentity_to_verts(const ExtrusionPath& extrusion_path, float print_z, const Point& copy, GUI::GLModel::Geometry& geometry); + static void extrusionentity_to_verts(const ExtrusionLoop& extrusion_loop, float print_z, const Point& copy, GUI::GLModel::Geometry& geometry); + static void extrusionentity_to_verts(const ExtrusionMultiPath& extrusion_multi_path, float print_z, const Point& copy, GUI::GLModel::Geometry& geometry); + static void extrusionentity_to_verts(const ExtrusionEntityCollection& extrusion_entity_collection, float print_z, const Point& copy, GUI::GLModel::Geometry& geometry); + static void extrusionentity_to_verts(const ExtrusionEntity* extrusion_entity, float print_z, const Point& copy, GUI::GLModel::Geometry& geometry); +#else static void thick_lines_to_verts(const Lines& lines, const std::vector& widths, const std::vector& heights, bool closed, double top_z, GLVolume& volume); static void thick_lines_to_verts(const Lines3& lines, const std::vector& widths, const std::vector& heights, bool closed, GLVolume& volume); - static void extrusionentity_to_verts(const Polyline &polyline, float width, float height, float print_z, GLVolume& volume); + static void extrusionentity_to_verts(const Polyline& polyline, float width, float height, float print_z, GLVolume& volume); static void extrusionentity_to_verts(const ExtrusionPath& extrusion_path, float print_z, GLVolume& volume); static void extrusionentity_to_verts(const ExtrusionPath& extrusion_path, float print_z, const Point& copy, GLVolume& volume); static void extrusionentity_to_verts(const ExtrusionLoop& extrusion_loop, float print_z, const Point& copy, GLVolume& volume); @@ -696,6 +775,7 @@ struct _3DScene static void extrusionentity_to_verts(const ExtrusionEntity* extrusion_entity, float print_z, const Point& copy, GLVolume& volume); static void polyline3_to_verts(const Polyline3& polyline, double width, double height, GLVolume& volume); static void point3_to_verts(const Vec3crd& point, double width, double height, GLVolume& volume); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL }; } diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 5f7b4e8d3..37e527d64 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -165,17 +165,6 @@ void BackgroundSlicingProcess::process_fff() } } -static void write_thumbnail(Zipper& zipper, const ThumbnailData& data) -{ - size_t png_size = 0; - void* png_data = tdefl_write_image_to_png_file_in_memory_ex((const void*)data.pixels.data(), data.width, data.height, 4, &png_size, MZ_DEFAULT_LEVEL, 1); - if (png_data != nullptr) - { - zipper.add_entry("thumbnail/thumbnail" + std::to_string(data.width) + "x" + std::to_string(data.height) + ".png", (const std::uint8_t*)png_data, png_size); - mz_free(png_data); - } -} - void BackgroundSlicingProcess::process_sla() { assert(m_print == m_sla_print); @@ -189,12 +178,7 @@ void BackgroundSlicingProcess::process_sla() ThumbnailsList thumbnails = this->render_thumbnails( ThumbnailsParams{current_print()->full_print_config().option("thumbnails")->values, true, true, true, true}); - Zipper zipper(export_path); - m_sla_archive.export_print(zipper, *m_sla_print); // true, false, true, true); // renders also supports and pad - for (const ThumbnailData& data : thumbnails) - if (data.is_valid()) - write_thumbnail(zipper, data); - zipper.finalize(); + m_sla_print->export_print(export_path, thumbnails); m_print->set_status(100, (boost::format(_utf8(L("Masked SLA file exported to %1%"))) % export_path).str()); } else if (! m_upload_job.empty()) { @@ -739,13 +723,7 @@ void BackgroundSlicingProcess::prepare_upload() ThumbnailsList thumbnails = this->render_thumbnails( ThumbnailsParams{current_print()->full_print_config().option("thumbnails")->values, true, true, true, true}); - // true, false, true, true); // renders also supports and pad - Zipper zipper{source_path.string()}; - m_sla_archive.export_print(zipper, *m_sla_print, m_upload_job.upload_data.upload_path.string()); - for (const ThumbnailData& data : thumbnails) - if (data.is_valid()) - write_thumbnail(zipper, data); - zipper.finalize(); + m_sla_print->export_print(source_path.string(),thumbnails, m_upload_job.upload_data.upload_path.string()); } m_print->set_status(100, (boost::format(_utf8(L("Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"))) % m_upload_job.printhost->get_host()).str()); diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp index 5fba237e3..00a3ab6d0 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp @@ -11,7 +11,6 @@ #include "libslic3r/PrintBase.hpp" #include "libslic3r/GCode/ThumbnailData.hpp" -#include "libslic3r/Format/SL1.hpp" #include "slic3r/Utils/PrintHost.hpp" #include "libslic3r/GCode/GCodeProcessor.hpp" @@ -84,7 +83,7 @@ public: ~BackgroundSlicingProcess(); void set_fff_print(Print *print) { m_fff_print = print; } - void set_sla_print(SLAPrint *print) { m_sla_print = print; m_sla_print->set_printer(&m_sla_archive); } + void set_sla_print(SLAPrint *print) { m_sla_print = print; } void set_thumbnail_cb(ThumbnailsGeneratorCallback cb) { m_thumbnail_cb = cb; } void set_gcode_result(GCodeProcessorResult* result) { m_gcode_result = result; } @@ -218,9 +217,9 @@ private: // Data structure, to which the G-code export writes its annotations. GCodeProcessorResult *m_gcode_result = nullptr; // Callback function, used to write thumbnails into gcode. - ThumbnailsGeneratorCallback m_thumbnail_cb = nullptr; - SL1Archive m_sla_archive; - // Temporary G-code, there is one defined for the BackgroundSlicingProcess, differentiated from the other processes by a process ID. + ThumbnailsGeneratorCallback m_thumbnail_cb = nullptr; + // Temporary G-code, there is one defined for the BackgroundSlicingProcess, + // differentiated from the other processes by a process ID. std::string m_temp_output_path; // Output path provided by the user. The output path may be set even if the slicing is running, // but once set, it cannot be re-set. diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp index 44b0cd84a..1370484c3 100644 --- a/src/slic3r/GUI/Camera.cpp +++ b/src/slic3r/GUI/Camera.cpp @@ -106,26 +106,36 @@ double Camera::get_fov() const void Camera::apply_viewport(int x, int y, unsigned int w, unsigned int h) { glsafe(::glViewport(0, 0, w, h)); +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_viewport = { 0, 0, int(w), int(h) }; +#else glsafe(::glGetIntegerv(GL_VIEWPORT, m_viewport.data())); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } +#if !ENABLE_LEGACY_OPENGL_REMOVAL void Camera::apply_view_matrix() { glsafe(::glMatrixMode(GL_MODELVIEW)); glsafe(::glLoadIdentity()); glsafe(::glMultMatrixd(m_view_matrix.data())); } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL void Camera::apply_projection(const BoundingBoxf3& box, double near_z, double far_z) { double w = 0.0; double h = 0.0; +#if !ENABLE_LEGACY_OPENGL_REMOVAL const double old_distance = m_distance; +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL m_frustrum_zs = calc_tight_frustrum_zs_around(box); +#if !ENABLE_LEGACY_OPENGL_REMOVAL if (m_distance != old_distance) // the camera has been moved re-apply view matrix apply_view_matrix(); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL if (near_z > 0.0) m_frustrum_zs.first = std::max(std::min(m_frustrum_zs.first, near_z), FrustrumMinNearZ); @@ -159,6 +169,35 @@ void Camera::apply_projection(const BoundingBoxf3& box, double near_z, double fa } } +#if ENABLE_LEGACY_OPENGL_REMOVAL + switch (m_type) + { + default: + case EType::Ortho: + { + const double dz = m_frustrum_zs.second - m_frustrum_zs.first; + const double zz = m_frustrum_zs.first + m_frustrum_zs.second; + m_projection_matrix.matrix() << 1.0 / w, 0.0, 0.0, 0.0, + 0.0, 1.0 / h, 0.0, 0.0, + 0.0, 0.0, -2.0 / dz, -zz / dz, + 0.0, 0.0, 0.0, 1.0; + break; + } + case EType::Perspective: + { + const double n = m_frustrum_zs.first; + const double f = m_frustrum_zs.second; + const double dz = f - n; + const double zz = n + f; + const double fn = n * f; + m_projection_matrix.matrix() << n / w, 0.0, 0.0, 0.0, + 0.0, n / h, 0.0, 0.0, + 0.0, 0.0, -zz / dz, -2.0 * fn / dz, + 0.0, 0.0, -1.0, 0.0; + break; + } + } +#else glsafe(::glMatrixMode(GL_PROJECTION)); glsafe(::glLoadIdentity()); @@ -179,6 +218,7 @@ void Camera::apply_projection(const BoundingBoxf3& box, double near_z, double fa glsafe(::glGetDoublev(GL_PROJECTION_MATRIX, m_projection_matrix.data())); glsafe(::glMatrixMode(GL_MODELVIEW)); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } void Camera::zoom_to_box(const BoundingBoxf3& box, double margin_factor) @@ -298,8 +338,8 @@ std::pair Camera::calc_tight_frustrum_zs_around(const BoundingBo // box in eye space const BoundingBoxf3 eye_box = box.transformed(m_view_matrix); - near_z = -eye_box.max(2); - far_z = -eye_box.min(2); + near_z = -eye_box.max.z(); + far_z = -eye_box.min.z(); // apply margin near_z -= FrustrumZMargin; @@ -465,19 +505,19 @@ void Camera::look_at(const Vec3d& position, const Vec3d& target, const Vec3d& up m_distance = (position - target).norm(); const Vec3d new_position = m_target + m_distance * unit_z; - m_view_matrix(0, 0) = unit_x(0); - m_view_matrix(0, 1) = unit_x(1); - m_view_matrix(0, 2) = unit_x(2); + m_view_matrix(0, 0) = unit_x.x(); + m_view_matrix(0, 1) = unit_x.y(); + m_view_matrix(0, 2) = unit_x.z(); m_view_matrix(0, 3) = -unit_x.dot(new_position); - m_view_matrix(1, 0) = unit_y(0); - m_view_matrix(1, 1) = unit_y(1); - m_view_matrix(1, 2) = unit_y(2); + m_view_matrix(1, 0) = unit_y.x(); + m_view_matrix(1, 1) = unit_y.y(); + m_view_matrix(1, 2) = unit_y.z(); m_view_matrix(1, 3) = -unit_y.dot(new_position); - m_view_matrix(2, 0) = unit_z(0); - m_view_matrix(2, 1) = unit_z(1); - m_view_matrix(2, 2) = unit_z(2); + m_view_matrix(2, 0) = unit_z.x(); + m_view_matrix(2, 1) = unit_z.y(); + m_view_matrix(2, 2) = unit_z.z(); m_view_matrix(2, 3) = -unit_z.dot(new_position); m_view_matrix(3, 0) = 0.0; diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp index a61eb44ec..a1d742688 100644 --- a/src/slic3r/GUI/Camera.hpp +++ b/src/slic3r/GUI/Camera.hpp @@ -92,7 +92,9 @@ public: double get_fov() const; void apply_viewport(int x, int y, unsigned int w, unsigned int h); +#if !ENABLE_LEGACY_OPENGL_REMOVAL void apply_view_matrix(); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL // Calculates and applies the projection matrix tighting the frustrum z range around the given box. // If larger z span is needed, pass the desired values of near and far z (negative values are ignored) void apply_projection(const BoundingBoxf3& box, double near_z = -1.0, double far_z = -1.0); diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp index ee5aacb19..760f5fe0a 100644 --- a/src/slic3r/GUI/DoubleSlider.cpp +++ b/src/slic3r/GUI/DoubleSlider.cpp @@ -122,6 +122,10 @@ Control::Control( wxWindow *parent, this->Bind(wxEVT_KEY_UP, &Control::OnKeyUp, this); this->Bind(wxEVT_RIGHT_DOWN, &Control::OnRightDown,this); this->Bind(wxEVT_RIGHT_UP, &Control::OnRightUp, this); + this->Bind(wxEVT_SIZE, [this](wxSizeEvent& event) { + m_ruler.update(m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step()); + event.Skip(); + }); // control's view variables SLIDER_MARGIN = 4 + GUI::wxGetApp().em_unit(); @@ -137,8 +141,14 @@ Control::Control( wxWindow *parent, m_line_pens = { &DARK_GREY_PEN, &GREY_PEN, &LIGHT_GREY_PEN }; m_segm_pens = { &DARK_ORANGE_PEN, &ORANGE_PEN, &LIGHT_ORANGE_PEN }; + FOCUS_RECT_PEN = wxPen(wxColour(128, 128, 10), 1, wxPENSTYLE_DOT); + FOCUS_RECT_BRUSH = wxBrush(wxColour(0, 0, 0), wxBRUSHSTYLE_TRANSPARENT); + m_font = GetFont(); this->SetMinSize(get_min_size()); + + if (style == wxSL_VERTICAL) + m_ruler.set_parent(this->GetParent()); } void Control::msw_rescale() @@ -170,6 +180,9 @@ void Control::msw_rescale() SetMinSize(get_min_size()); GetParent()->Layout(); + + m_ruler.update_dpi(); + m_ruler.update(m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step()); } void Control::sys_color_changed() @@ -266,7 +279,11 @@ void Control::SetMaxValue(const int max_value) void Control::SetSliderValues(const std::vector& values) { m_values = values; - m_ruler.init(m_values); + m_ruler.init(m_values, get_scroll_step()); + + // When "No sparce layer" is enabled, use m_layers_values for ruler update. + // Because of m_values has duplicate values in this case. +// m_ruler.update(this->GetParent(), m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step()); } void Control::draw_scroll_line(wxDC& dc, const int lower_pos, const int higher_pos) @@ -426,9 +443,12 @@ void Control::SetLayersTimes(const std::vector& layers_times, float total if (m_layers_values.size() != m_layers_times.size()) for (size_t i = m_layers_times.size(); i < m_layers_values.size(); i++) m_layers_times.push_back(total_time); + m_ruler.update(m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step()); Refresh(); Update(); } + else + m_ruler.update(m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step()); } void Control::SetLayersTimes(const std::vector& layers_times) @@ -494,15 +514,17 @@ void Control::get_lower_and_higher_position(int& lower_pos, int& higher_pos) } } -void Control::draw_focus_rect() +void Control::draw_focus_rect(wxDC& dc) { if (!m_is_focused) return; const wxSize sz = GetSize(); - wxPaintDC dc(this); - const wxPen pen = wxPen(wxColour(128, 128, 10), 1, wxPENSTYLE_DOT); - dc.SetPen(pen); - dc.SetBrush(wxBrush(wxColour(0, 0, 0), wxBRUSHSTYLE_TRANSPARENT)); +// wxPaintDC dc(this); + //const wxPen pen = wxPen(wxColour(128, 128, 10), 1, wxPENSTYLE_DOT); + //dc.SetPen(pen); + //dc.SetBrush(wxBrush(wxColour(0, 0, 0), wxBRUSHSTYLE_TRANSPARENT)); + dc.SetPen(FOCUS_RECT_PEN); + dc.SetBrush(FOCUS_RECT_BRUSH); dc.DrawRectangle(1, 1, sz.x - 2, sz.y - 2); } @@ -513,11 +535,12 @@ void Control::render() #else SetBackgroundColour(GetParent()->GetBackgroundColour()); #endif // _WIN32 - draw_focus_rect(); wxPaintDC dc(this); dc.SetFont(m_font); + draw_focus_rect(dc); + const wxCoord lower_pos = get_position_from_value(m_lower_value); const wxCoord higher_pos = get_position_from_value(m_higher_value); @@ -807,7 +830,7 @@ void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, LabelType l } wxColour old_clr = dc.GetTextForeground(); - const wxPen& pen = is_wipe_tower_layer(tick) && (tick == m_lower_value || tick == m_higher_value) ? DARK_ORANGE_PEN : wxPen(old_clr); + const wxPen& pen = is_wipe_tower_layer(tick) && (tick == m_lower_value || tick == m_higher_value) ? DARK_ORANGE_PEN : /*wxPen(old_clr)*/GREY_PEN; dc.SetPen(pen); dc.SetTextForeground(pen.GetColour()); @@ -1028,8 +1051,10 @@ void Control::draw_colored_band(wxDC& dc) } } -void Control::Ruler::init(const std::vector& values) +void Control::Ruler::init(const std::vector& values, double scroll_step) { + if (!m_parent) + return; max_values.clear(); max_values.reserve(std::count(values.begin(), values.end(), values.front())); @@ -1039,14 +1064,35 @@ void Control::Ruler::init(const std::vector& values) it = std::find(it + 1, values.end(), values.front()); } max_values.push_back(*(it - 1)); + + update(values, scroll_step); } -void Control::Ruler::update(wxWindow* win, const std::vector& values, double scroll_step) +void Control::Ruler::set_parent(wxWindow* parent) { - if (values.empty()) + m_parent = parent; + update_dpi(); +} + +void Control::Ruler::update_dpi() +{ + if (m_parent) + m_DPI = GUI::get_dpi_for_window(m_parent); +} + +void Control::Ruler::update(const std::vector& values, double scroll_step) +{ + if (!m_parent || values.empty() || + // check if need to update ruler in respect to input values + (values.front() == m_min_val && values.back() == m_max_val && m_scroll_step == scroll_step && max_values.size() == m_max_values_cnt)) return; - int DPI = GUI::get_dpi_for_window(win); - int pixels_per_sm = lround((double)(DPI) * 5.0/25.4); + + m_min_val = values.front(); + m_max_val = values.back(); + m_scroll_step = scroll_step; + m_max_values_cnt = max_values.size(); + + int pixels_per_sm = lround((double)(m_DPI) * 5.0/25.4); if (lround(scroll_step) > pixels_per_sm) { long_step = -1.0; @@ -1085,15 +1131,17 @@ void Control::Ruler::update(wxWindow* win, const std::vector& values, do } long_step = step == 0 ? -1.0 : (double)step* std::pow(10, pow); + if (long_step < 0) + short_step = long_step; } void Control::draw_ruler(wxDC& dc) { - if (m_values.empty()) + if (m_values.empty() || !m_ruler.can_draw()) return; // When "No sparce layer" is enabled, use m_layers_values for ruler update. // Because of m_values has duplicate values in this case. - m_ruler.update(this->GetParent(), m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step()); +// m_ruler.update(this->GetParent(), m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step()); int height, width; get_size(&width, &height); @@ -1103,44 +1151,76 @@ void Control::draw_ruler(wxDC& dc) wxColour old_clr = dc.GetTextForeground(); dc.SetTextForeground(GREY_PEN.GetColour()); - if (m_ruler.long_step < 0) - for (size_t tick = 1; tick < m_values.size(); tick++) { - wxCoord pos = get_position_from_value(tick); - draw_ticks_pair(dc, pos, mid, 5); - draw_tick_text(dc, wxPoint(mid, pos), tick); + auto draw_short_ticks = [this, mid](wxDC& dc, double& current_tick, int max_tick) { + if (m_ruler.short_step <= 0.0) + return; + while (current_tick < max_tick) { + wxCoord pos = get_position_from_value(lround(current_tick)); + draw_ticks_pair(dc, pos, mid, 2); + current_tick += m_ruler.short_step; + if (current_tick > m_max_value) + break; } - else { - auto draw_short_ticks = [this, mid](wxDC& dc, double& current_tick, int max_tick) { - while (current_tick < max_tick) { - wxCoord pos = get_position_from_value(lround(current_tick)); - draw_ticks_pair(dc, pos, mid, 2); - current_tick += m_ruler.short_step; - if (current_tick > m_max_value) + }; + + double short_tick = std::nan(""); + int tick = 0; + double value = 0.0; + size_t sequence = 0; + int prev_y_pos = -1; + wxCoord label_height = dc.GetMultiLineTextExtent("0").y - 2; + int values_size = (int)m_values.size(); + + if (m_ruler.long_step < 0) { + // sequential print when long_step wasn't detected because of a lot of printed objects + if (m_ruler.max_values.size() > 1) { + while (tick <= m_max_value && sequence < m_ruler.count()) { + // draw just ticks with max value + value = m_ruler.max_values[sequence]; + short_tick = tick; + + for (; tick < values_size; tick++) { + if (m_values[tick] == value) + break; + if (m_values[tick] > value) { + if (tick > 0) + tick--; + break; + } + } + if (tick > m_max_value) break; + + wxCoord pos = get_position_from_value(tick); + draw_ticks_pair(dc, pos, mid, 5); + if (prev_y_pos < 0 || prev_y_pos - pos >= label_height) { + draw_tick_text(dc, wxPoint(mid, pos), tick); + prev_y_pos = pos; + } + draw_short_ticks(dc, short_tick, tick); + + sequence++; + tick++; } - }; - - double short_tick = std::nan(""); - int tick = 0; - double value = 0.0; - size_t sequence = 0; - - int prev_y_pos = -1; - wxCoord label_height = dc.GetMultiLineTextExtent("0").y - 2; - int values_size = (int)m_values.size(); - + } + // very short object or some non-trivial ruler with non-regular step (see https://github.com/prusa3d/PrusaSlicer/issues/7263) + else { + if (get_scroll_step() < 1) // step less then 1 px indicates very tall object with non-regular laayer step (probably in vase mode) + return; + for (size_t tick = 1; tick < m_values.size(); tick++) { + wxCoord pos = get_position_from_value(tick); + draw_ticks_pair(dc, pos, mid, 5); + draw_tick_text(dc, wxPoint(mid, pos), tick); + } + } + } + else { while (tick <= m_max_value) { value += m_ruler.long_step; - if (value > m_ruler.max_values[sequence] && sequence < m_ruler.count()) { - value = m_ruler.long_step; - for (; tick < values_size; tick++) - if (m_values[tick] < value) - break; - // short ticks from the last tick to the end of current sequence - assert(! std::isnan(short_tick)); - draw_short_ticks(dc, short_tick, tick); - sequence++; - } + + if (sequence < m_ruler.count() && value > m_ruler.max_values[sequence]) + value = m_ruler.max_values[sequence]; + short_tick = tick; for (; tick < values_size; tick++) { @@ -1164,7 +1244,7 @@ void Control::draw_ruler(wxDC& dc) draw_short_ticks(dc, short_tick, tick); - if (value == m_ruler.max_values[sequence] && sequence < m_ruler.count()) { + if (sequence < m_ruler.count() && value == m_ruler.max_values[sequence]) { value = 0.0; sequence++; tick++; diff --git a/src/slic3r/GUI/DoubleSlider.hpp b/src/slic3r/GUI/DoubleSlider.hpp index e0f713d87..e4654d604 100644 --- a/src/slic3r/GUI/DoubleSlider.hpp +++ b/src/slic3r/GUI/DoubleSlider.hpp @@ -303,7 +303,7 @@ public: protected: void render(); - void draw_focus_rect(); + void draw_focus_rect(wxDC& dc); void draw_action_icon(wxDC& dc, const wxPoint pt_beg, const wxPoint pt_end); void draw_scroll_line(wxDC& dc, const int lower_pos, const int higher_pos); void draw_thumb(wxDC& dc, const wxCoord& pos_coord, const SelectedSlider& selection); @@ -438,19 +438,36 @@ private: wxPen GREY_PEN; wxPen LIGHT_GREY_PEN; + wxPen FOCUS_RECT_PEN; + wxBrush FOCUS_RECT_BRUSH; + std::vector m_line_pens; std::vector m_segm_pens; - struct Ruler { + class Ruler { + wxWindow* m_parent{nullptr}; // m_parent is nullptr for Unused ruler + // in this case we will not init/update/render it + // values to check if ruler has to be updated + double m_min_val; + double m_max_val; + double m_scroll_step; + size_t m_max_values_cnt; + int m_DPI; + + public: + double long_step; double short_step; std::vector max_values;// max value for each object/instance in sequence print // > 1 for sequential print - void init(const std::vector& values); - void update(wxWindow* win, const std::vector& values, double scroll_step); + void set_parent(wxWindow* parent); + void update_dpi(); + void init(const std::vector& values, double scroll_step); + void update(const std::vector& values, double scroll_step); bool is_ok() { return long_step > 0 && short_step > 0; } size_t count() { return max_values.size(); } + bool can_draw() { return m_parent != nullptr; } } m_ruler; }; diff --git a/src/slic3r/GUI/DoubleSlider_Utils.hpp b/src/slic3r/GUI/DoubleSlider_Utils.hpp deleted file mode 100644 index 283d527fa..000000000 --- a/src/slic3r/GUI/DoubleSlider_Utils.hpp +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef slic3r_GUI_DoubleSlider_Utils_hpp_ -#define slic3r_GUI_DoubleSlider_Utils_hpp_ - -#include -#include - - -#endif // slic3r_GUI_DoubleSlider_Utils_hpp_ diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 367846f0c..6aa4bb718 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -103,7 +103,11 @@ void GCodeViewer::IBuffer::reset() count = 0; } +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC +bool GCodeViewer::Path::matches(const GCodeProcessorResult::MoveVertex& move, bool account_for_volumetric_rate) const +#else bool GCodeViewer::Path::matches(const GCodeProcessorResult::MoveVertex& move) const +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC { auto matches_percent = [](float value1, float value2, float max_percent) { return std::abs(value2 - value1) / value1 <= max_percent; @@ -120,10 +124,22 @@ bool GCodeViewer::Path::matches(const GCodeProcessorResult::MoveVertex& move) co case EMoveType::Seam: case EMoveType::Extrude: { // use rounding to reduce the number of generated paths +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + if (account_for_volumetric_rate) + return type == move.type && extruder_id == move.extruder_id && cp_color_id == move.cp_color_id && role == move.extrusion_role && + move.position.z() <= sub_paths.front().first.position.z() && feedrate == move.feedrate && fan_speed == move.fan_speed && + height == round_to_bin(move.height) && width == round_to_bin(move.width) && + matches_percent(volumetric_rate, move.volumetric_rate(), 0.001f); + else + return type == move.type && extruder_id == move.extruder_id && cp_color_id == move.cp_color_id && role == move.extrusion_role && + move.position.z() <= sub_paths.front().first.position.z() && feedrate == move.feedrate && fan_speed == move.fan_speed && + height == round_to_bin(move.height) && width == round_to_bin(move.width); +#else return type == move.type && extruder_id == move.extruder_id && cp_color_id == move.cp_color_id && role == move.extrusion_role && move.position.z() <= sub_paths.front().first.position.z() && feedrate == move.feedrate && fan_speed == move.fan_speed && height == round_to_bin(move.height) && width == round_to_bin(move.width) && matches_percent(volumetric_rate, move.volumetric_rate(), 0.05f); +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC } case EMoveType::Travel: { return type == move.type && feedrate == move.feedrate && extruder_id == move.extruder_id && cp_color_id == move.cp_color_id; @@ -160,6 +176,78 @@ void GCodeViewer::TBuffer::add_path(const GCodeProcessorResult::MoveVertex& move move.volumetric_rate(), move.extruder_id, move.cp_color_id, { { endpoint, endpoint } } }); } +#if ENABLE_SHOW_TOOLPATHS_COG +void GCodeViewer::COG::render() +{ + if (!m_visible) + return; + + init(); + + GLShaderProgram* shader = wxGetApp().get_shader("toolpaths_cog"); + if (shader == nullptr) + return; + + shader->start_using(); + + glsafe(::glDisable(GL_DEPTH_TEST)); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + Transform3d matrix = camera.get_view_matrix() * Geometry::assemble_transform(cog()); + if (m_fixed_size) { + const double inv_zoom = wxGetApp().plater()->get_camera().get_inv_zoom(); + matrix = matrix * Geometry::assemble_transform(Vec3d::Zero(), Vec3d::Zero(), inv_zoom * Vec3d::Ones()); + } + shader->set_uniform("view_model_matrix", matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + shader->set_uniform("normal_matrix", (Matrix3d)matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); + m_model.render(); +#else + glsafe(::glPushMatrix()); + const Vec3d position = cog(); + glsafe(::glTranslated(position.x(), position.y(), position.z())); + if (m_fixed_size) { + const double inv_zoom = wxGetApp().plater()->get_camera().get_inv_zoom(); + glsafe(::glScaled(inv_zoom, inv_zoom, inv_zoom)); + } + m_model.render(); + glsafe(::glPopMatrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + + shader->stop_using(); + + ////Show ImGui window + //static float last_window_width = 0.0f; + //static size_t last_text_length = 0; + + //ImGuiWrapper& imgui = *wxGetApp().imgui(); + //const Size cnv_size = wxGetApp().plater()->get_current_canvas3D()->get_canvas_size(); + //imgui.set_next_window_pos(0.5f * static_cast(cnv_size.get_width()), 0.0f, ImGuiCond_Always, 0.5f, 0.0f); + //ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); + //ImGui::SetNextWindowBgAlpha(0.25f); + //imgui.begin(std::string("COG"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove); + //imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _u8L("Center of mass") + ":"); + //ImGui::SameLine(); + //char buf[1024]; + //const Vec3d position = cog(); + //sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f", position.x(), position.y(), position.z()); + //imgui.text(std::string(buf)); + + //// force extra frame to automatically update window size + //const float width = ImGui::GetWindowWidth(); + //const size_t length = strlen(buf); + //if (width != last_window_width || length != last_text_length) { + // last_window_width = width; + // last_text_length = length; + // imgui.set_requires_extra_frame(); + //} + + //imgui.end(); + //ImGui::PopStyleVar(); +} +#endif // ENABLE_SHOW_TOOLPATHS_COG + #if ENABLE_PREVIEW_LAYER_TIME float GCodeViewer::Extrusions::Range::step_size(EType type) const { @@ -221,11 +309,11 @@ void GCodeViewer::SequentialRangeCap::reset() { void GCodeViewer::SequentialView::Marker::init() { m_model.init_from(stilized_arrow(16, 2.0f, 4.0f, 1.0f, 8.0f)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_model.set_color({ 1.0f, 1.0f, 1.0f, 0.5f }); #else m_model.set_color(-1, { 1.0f, 1.0f, 1.0f, 0.5f }); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } void GCodeViewer::SequentialView::Marker::set_world_position(const Vec3f& position) @@ -248,13 +336,22 @@ void GCodeViewer::SequentialView::Marker::render() shader->start_using(); shader->set_uniform("emission_factor", 0.0f); - +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d matrix = camera.get_view_matrix() * m_world_transform.cast(); + shader->set_uniform("view_model_matrix", matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + shader->set_uniform("normal_matrix", (Matrix3d)matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glPushMatrix()); glsafe(::glMultMatrixf(m_world_transform.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_model.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES shader->stop_using(); @@ -354,6 +451,7 @@ void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, u static const ImVec4 COMMAND_COLOR = { 0.8f, 0.8f, 0.0f, 1.0f }; static const ImVec4 PARAMETERS_COLOR = { 1.0f, 1.0f, 1.0f, 1.0f }; static const ImVec4 COMMENT_COLOR = { 0.7f, 0.7f, 0.7f, 1.0f }; + static const ImVec4 ELLIPSIS_COLOR = { 0.0f, 0.7f, 0.0f, 1.0f }; if (!m_visible || m_filename.empty() || m_lines_ends.empty() || curr_line_id == 0) return; @@ -398,6 +496,35 @@ void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, u ImGuiWrapper& imgui = *wxGetApp().imgui(); + auto add_item_to_line = [&imgui](const std::string& txt, const ImVec4& color, float spacing, size_t& current_length) { + static const size_t LENGTH_THRESHOLD = 60; + + if (txt.empty()) + return false; + + std::string out_text = txt; + bool reduced = false; + if (current_length + out_text.length() > LENGTH_THRESHOLD) { + out_text = out_text.substr(0, LENGTH_THRESHOLD - current_length); + reduced = true; + } + + current_length += out_text.length(); + + ImGui::SameLine(0.0f, spacing); + ImGui::PushStyleColor(ImGuiCol_Text, color); + imgui.text(out_text); + ImGui::PopStyleColor(); + if (reduced) { + ImGui::SameLine(0.0f, 0.0f); + ImGui::PushStyleColor(ImGuiCol_Text, ELLIPSIS_COLOR); + imgui.text("..."); + ImGui::PopStyleColor(); + } + + return reduced; + }; + imgui.set_next_window_pos(0.0f, top, ImGuiCond_Always, 0.0f, 0.0f); imgui.set_next_window_size(0.0f, wnd_height, ImGuiCond_Always); ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); @@ -422,41 +549,22 @@ void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, u ImGui::GetColorU32(SELECTION_RECT_COLOR)); } - // render line number const std::string id_str = std::to_string(id); // spacer to right align text ImGui::Dummy({ id_width - ImGui::CalcTextSize(id_str.c_str()).x, text_height }); - ImGui::SameLine(0.0f, 0.0f); - ImGui::PushStyleColor(ImGuiCol_Text, LINE_NUMBER_COLOR); - imgui.text(id_str); - ImGui::PopStyleColor(); - if (!line.command.empty() || !line.comment.empty()) - ImGui::SameLine(); - - // render command - if (!line.command.empty()) { - ImGui::PushStyleColor(ImGuiCol_Text, COMMAND_COLOR); - imgui.text(line.command); - ImGui::PopStyleColor(); - } - - // render parameters - if (!line.parameters.empty()) { - ImGui::SameLine(0.0f, 0.0f); - ImGui::PushStyleColor(ImGuiCol_Text, PARAMETERS_COLOR); - imgui.text(line.parameters); - ImGui::PopStyleColor(); - } - - // render comment - if (!line.comment.empty()) { - if (!line.command.empty()) - ImGui::SameLine(0.0f, 0.0f); - ImGui::PushStyleColor(ImGuiCol_Text, COMMENT_COLOR); - imgui.text(line.comment); - ImGui::PopStyleColor(); - } + size_t line_length = 0; + // render line number + bool stop_adding = add_item_to_line(id_str, LINE_NUMBER_COLOR, 0.0f, line_length); + if (!stop_adding && !line.command.empty()) + // render command + stop_adding = add_item_to_line(line.command, COMMAND_COLOR, -1.0f, line_length); + if (!stop_adding && !line.parameters.empty()) + // render parameters + stop_adding = add_item_to_line(line.parameters, PARAMETERS_COLOR, 0.0f, line_length); + if (!stop_adding && !line.comment.empty()) + // render comment + stop_adding = add_item_to_line(line.comment, COMMENT_COLOR, line.command.empty() ? -1.0f : 0.0f, line_length); } imgui.end(); @@ -597,7 +705,6 @@ void GCodeViewer::init() buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::BatchedModel; buffer.vertices.format = VBuffer::EFormat::PositionNormal3; buffer.shader = "gouraud_light"; - buffer.model.data = diamond(16); buffer.model.color = option_color(type); buffer.model.instances.format = InstanceVBuffer::EFormat::BatchedModel; @@ -615,8 +722,13 @@ void GCodeViewer::init() } case EMoveType::Travel: { buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::Line; +#if ENABLE_GL_SHADERS_ATTRIBUTES + buffer.vertices.format = VBuffer::EFormat::Position; + buffer.shader = "flat"; +#else buffer.vertices.format = VBuffer::EFormat::PositionNormal3; buffer.shader = "toolpaths_lines"; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES break; } } @@ -635,13 +747,26 @@ void GCodeViewer::init() m_gl_data_initialized = true; } +#if ENABLE_LEGACY_OPENGL_REMOVAL +void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& print) +#else void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& print, bool initialized) +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { // avoid processing if called with the same gcode_result +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + if (m_last_result_id == gcode_result.id && + (m_last_view_type == m_view_type || (m_last_view_type != EViewType::VolumetricRate && m_view_type != EViewType::VolumetricRate))) + return; +#else if (m_last_result_id == gcode_result.id) return; +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC m_last_result_id = gcode_result.id; +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + m_last_view_type = m_view_type; +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC // release gpu memory, if used reset(); @@ -665,7 +790,11 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& pr m_filament_densities = gcode_result.filament_densities; if (wxGetApp().is_editor()) +#if ENABLE_LEGACY_OPENGL_REMOVAL + load_shells(print); +#else load_shells(print, initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL else { Pointfs bed_shape; std::string texture; @@ -955,6 +1084,9 @@ unsigned int GCodeViewer::get_options_visibility_flags() const flags = set_flag(flags, static_cast(Preview::OptionType::ColorChanges), is_toolpath_move_type_visible(EMoveType::Color_change)); flags = set_flag(flags, static_cast(Preview::OptionType::PausePrints), is_toolpath_move_type_visible(EMoveType::Pause_Print)); flags = set_flag(flags, static_cast(Preview::OptionType::CustomGCodes), is_toolpath_move_type_visible(EMoveType::Custom_GCode)); +#if ENABLE_SHOW_TOOLPATHS_COG + flags = set_flag(flags, static_cast(Preview::OptionType::CenterOfGravity), m_cog.is_visible()); +#endif // ENABLE_SHOW_TOOLPATHS_COG flags = set_flag(flags, static_cast(Preview::OptionType::Shells), m_shells.visible); flags = set_flag(flags, static_cast(Preview::OptionType::ToolMarker), m_sequential_view.marker.is_visible()); #if !ENABLE_PREVIEW_LAYOUT @@ -978,6 +1110,9 @@ void GCodeViewer::set_options_visibility_from_flags(unsigned int flags) set_toolpath_move_type_visible(EMoveType::Color_change, is_flag_set(static_cast(Preview::OptionType::ColorChanges))); set_toolpath_move_type_visible(EMoveType::Pause_Print, is_flag_set(static_cast(Preview::OptionType::PausePrints))); set_toolpath_move_type_visible(EMoveType::Custom_GCode, is_flag_set(static_cast(Preview::OptionType::CustomGCodes))); +#if ENABLE_SHOW_TOOLPATHS_COG + m_cog.set_visible(is_flag_set(static_cast(Preview::OptionType::CenterOfGravity))); +#endif // ENABLE_SHOW_TOOLPATHS_COG m_shells.visible = is_flag_set(static_cast(Preview::OptionType::Shells)); m_sequential_view.marker.set_visible(is_flag_set(static_cast(Preview::OptionType::ToolMarker))); #if !ENABLE_PREVIEW_LAYOUT @@ -1165,25 +1300,23 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) log_memory_used(label, vertices_size + indices_size); }; - // format data into the buffers to be rendered as points - auto add_vertices_as_point = [](const GCodeProcessorResult::MoveVertex& curr, VertexBuffer& vertices) { - vertices.push_back(curr.position.x()); - vertices.push_back(curr.position.y()); - vertices.push_back(curr.position.z()); - }; - auto add_indices_as_point = [](const GCodeProcessorResult::MoveVertex& curr, TBuffer& buffer, - unsigned int ibuffer_id, IndexBuffer& indices, size_t move_id) { - buffer.add_path(curr, ibuffer_id, indices.size(), move_id); - indices.push_back(static_cast(indices.size())); - }; - // format data into the buffers to be rendered as lines auto add_vertices_as_line = [](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, VertexBuffer& vertices) { +#if !ENABLE_GL_SHADERS_ATTRIBUTES // x component of the normal to the current segment (the normal is parallel to the XY plane) const Vec3f dir = (curr.position - prev.position).normalized(); Vec3f normal(dir.y(), -dir.x(), 0.0); normal.normalize(); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_SHADERS_ATTRIBUTES + auto add_vertex = [&vertices](const GCodeProcessorResult::MoveVertex& vertex) { + // add position + vertices.push_back(vertex.position.x()); + vertices.push_back(vertex.position.y()); + vertices.push_back(vertex.position.z()); + }; +#else auto add_vertex = [&vertices, &normal](const GCodeProcessorResult::MoveVertex& vertex) { // add position vertices.push_back(vertex.position.x()); @@ -1194,15 +1327,22 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) vertices.push_back(normal.y()); vertices.push_back(normal.z()); }; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // add previous vertex add_vertex(prev); // add current vertex add_vertex(curr); }; +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + auto add_indices_as_line = [](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, TBuffer& buffer, + unsigned int ibuffer_id, IndexBuffer& indices, size_t move_id, bool account_for_volumetric_rate) { + if (buffer.paths.empty() || prev.type != curr.type || !buffer.paths.back().matches(curr, account_for_volumetric_rate)) { +#else auto add_indices_as_line = [](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, TBuffer& buffer, unsigned int ibuffer_id, IndexBuffer& indices, size_t move_id) { if (buffer.paths.empty() || prev.type != curr.type || !buffer.paths.back().matches(curr)) { +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC // add starting index indices.push_back(static_cast(indices.size())); buffer.add_path(curr, ibuffer_id, indices.size() - 1, move_id - 1); @@ -1221,7 +1361,13 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) }; // format data into the buffers to be rendered as solid - auto add_vertices_as_solid = [](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, TBuffer& buffer, unsigned int vbuffer_id, VertexBuffer& vertices, size_t move_id) { +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + auto add_vertices_as_solid = [](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, TBuffer& buffer, + unsigned int vbuffer_id, VertexBuffer& vertices, size_t move_id, bool account_for_volumetric_rate) { +#else + auto add_vertices_as_solid = [](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, TBuffer& buffer, + unsigned int vbuffer_id, VertexBuffer& vertices, size_t move_id) { +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC auto store_vertex = [](VertexBuffer& vertices, const Vec3f& position, const Vec3f& normal) { // append position vertices.push_back(position.x()); @@ -1233,7 +1379,11 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) vertices.push_back(normal.z()); }; +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + if (buffer.paths.empty() || prev.type != curr.type || !buffer.paths.back().matches(curr, account_for_volumetric_rate)) { +#else if (buffer.paths.empty() || prev.type != curr.type || !buffer.paths.back().matches(curr)) { +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC buffer.add_path(curr, vbuffer_id, vertices.size(), move_id - 1); buffer.paths.back().sub_paths.back().first.position = prev.position; } @@ -1278,8 +1428,15 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) last_path.sub_paths.back().last = { vbuffer_id, vertices.size(), move_id, curr.position }; }; - auto add_indices_as_solid = [&](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, const GCodeProcessorResult::MoveVertex* next, - TBuffer& buffer, size_t& vbuffer_size, unsigned int ibuffer_id, IndexBuffer& indices, size_t move_id) { +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + auto add_indices_as_solid = [&](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, + const GCodeProcessorResult::MoveVertex* next, TBuffer& buffer, size_t& vbuffer_size, unsigned int ibuffer_id, + IndexBuffer& indices, size_t move_id, bool account_for_volumetric_rate) { +#else + auto add_indices_as_solid = [&](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, + const GCodeProcessorResult::MoveVertex* next, TBuffer& buffer, size_t& vbuffer_size, unsigned int ibuffer_id, + IndexBuffer& indices, size_t move_id) { +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC static Vec3f prev_dir; static Vec3f prev_up; static float sq_prev_length; @@ -1324,7 +1481,11 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) store_triangle(indices, v_offsets[4], v_offsets[5], v_offsets[6]); }; +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + if (buffer.paths.empty() || prev.type != curr.type || !buffer.paths.back().matches(curr, account_for_volumetric_rate)) { +#else if (buffer.paths.empty() || prev.type != curr.type || !buffer.paths.back().matches(curr)) { +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC buffer.add_path(curr, ibuffer_id, indices.size(), move_id - 1); buffer.paths.back().sub_paths.back().first.position = prev.position; } @@ -1408,7 +1569,11 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) vbuffer_size += 6; } +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + if (next != nullptr && (curr.type != next->type || !last_path.matches(*next, account_for_volumetric_rate))) +#else if (next != nullptr && (curr.type != next->type || !last_path.matches(*next))) +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC // ending cap triangles append_ending_cap_triangles(indices, is_first_segment ? first_seg_v_offsets : non_first_seg_v_offsets); @@ -1441,7 +1606,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) const Transform3d trafo = Geometry::assemble_transform((curr.position - 0.5f * curr.height * Vec3f::UnitZ()).cast(), Vec3d::Zero(), { width, width, height }); const Eigen::Matrix normal_matrix = trafo.matrix().template block<3, 3>(0, 0).inverse().transpose(); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // append vertices const size_t vertices_count = data.vertices_count(); for (size_t i = 0; i < vertices_count; ++i) { @@ -1474,7 +1639,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) vertices.push_back(static_cast(normal.z())); } } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // append instance position instances.push_back(curr.position.x()); @@ -1485,10 +1650,10 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) }; auto add_indices_as_model_batch = [](const GLModel::Geometry& data, IndexBuffer& indices, IBufferType base_index) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL const size_t indices_count = data.indices_count(); for (size_t i = 0; i < indices_count; ++i) { - indices.push_back(static_cast(data.extract_ushort_index(i) + base_index)); + indices.push_back(static_cast(data.extract_index(i) + base_index)); } #else for (const auto& entity : data.entities) { @@ -1496,7 +1661,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) indices.push_back(static_cast(entity.indices[i] + base_index)); } } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL }; #if ENABLE_GCODE_VIEWER_STATISTICS @@ -1537,6 +1702,10 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) if (wxGetApp().is_editor()) m_contained_in_bed = wxGetApp().plater()->build_volume().all_paths_inside(gcode_result, m_paths_bounding_box); +#if ENABLE_SHOW_TOOLPATHS_COG + m_cog.reset(); +#endif // ENABLE_SHOW_TOOLPATHS_COG + m_sequential_view.gcode_ids.clear(); for (size_t i = 0; i < gcode_result.moves.size(); ++i) { const GCodeProcessorResult::MoveVertex& move = gcode_result.moves[i]; @@ -1544,6 +1713,10 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) m_sequential_view.gcode_ids.push_back(move.gcode_id); } +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + bool account_for_volumetric_rate = m_view_type == EViewType::VolumetricRate; +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + std::vector vertices(m_buffers.size()); std::vector indices(m_buffers.size()); std::vector instances(m_buffers.size()); @@ -1551,18 +1724,15 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) std::vector instances_offsets(m_buffers.size()); std::vector options_zs; - size_t seams_count = 0; std::vector biased_seams_ids; // toolpaths data -> extract vertices from result for (size_t i = 0; i < m_moves_count; ++i) { const GCodeProcessorResult::MoveVertex& curr = gcode_result.moves[i]; - if (curr.type == EMoveType::Seam) { - ++seams_count; + if (curr.type == EMoveType::Seam) biased_seams_ids.push_back(i - biased_seams_ids.size() - 1); - } - size_t move_id = i - seams_count; + const size_t move_id = i - biased_seams_ids.size(); // skip first vertex if (i == 0) @@ -1570,6 +1740,20 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) const GCodeProcessorResult::MoveVertex& prev = gcode_result.moves[i - 1]; +#if ENABLE_SHOW_TOOLPATHS_COG + if (curr.type == EMoveType::Extrude && + curr.extrusion_role != erSkirt && + curr.extrusion_role != erSupportMaterial && + curr.extrusion_role != erSupportMaterialInterface && + curr.extrusion_role != erWipeTower && + curr.extrusion_role != erCustom && + curr.extrusion_role != erMixed) { + const Vec3d curr_pos = curr.position.cast(); + const Vec3d prev_pos = prev.position.cast(); + m_cog.add_segment(curr_pos, prev_pos, curr.mm3_per_mm * (curr_pos - prev_pos).norm()); + } +#endif // ENABLE_SHOW_TOOLPATHS_COG + // update progress dialog ++progress_count; if (progress_dialog != nullptr && progress_count % progress_threshold == 0) { @@ -1597,7 +1781,11 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) v_multibuffer.push_back(VertexBuffer()); if (t_buffer.render_primitive_type == TBuffer::ERenderPrimitiveType::Triangle) { Path& last_path = t_buffer.paths.back(); +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + if (prev.type == curr.type && last_path.matches(curr, account_for_volumetric_rate)) +#else if (prev.type == curr.type && last_path.matches(curr)) +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC last_path.add_sub_path(prev, static_cast(v_multibuffer.size()) - 1, 0, move_id - 1); } } @@ -1606,9 +1794,12 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) switch (t_buffer.render_primitive_type) { - case TBuffer::ERenderPrimitiveType::Point: { add_vertices_as_point(curr, v_buffer); break; } case TBuffer::ERenderPrimitiveType::Line: { add_vertices_as_line(prev, curr, v_buffer); break; } +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + case TBuffer::ERenderPrimitiveType::Triangle: { add_vertices_as_solid(prev, curr, t_buffer, static_cast(v_multibuffer.size()) - 1, v_buffer, move_id, account_for_volumetric_rate); break; } +#else case TBuffer::ERenderPrimitiveType::Triangle: { add_vertices_as_solid(prev, curr, t_buffer, static_cast(v_multibuffer.size()) - 1, v_buffer, move_id); break; } +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC case TBuffer::ERenderPrimitiveType::InstancedModel: { add_model_instance(curr, inst_buffer, inst_id_buffer, move_id); @@ -1893,14 +2084,14 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) using VboIndexList = std::vector; std::vector vbo_indices(m_buffers.size()); - seams_count = 0; + size_t seams_count = 0; for (size_t i = 0; i < m_moves_count; ++i) { const GCodeProcessorResult::MoveVertex& curr = gcode_result.moves[i]; if (curr.type == EMoveType::Seam) ++seams_count; - size_t move_id = i - seams_count; + const size_t move_id = i - seams_count; // skip first vertex if (i == 0) @@ -1938,8 +2129,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) if (i_multibuffer.back().size() * sizeof(IBufferType) >= IBUFFER_THRESHOLD_BYTES - indiced_size_to_add) { i_multibuffer.push_back(IndexBuffer()); vbo_index_list.push_back(t_buffer.vertices.vbos[curr_vertex_buffer.first]); - if (t_buffer.render_primitive_type != TBuffer::ERenderPrimitiveType::Point && - t_buffer.render_primitive_type != TBuffer::ERenderPrimitiveType::BatchedModel) { + if (t_buffer.render_primitive_type != TBuffer::ERenderPrimitiveType::BatchedModel) { Path& last_path = t_buffer.paths.back(); last_path.add_sub_path(prev, static_cast(i_multibuffer.size()) - 1, 0, move_id - 1); } @@ -1955,8 +2145,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) curr_vertex_buffer.second = 0; vbo_index_list.push_back(t_buffer.vertices.vbos[curr_vertex_buffer.first]); - if (t_buffer.render_primitive_type != TBuffer::ERenderPrimitiveType::Point && - t_buffer.render_primitive_type != TBuffer::ERenderPrimitiveType::BatchedModel) { + if (t_buffer.render_primitive_type != TBuffer::ERenderPrimitiveType::BatchedModel) { Path& last_path = t_buffer.paths.back(); last_path.add_sub_path(prev, static_cast(i_multibuffer.size()) - 1, 0, move_id - 1); } @@ -1966,18 +2155,21 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) switch (t_buffer.render_primitive_type) { - case TBuffer::ERenderPrimitiveType::Point: { - add_indices_as_point(curr, t_buffer, static_cast(i_multibuffer.size()) - 1, i_buffer, move_id); - curr_vertex_buffer.second += t_buffer.max_vertices_per_segment(); - break; - } case TBuffer::ERenderPrimitiveType::Line: { +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + add_indices_as_line(prev, curr, t_buffer, static_cast(i_multibuffer.size()) - 1, i_buffer, move_id, account_for_volumetric_rate); +#else add_indices_as_line(prev, curr, t_buffer, static_cast(i_multibuffer.size()) - 1, i_buffer, move_id); +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC curr_vertex_buffer.second += t_buffer.max_vertices_per_segment(); break; } case TBuffer::ERenderPrimitiveType::Triangle: { +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + add_indices_as_solid(prev, curr, next, t_buffer, curr_vertex_buffer.second, static_cast(i_multibuffer.size()) - 1, i_buffer, move_id, account_for_volumetric_rate); +#else add_indices_as_solid(prev, curr, next, t_buffer, curr_vertex_buffer.second, static_cast(i_multibuffer.size()) - 1, i_buffer, move_id); +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC break; } case TBuffer::ERenderPrimitiveType::BatchedModel: { @@ -2071,13 +2263,19 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) size_t move_id = i - seams_count; if (move.type == EMoveType::Extrude) { - // layers zs - const double* const last_z = m_layers.empty() ? nullptr : &m_layers.get_zs().back(); - const double z = static_cast(move.position.z()); - if (last_z == nullptr || z < *last_z - EPSILON || *last_z + EPSILON < z) - m_layers.append(z, { last_travel_s_id, move_id }); - else - m_layers.get_ranges().back().last = move_id; +#if ENABLE_PROCESS_G2_G3_LINES + if (move.extrusion_role != erNone && !move.internal_only) { +#endif // ENABLE_PROCESS_G2_G3_LINES + // layers zs + const double* const last_z = m_layers.empty() ? nullptr : &m_layers.get_zs().back(); + const double z = static_cast(move.position.z()); + if (last_z == nullptr || z < *last_z - EPSILON || *last_z + EPSILON < z) + m_layers.append(z, { last_travel_s_id, move_id }); + else + m_layers.get_ranges().back().last = move_id; +#if ENABLE_PROCESS_G2_G3_LINES + } +#endif // ENABLE_PROCESS_G2_G3_LINES // extruder ids m_extruder_ids.emplace_back(move.extruder_id); // roles @@ -2100,7 +2298,6 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) sort_remove_duplicates(m_extruder_ids); m_extruder_ids.shrink_to_fit(); -#if ENABLE_SPIRAL_VASE_LAYERS // replace layers for spiral vase mode if (!gcode_result.spiral_vase_layers.empty()) { m_layers.reset(); @@ -2108,7 +2305,6 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) m_layers.append(layer.first, { layer.second.first, layer.second.second }); } } -#endif // ENABLE_SPIRAL_VASE_LAYERS // set layers z range if (!m_layers.empty()) @@ -2132,7 +2328,11 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result) progress_dialog->Destroy(); } +#if ENABLE_LEGACY_OPENGL_REMOVAL +void GCodeViewer::load_shells(const Print& print) +#else void GCodeViewer::load_shells(const Print& print, bool initialized) +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { if (print.objects().empty()) // no shells, return @@ -2149,7 +2349,11 @@ void GCodeViewer::load_shells(const Print& print, bool initialized) } size_t current_volumes_count = m_shells.volumes.volumes.size(); - m_shells.volumes.load_object(model_obj, object_id, instance_ids, "object", initialized); +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_shells.volumes.load_object(model_obj, object_id, instance_ids); +#else + m_shells.volumes.load_object(model_obj, object_id, instance_ids, initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // adjust shells' z if raft is present const SlicingParameters& slicing_parameters = obj->slicing_parameters(); @@ -2173,6 +2377,15 @@ void GCodeViewer::load_shells(const Print& print, bool initialized) const float depth = print.wipe_tower_data(extruders_count).depth; const float brim_width = print.wipe_tower_data(extruders_count).brim_width; +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL + m_shells.volumes.load_wipe_tower_preview(config.wipe_tower_x, config.wipe_tower_y, config.wipe_tower_width, depth, max_z, config.wipe_tower_rotation_angle, + !print.is_step_done(psWipeTower), brim_width); +#else + m_shells.volumes.load_wipe_tower_preview(1000, config.wipe_tower_x, config.wipe_tower_y, config.wipe_tower_width, depth, max_z, config.wipe_tower_rotation_angle, + !print.is_step_done(psWipeTower), brim_width); +#endif // ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL +#else #if ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL m_shells.volumes.load_wipe_tower_preview(config.wipe_tower_x, config.wipe_tower_y, config.wipe_tower_width, depth, max_z, config.wipe_tower_rotation_angle, !print.is_step_done(psWipeTower), brim_width, initialized); @@ -2180,6 +2393,7 @@ void GCodeViewer::load_shells(const Print& print, bool initialized) m_shells.volumes.load_wipe_tower_preview(1000, config.wipe_tower_x, config.wipe_tower_y, config.wipe_tower_width, depth, max_z, config.wipe_tower_rotation_angle, !print.is_step_done(psWipeTower), brim_width, initialized); #endif // ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } @@ -2416,7 +2630,7 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool // gets the vertex index from the index buffer on gpu const IBuffer& i_buffer = buffer.indices[sub_path.first.b_id]; - unsigned int index = 0; + IBufferType index = 0; glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, i_buffer.ibo)); glsafe(::glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, static_cast(offset * sizeof(IBufferType)), static_cast(sizeof(IBufferType)), static_cast(&index))); glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); @@ -2492,10 +2706,6 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool unsigned int size_in_indices = 0; switch (buffer.render_primitive_type) { - case TBuffer::ERenderPrimitiveType::Point: { - size_in_indices = buffer.indices_per_segment(); - break; - } case TBuffer::ERenderPrimitiveType::Line: case TBuffer::ERenderPrimitiveType::Triangle: { unsigned int segments_count = std::min(m_sequential_view.current.last, sub_path.last.s_id) - std::max(m_sequential_view.current.first, sub_path.first.s_id); @@ -2728,58 +2938,17 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool void GCodeViewer::render_toolpaths() { -#if ENABLE_FIXED_SCREEN_SIZE_POINT_MARKERS - float point_size = 20.0f; -#else - float point_size = 0.8f; -#endif // ENABLE_FIXED_SCREEN_SIZE_POINT_MARKERS - std::array light_intensity = { 0.25f, 0.70f, 0.75f, 0.75f }; +#if !ENABLE_GL_SHADERS_ATTRIBUTES + const std::array light_intensity = { 0.25f, 0.70f, 0.75f, 0.75f }; +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES const Camera& camera = wxGetApp().plater()->get_camera(); - double zoom = camera.get_zoom(); - const std::array& viewport = camera.get_viewport(); - float near_plane_height = camera.get_type() == Camera::EType::Perspective ? static_cast(viewport[3]) / (2.0f * static_cast(2.0 * std::tan(0.5 * Geometry::deg2rad(camera.get_fov())))) : - static_cast(viewport[3]) * 0.0005; + const double zoom = camera.get_zoom(); - auto shader_init_as_points = [zoom, point_size, near_plane_height](GLShaderProgram& shader) { -#if ENABLE_FIXED_SCREEN_SIZE_POINT_MARKERS - shader.set_uniform("use_fixed_screen_size", 1); -#else - shader.set_uniform("use_fixed_screen_size", 0); -#endif // ENABLE_FIXED_SCREEN_SIZE_POINT_MARKERS - shader.set_uniform("zoom", zoom); - shader.set_uniform("percent_outline_radius", 0.0f); - shader.set_uniform("percent_center_radius", 0.33f); - shader.set_uniform("point_size", point_size); - shader.set_uniform("near_plane_height", near_plane_height); - }; - - auto render_as_points = [ -#if ENABLE_GCODE_VIEWER_STATISTICS - this -#endif // ENABLE_GCODE_VIEWER_STATISTICS - ](std::vector::iterator it_path, std::vector::iterator it_end, GLShaderProgram& shader, int uniform_color) { - glsafe(::glEnable(GL_VERTEX_PROGRAM_POINT_SIZE)); - glsafe(::glEnable(GL_POINT_SPRITE)); - - for (auto it = it_path; it != it_end && it_path->ibuffer_id == it->ibuffer_id; ++it) { - const RenderPath& path = *it; - // Some OpenGL drivers crash on empty glMultiDrawElements, see GH #7415. - assert(! path.sizes.empty()); - assert(! path.offsets.empty()); - shader.set_uniform(uniform_color, path.color); - glsafe(::glMultiDrawElements(GL_POINTS, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_SHORT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size())); -#if ENABLE_GCODE_VIEWER_STATISTICS - ++m_statistics.gl_multi_points_calls_count; -#endif // ENABLE_GCODE_VIEWER_STATISTICS - } - - glsafe(::glDisable(GL_POINT_SPRITE)); - glsafe(::glDisable(GL_VERTEX_PROGRAM_POINT_SIZE)); - }; - - auto shader_init_as_lines = [light_intensity](GLShaderProgram &shader) { +#if !ENABLE_GL_SHADERS_ATTRIBUTES + auto shader_init_as_lines = [light_intensity](GLShaderProgram &shader) { shader.set_uniform("light_intensity", light_intensity); }; +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES auto render_as_lines = [ #if ENABLE_GCODE_VIEWER_STATISTICS this @@ -2830,11 +2999,11 @@ void GCodeViewer::render_toolpaths() } if (range.vbo > 0) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL buffer.model.model.set_color(range.color); #else buffer.model.model.set_color(-1, range.color); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL buffer.model.model.render_instanced(range.vbo, range.count); #if ENABLE_GCODE_VIEWER_STATISTICS ++m_statistics.gl_instanced_models_calls_count; @@ -2844,11 +3013,19 @@ void GCodeViewer::render_toolpaths() } }; +#if ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GCODE_VIEWER_STATISTICS + auto render_as_batched_model = [this](TBuffer& buffer, GLShaderProgram& shader, int position_id, int normal_id) { +#else + auto render_as_batched_model = [](TBuffer& buffer, GLShaderProgram& shader, int position_id, int normal_id) { +#endif // ENABLE_GCODE_VIEWER_STATISTICS +#else #if ENABLE_GCODE_VIEWER_STATISTICS auto render_as_batched_model = [this](TBuffer& buffer, GLShaderProgram& shader) { #else auto render_as_batched_model = [](TBuffer& buffer, GLShaderProgram& shader) { #endif // ENABLE_GCODE_VIEWER_STATISTICS +#endif // ENABLE_GL_SHADERS_ATTRIBUTES struct Range { @@ -2857,30 +3034,44 @@ void GCodeViewer::render_toolpaths() bool intersects(const Range& other) const { return (other.last < first || other.first > last) ? false : true; } }; Range buffer_range = { 0, 0 }; - size_t indices_per_instance = buffer.model.data.indices_count(); + const size_t indices_per_instance = buffer.model.data.indices_count(); for (size_t j = 0; j < buffer.indices.size(); ++j) { const IBuffer& i_buffer = buffer.indices[j]; buffer_range.last = buffer_range.first + i_buffer.count / indices_per_instance; glsafe(::glBindBuffer(GL_ARRAY_BUFFER, i_buffer.vbo)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (position_id != -1) { + glsafe(::glVertexAttribPointer(position_id, buffer.vertices.position_size_floats(), GL_FLOAT, GL_FALSE, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.position_offset_bytes())); + glsafe(::glEnableVertexAttribArray(position_id)); + } +#else glsafe(::glVertexPointer(buffer.vertices.position_size_floats(), GL_FLOAT, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.position_offset_bytes())); glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); - bool has_normals = buffer.vertices.normal_size_floats() > 0; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + const bool has_normals = buffer.vertices.normal_size_floats() > 0; if (has_normals) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (normal_id != -1) { + glsafe(::glVertexAttribPointer(normal_id, buffer.vertices.normal_size_floats(), GL_FLOAT, GL_FALSE, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.normal_offset_bytes())); + glsafe(::glEnableVertexAttribArray(normal_id)); + } +#else glsafe(::glNormalPointer(GL_FLOAT, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.normal_offset_bytes())); glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, i_buffer.ibo)); for (auto& range : buffer.model.instances.render_ranges.ranges) { - Range range_range = { range.offset, range.offset + range.count }; + const Range range_range = { range.offset, range.offset + range.count }; if (range_range.intersects(buffer_range)) { shader.set_uniform("uniform_color", range.color); - unsigned int offset = (range_range.first > buffer_range.first) ? range_range.first - buffer_range.first : 0; - size_t offset_bytes = static_cast(offset) * indices_per_instance * sizeof(IBufferType); - Range render_range = { std::max(range_range.first, buffer_range.first), std::min(range_range.last, buffer_range.last) }; - size_t count = static_cast(render_range.last - render_range.first) * indices_per_instance; + const unsigned int offset = (range_range.first > buffer_range.first) ? range_range.first - buffer_range.first : 0; + const size_t offset_bytes = static_cast(offset) * indices_per_instance * sizeof(IBufferType); + const Range render_range = { std::max(range_range.first, buffer_range.first), std::min(range_range.last, buffer_range.last) }; + const size_t count = static_cast(render_range.last - render_range.first) * indices_per_instance; if (count > 0) { glsafe(::glDrawElements(GL_TRIANGLES, (GLsizei)count, GL_UNSIGNED_SHORT, (const void*)offset_bytes)); #if ENABLE_GCODE_VIEWER_STATISTICS @@ -2892,10 +3083,17 @@ void GCodeViewer::render_toolpaths() glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (normal_id != -1) + glsafe(::glDisableVertexAttribArray(normal_id)); + if (position_id != -1) + glsafe(::glDisableVertexAttribArray(position_id)); +#else if (has_normals) glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); buffer_range.first = buffer_range.last; @@ -2906,8 +3104,8 @@ void GCodeViewer::render_toolpaths() return (zoom < 5.0) ? 1.0 : (1.0 + 5.0 * (zoom - 5.0) / (100.0 - 5.0)); }; - unsigned char begin_id = buffer_id(EMoveType::Retract); - unsigned char end_id = buffer_id(EMoveType::Count); + const unsigned char begin_id = buffer_id(EMoveType::Retract); + const unsigned char end_id = buffer_id(EMoveType::Count); for (unsigned char i = begin_id; i < end_id; ++i) { TBuffer& buffer = m_buffers[i]; @@ -2915,116 +3113,184 @@ void GCodeViewer::render_toolpaths() continue; GLShaderProgram* shader = wxGetApp().get_shader(buffer.shader.c_str()); - if (shader != nullptr) { - shader->start_using(); + if (shader == nullptr) + continue; - if (buffer.render_primitive_type == TBuffer::ERenderPrimitiveType::InstancedModel) { - shader->set_uniform("emission_factor", 0.25f); - render_as_instanced_model(buffer, *shader); - shader->set_uniform("emission_factor", 0.0f); - } - else if (buffer.render_primitive_type == TBuffer::ERenderPrimitiveType::BatchedModel) { - shader->set_uniform("emission_factor", 0.25f); - render_as_batched_model(buffer, *shader); - shader->set_uniform("emission_factor", 0.0f); - } - else { - switch (buffer.render_primitive_type) { - case TBuffer::ERenderPrimitiveType::Point: shader_init_as_points(*shader); break; - case TBuffer::ERenderPrimitiveType::Line: shader_init_as_lines(*shader); break; - default: break; - } - int uniform_color = shader->get_uniform_location("uniform_color"); - auto it_path = buffer.render_paths.begin(); - for (unsigned int ibuffer_id = 0; ibuffer_id < static_cast(buffer.indices.size()); ++ibuffer_id) { - const IBuffer& i_buffer = buffer.indices[ibuffer_id]; - // Skip all paths with ibuffer_id < ibuffer_id. - for (; it_path != buffer.render_paths.end() && it_path->ibuffer_id < ibuffer_id; ++ it_path) ; - if (it_path == buffer.render_paths.end() || it_path->ibuffer_id > ibuffer_id) - // Not found. This shall not happen. - continue; + shader->start_using(); - glsafe(::glBindBuffer(GL_ARRAY_BUFFER, i_buffer.vbo)); - glsafe(::glVertexPointer(buffer.vertices.position_size_floats(), GL_FLOAT, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.position_offset_bytes())); - glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); - bool has_normals = buffer.vertices.normal_size_floats() > 0; - if (has_normals) { - glsafe(::glNormalPointer(GL_FLOAT, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.normal_offset_bytes())); - glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); - } +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d& view_matrix = camera.get_view_matrix(); + shader->set_uniform("view_model_matrix", view_matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + shader->set_uniform("normal_matrix", (Matrix3d)view_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES - glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, i_buffer.ibo)); - - // Render all elements with it_path->ibuffer_id == ibuffer_id, possible with varying colors. - switch (buffer.render_primitive_type) - { - case TBuffer::ERenderPrimitiveType::Point: { - render_as_points(it_path, buffer.render_paths.end(), *shader, uniform_color); - break; - } - case TBuffer::ERenderPrimitiveType::Line: { - glsafe(::glLineWidth(static_cast(line_width(zoom)))); - render_as_lines(it_path, buffer.render_paths.end(), *shader, uniform_color); - break; - } - case TBuffer::ERenderPrimitiveType::Triangle: { - render_as_triangles(it_path, buffer.render_paths.end(), *shader, uniform_color); - break; - } - default: { break; } - } - - glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); - - if (has_normals) - glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); - - glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); - glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); - } - } - - shader->stop_using(); + if (buffer.render_primitive_type == TBuffer::ERenderPrimitiveType::InstancedModel) { + shader->set_uniform("emission_factor", 0.25f); + render_as_instanced_model(buffer, *shader); + shader->set_uniform("emission_factor", 0.0f); } + else if (buffer.render_primitive_type == TBuffer::ERenderPrimitiveType::BatchedModel) { + shader->set_uniform("emission_factor", 0.25f); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const int position_id = shader->get_attrib_location("v_position"); + const int normal_id = shader->get_attrib_location("v_normal"); + render_as_batched_model(buffer, *shader, position_id, normal_id); +#else + render_as_batched_model(buffer, *shader); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + shader->set_uniform("emission_factor", 0.0f); + } + else { +#if ENABLE_GL_SHADERS_ATTRIBUTES + const int position_id = shader->get_attrib_location("v_position"); + const int normal_id = shader->get_attrib_location("v_normal"); +#else + if (buffer.render_primitive_type == TBuffer::ERenderPrimitiveType::Line) + shader_init_as_lines(*shader); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + const int uniform_color = shader->get_uniform_location("uniform_color"); + + auto it_path = buffer.render_paths.begin(); + for (unsigned int ibuffer_id = 0; ibuffer_id < static_cast(buffer.indices.size()); ++ibuffer_id) { + const IBuffer& i_buffer = buffer.indices[ibuffer_id]; + // Skip all paths with ibuffer_id < ibuffer_id. + for (; it_path != buffer.render_paths.end() && it_path->ibuffer_id < ibuffer_id; ++it_path); + if (it_path == buffer.render_paths.end() || it_path->ibuffer_id > ibuffer_id) + // Not found. This shall not happen. + continue; + + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, i_buffer.vbo)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (position_id != -1) { + glsafe(::glVertexAttribPointer(position_id, buffer.vertices.position_size_floats(), GL_FLOAT, GL_FALSE, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.position_offset_bytes())); + glsafe(::glEnableVertexAttribArray(position_id)); + } +#else + glsafe(::glVertexPointer(buffer.vertices.position_size_floats(), GL_FLOAT, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.position_offset_bytes())); + glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + const bool has_normals = buffer.vertices.normal_size_floats() > 0; + if (has_normals) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (normal_id != -1) { + glsafe(::glVertexAttribPointer(normal_id, buffer.vertices.normal_size_floats(), GL_FLOAT, GL_FALSE, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.normal_offset_bytes())); + glsafe(::glEnableVertexAttribArray(normal_id)); + } +#else + glsafe(::glNormalPointer(GL_FLOAT, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.normal_offset_bytes())); + glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + } + + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, i_buffer.ibo)); + + // Render all elements with it_path->ibuffer_id == ibuffer_id, possible with varying colors. + switch (buffer.render_primitive_type) + { + case TBuffer::ERenderPrimitiveType::Line: { + glsafe(::glLineWidth(static_cast(line_width(zoom)))); + render_as_lines(it_path, buffer.render_paths.end(), *shader, uniform_color); + break; + } + case TBuffer::ERenderPrimitiveType::Triangle: { + render_as_triangles(it_path, buffer.render_paths.end(), *shader, uniform_color); + break; + } + default: { break; } + } + + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (normal_id != -1) + glsafe(::glDisableVertexAttribArray(normal_id)); + if (position_id != -1) + glsafe(::glDisableVertexAttribArray(position_id)); +#else + if (has_normals) + glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); + + glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + } + } + + shader->stop_using(); } #if ENABLE_GCODE_VIEWER_STATISTICS - auto render_sequential_range_cap = [this] + auto render_sequential_range_cap = [this, &camera] #else - auto render_sequential_range_cap = [] + auto render_sequential_range_cap = [&camera] #endif // ENABLE_GCODE_VIEWER_STATISTICS (const SequentialRangeCap& cap) { - GLShaderProgram* shader = wxGetApp().get_shader(cap.buffer->shader.c_str()); - if (shader != nullptr) { - shader->start_using(); + const TBuffer* buffer = cap.buffer; + GLShaderProgram* shader = wxGetApp().get_shader(buffer->shader.c_str()); + if (shader == nullptr) + return; - glsafe(::glBindBuffer(GL_ARRAY_BUFFER, cap.vbo)); - glsafe(::glVertexPointer(cap.buffer->vertices.position_size_floats(), GL_FLOAT, cap.buffer->vertices.vertex_size_bytes(), (const void*)cap.buffer->vertices.position_offset_bytes())); - glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); - bool has_normals = cap.buffer->vertices.normal_size_floats() > 0; - if (has_normals) { - glsafe(::glNormalPointer(GL_FLOAT, cap.buffer->vertices.vertex_size_bytes(), (const void*)cap.buffer->vertices.normal_offset_bytes())); - glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); + shader->start_using(); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d& view_matrix = camera.get_view_matrix(); + shader->set_uniform("view_model_matrix", view_matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + shader->set_uniform("normal_matrix", (Matrix3d)view_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); + + const int position_id = shader->get_attrib_location("v_position"); + const int normal_id = shader->get_attrib_location("v_normal"); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, cap.vbo)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (position_id != -1) { + glsafe(::glVertexAttribPointer(position_id, buffer->vertices.position_size_floats(), GL_FLOAT, GL_FALSE, buffer->vertices.vertex_size_bytes(), (const void*)buffer->vertices.position_offset_bytes())); + glsafe(::glEnableVertexAttribArray(position_id)); + } +#else + glsafe(::glVertexPointer(buffer->vertices.position_size_floats(), GL_FLOAT, buffer->vertices.vertex_size_bytes(), (const void*)buffer->vertices.position_offset_bytes())); + glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + const bool has_normals = buffer->vertices.normal_size_floats() > 0; + if (has_normals) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (normal_id != -1) { + glsafe(::glVertexAttribPointer(normal_id, buffer->vertices.normal_size_floats(), GL_FLOAT, GL_FALSE, buffer->vertices.vertex_size_bytes(), (const void*)buffer->vertices.normal_offset_bytes())); + glsafe(::glEnableVertexAttribArray(normal_id)); } +#else + glsafe(::glNormalPointer(GL_FLOAT, buffer->vertices.vertex_size_bytes(), (const void*)buffer->vertices.normal_offset_bytes())); + glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + } - shader->set_uniform("uniform_color", cap.color); + shader->set_uniform("uniform_color", cap.color); - glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cap.ibo)); - glsafe(::glDrawElements(GL_TRIANGLES, (GLsizei)cap.indices_count(), GL_UNSIGNED_SHORT, nullptr)); - glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cap.ibo)); + glsafe(::glDrawElements(GL_TRIANGLES, (GLsizei)cap.indices_count(), GL_UNSIGNED_SHORT, nullptr)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); #if ENABLE_GCODE_VIEWER_STATISTICS - ++m_statistics.gl_triangles_calls_count; + ++m_statistics.gl_triangles_calls_count; #endif // ENABLE_GCODE_VIEWER_STATISTICS - if (has_normals) - glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (normal_id != -1) + glsafe(::glDisableVertexAttribArray(normal_id)); + if (position_id != -1) + glsafe(::glDisableVertexAttribArray(position_id)); +#else + if (has_normals) + glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); - glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); - glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES - shader->stop_using(); - } + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + + shader->stop_using(); }; for (unsigned int i = 0; i < 2; ++i) { @@ -3042,6 +3308,7 @@ void GCodeViewer::render_shells() if (shader == nullptr) return; +#if !ENABLE_LEGACY_OPENGL_REMOVAL // when the background processing is enabled, it may happen that the shells data have been loaded // before opengl has been initialized for the preview canvas. // when this happens, the volumes' data have not been sent to gpu yet. @@ -3049,11 +3316,17 @@ void GCodeViewer::render_shells() if (!v->indexed_vertex_array.has_VBOs()) v->finalize_geometry(true); } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL // glsafe(::glDepthMask(GL_FALSE)); shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + m_shells.volumes.render(GLVolumeCollection::ERenderType::Transparent, true, camera.get_view_matrix(), camera.get_projection_matrix()); +#else m_shells.volumes.render(GLVolumeCollection::ERenderType::Transparent, true, wxGetApp().plater()->get_camera().get_view_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES shader->stop_using(); // glsafe(::glDepthMask(GL_TRUE)); @@ -4074,15 +4347,6 @@ void GCodeViewer::render_legend(float& legend_height) }; #if ENABLE_LEGEND_TOOLBAR_ICONS -// auto circle_icon = [](ImGuiWindow& window, const ImVec2& pos, float size, const Color& color) { -// const float margin = 3.0f; -// const ImVec2 center(0.5f * (pos.x + pos.x + size), 0.5f * (pos.y + pos.y + size)); -// window.DrawList->AddCircleFilled(center, 0.5f * (size - 2.0f * margin), ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 16); -// }; -// auto line_icon = [](ImGuiWindow& window, const ImVec2& pos, float size, const Color& color) { -// const float margin = 3.0f; -// window.DrawList->AddLine({ pos.x + margin, pos.y + size - margin }, { pos.x + size - margin, pos.y + margin }, ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 3.0f); -// }; auto image_icon = [&imgui](ImGuiWindow& window, const ImVec2& pos, float size, const wchar_t& icon_id) { ImGuiIO& io = ImGui::GetIO(); const ImTextureID tex_id = io.Fonts->TexID; @@ -4091,17 +4355,17 @@ void GCodeViewer::render_legend(float& legend_height) const ImFontAtlas::CustomRect* const rect = imgui.GetTextureCustomRect(icon_id); const ImVec2 uv0 = { static_cast(rect->X) / tex_w, static_cast(rect->Y) / tex_h }; const ImVec2 uv1 = { static_cast(rect->X + rect->Width) / tex_w, static_cast(rect->Y + rect->Height) / tex_h }; - window.DrawList->AddImage(tex_id, pos, { pos.x + size, pos.y + size }, uv0, uv1, ImGui::GetColorU32({ 1.0f, 1.0f, 1.0f, 1.0f })); + window.DrawList->AddImage(tex_id, pos, { pos.x + size, pos.y + size }, uv0, uv1, ImGuiWrapper::to_ImU32({ 1.0f, 1.0f, 1.0f, 1.0f })); }; #else - auto circle_icon = [](ImGuiWindow& window, const ImVec2& pos, float size, const Color& color) { - const float margin = 3.0f; + auto circle_icon = [](ImGuiWindow& window, const ImVec2& pos, float size, const ColorRGBA& color) { + const float margin = 3.0f; const ImVec2 center(0.5f * (pos.x + pos.x + size), 0.5f * (pos.y + pos.y + size)); - window.DrawList->AddCircleFilled(center, 0.5f * (size - 2.0f * margin), ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 16); + window.DrawList->AddCircleFilled(center, 0.5f * (size - 2.0f * margin), ImGuiWrapper::to_ImU32(color), 16); }; - auto line_icon = [](ImGuiWindow& window, const ImVec2& pos, float size, const Color& color) { + auto line_icon = [](ImGuiWindow& window, const ImVec2& pos, float size, const ColorRGBA& color) { const float margin = 3.0f; - window.DrawList->AddLine({ pos.x + margin, pos.y + size - margin }, { pos.x + size - margin, pos.y + margin }, ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 3.0f); + window.DrawList->AddLine({ pos.x + margin, pos.y + size - margin }, { pos.x + size - margin, pos.y + margin }, ImGuiWrapper::to_ImU32(color), 3.0f); }; #endif // ENABLE_LEGEND_TOOLBAR_ICONS @@ -4190,12 +4454,41 @@ void GCodeViewer::render_legend(float& legend_height) #endif // ENABLE_LEGEND_TOOLBAR_ICONS }); ImGui::SameLine(); +#if ENABLE_SHOW_TOOLPATHS_COG +#if ENABLE_LEGEND_TOOLBAR_ICONS + toggle_button(Preview::OptionType::CenterOfGravity, _u8L("Center of gravity"), [image_icon](ImGuiWindow& window, const ImVec2& pos, float size) { + image_icon(window, pos, size, ImGui::LegendCOG); + }); +#else + toggle_button(Preview::OptionType::CenterOfGravity, _u8L("Center of gravity"), [](ImGuiWindow& window, const ImVec2& pos, float size) { + const ImU32 black = ImGuiWrapper::to_ImU32({ 0.0f, 0.0f, 0.0f, 1.0f }); + const ImU32 white = ImGuiWrapper::to_ImU32({ 1.0f, 1.0f, 1.0f, 1.0f }); + const float margin = 3.0f; + const ImVec2 center(0.5f * (pos.x + pos.x + size), 0.5f * (pos.y + pos.y + size)); + const float radius = 0.5f * (size - 2.0f * margin); + window.DrawList->PathArcToFast(center, radius, 0, 3); + window.DrawList->PathLineTo(center); + window.DrawList->PathFillConvex(black); + window.DrawList->PathArcToFast(center, radius, 3, 6); + window.DrawList->PathLineTo(center); + window.DrawList->PathFillConvex(white); + window.DrawList->PathArcToFast(center, radius, 6, 9); + window.DrawList->PathLineTo(center); + window.DrawList->PathFillConvex(black); + window.DrawList->PathArcToFast(center, radius, 9, 12); + window.DrawList->PathLineTo(center); + window.DrawList->PathFillConvex(white); + window.DrawList->AddCircle(center, radius, black, 16); + }); +#endif // ENABLE_LEGEND_TOOLBAR_ICONS + ImGui::SameLine(); +#endif // ENABLE_SHOW_TOOLPATHS_COG #if ENABLE_LEGEND_TOOLBAR_ICONS toggle_button(Preview::OptionType::Shells, _u8L("Shells"), [image_icon](ImGuiWindow& window, const ImVec2& pos, float size) { image_icon(window, pos, size, ImGui::LegendShells); #else toggle_button(Preview::OptionType::Shells, _u8L("Shells"), [](ImGuiWindow& window, const ImVec2& pos, float size) { - const ImU32 color = ImGui::GetColorU32({ 1.0f, 1.0f, 1.0f, 1.0f }); + const ImU32 color = ImGuiWrapper::to_ImU32({ 1.0f, 1.0f, 1.0f, 1.0f }); const float margin = 3.0f; const float proj = 0.25f * size; window.DrawList->AddRect({ pos.x + margin, pos.y + size - margin }, { pos.x + size - margin - proj, pos.y + margin + proj }, color); @@ -4212,11 +4505,11 @@ void GCodeViewer::render_legend(float& legend_height) image_icon(window, pos, size, ImGui::LegendToolMarker); #else toggle_button(Preview::OptionType::ToolMarker, _u8L("Tool marker"), [](ImGuiWindow& window, const ImVec2& pos, float size) { - const ImU32 color = ImGui::GetColorU32({ 1.0f, 1.0f, 1.0f, 0.8f }); + const ImU32 color = ImGuiWrapper::to_ImU32({ 1.0f, 1.0f, 1.0f, 0.8f }); const float margin = 3.0f; const ImVec2 p1(0.5f * (pos.x + pos.x + size), pos.y + size - margin); - const ImVec2 p2 = ImVec2(p1.x + 0.25f * size, p1.y - 0.25f * size); - const ImVec2 p3 = ImVec2(p1.x - 0.25f * size, p1.y - 0.25f * size); + const ImVec2 p2(p1.x + 0.25f * size, p1.y - 0.25f * size); + const ImVec2 p3(p1.x - 0.25f * size, p1.y - 0.25f * size); window.DrawList->AddTriangleFilled(p1, p2, p3, color); const float mid_x = 0.5f * (pos.x + pos.x + size); window.DrawList->AddRectFilled({ mid_x - 0.09375f * size, p1.y - 0.25f * size }, { mid_x + 0.09375f * size, pos.y + margin }, color); @@ -4244,14 +4537,14 @@ void GCodeViewer::render_statistics() ImGuiWrapper& imgui = *wxGetApp().imgui(); - auto add_time = [this, &imgui](const std::string& label, int64_t time) { + auto add_time = [&imgui](const std::string& label, int64_t time) { imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, label); ImGui::SameLine(offset); imgui.text(std::to_string(time) + " ms (" + get_time_dhms(static_cast(time) * 0.001f) + ")"); }; - auto add_memory = [this, &imgui](const std::string& label, int64_t memory) { - auto format_string = [memory](const std::string& units, float value) { + auto add_memory = [&imgui](const std::string& label, int64_t memory) { + auto format_string = [memory](const std::string& units, float value) { return std::to_string(memory) + " bytes (" + Slic3r::float_to_string_decimal_point(float(memory) * value, 3) + " " + units + ")"; @@ -4273,7 +4566,7 @@ void GCodeViewer::render_statistics() imgui.text(format_string("GB", inv_gb)); }; - auto add_counter = [this, &imgui](const std::string& label, int64_t counter) { + auto add_counter = [&imgui](const std::string& label, int64_t counter) { imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, label); ImGui::SameLine(offset); imgui.text(std::to_string(counter)); @@ -4297,7 +4590,6 @@ void GCodeViewer::render_statistics() } if (ImGui::CollapsingHeader("OpenGL calls")) { - add_counter(std::string("Multi GL_POINTS:"), m_statistics.gl_multi_points_calls_count); add_counter(std::string("Multi GL_LINES:"), m_statistics.gl_multi_lines_calls_count); add_counter(std::string("Multi GL_TRIANGLES:"), m_statistics.gl_multi_triangles_calls_count); add_counter(std::string("GL_TRIANGLES:"), m_statistics.gl_triangles_calls_count); diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index ecebb2641..e2ee6dcd0 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -212,7 +212,11 @@ class GCodeViewer unsigned char cp_color_id{ 0 }; std::vector sub_paths; +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + bool matches(const GCodeProcessorResult::MoveVertex& move, bool account_for_volumetric_rate) const; +#else bool matches(const GCodeProcessorResult::MoveVertex& move) const; +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC size_t vertices_count() const { return sub_paths.empty() ? 0 : sub_paths.back().last.s_id - sub_paths.front().first.s_id + 1; } @@ -280,7 +284,6 @@ class GCodeViewer { enum class ERenderPrimitiveType : unsigned char { - Point, Line, Triangle, InstancedModel, @@ -321,7 +324,6 @@ class GCodeViewer unsigned int max_vertices_per_segment() const { switch (render_primitive_type) { - case ERenderPrimitiveType::Point: { return 1; } case ERenderPrimitiveType::Line: { return 2; } case ERenderPrimitiveType::Triangle: { return 8; } default: { return 0; } @@ -333,7 +335,6 @@ class GCodeViewer unsigned int indices_per_segment() const { switch (render_primitive_type) { - case ERenderPrimitiveType::Point: { return 1; } case ERenderPrimitiveType::Line: { return 2; } case ERenderPrimitiveType::Triangle: { return 30; } // 3 indices x 10 triangles default: { return 0; } @@ -343,7 +344,6 @@ class GCodeViewer unsigned int max_indices_per_segment() const { switch (render_primitive_type) { - case ERenderPrimitiveType::Point: { return 1; } case ERenderPrimitiveType::Line: { return 2; } case ERenderPrimitiveType::Triangle: { return 36; } // 3 indices x 12 triangles default: { return 0; } @@ -354,18 +354,17 @@ class GCodeViewer bool has_data() const { switch (render_primitive_type) { - case ERenderPrimitiveType::Point: case ERenderPrimitiveType::Line: case ERenderPrimitiveType::Triangle: { return !vertices.vbos.empty() && vertices.vbos.front() != 0 && !indices.empty() && indices.front().ibo != 0; } case ERenderPrimitiveType::InstancedModel: { return model.model.is_initialized() && !model.instances.buffer.empty(); } case ERenderPrimitiveType::BatchedModel: { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL return !model.data.vertices.empty() && !model.data.indices.empty() && #else return model.data.vertices_count() > 0 && model.data.indices_count() && -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL !vertices.vbos.empty() && vertices.vbos.front() != 0 && !indices.empty() && indices.front().ibo != 0; } default: { return false; } @@ -380,6 +379,52 @@ class GCodeViewer bool visible{ false }; }; +#if ENABLE_SHOW_TOOLPATHS_COG + // helper to render center of gravity + class COG + { + GLModel m_model; + bool m_visible{ false }; + // whether or not to render the model with fixed screen size + bool m_fixed_size{ true }; + double m_total_mass{ 0.0 }; + Vec3d m_position{ Vec3d::Zero() }; + + public: + void render(); + + void reset() { + m_position = Vec3d::Zero(); + m_total_mass = 0.0; + } + + bool is_visible() const { return m_visible; } + void set_visible(bool visible) { m_visible = visible; } + + void add_segment(const Vec3d& v1, const Vec3d& v2, double mass) { + assert(mass > 0.0); + m_position += mass * 0.5 * (v1 + v2); + m_total_mass += mass; + } + + Vec3d cog() const { return (m_total_mass > 0.0) ? (Vec3d)(m_position / m_total_mass) : Vec3d::Zero(); } + + private: + void init() { + if (m_model.is_initialized()) + return; + + const float radius = m_fixed_size ? 10.0f : 1.0f; + +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_model.init_from(smooth_sphere(32, radius)); +#else + m_model.init_from(its_make_sphere(radius, PI / 32.0)); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + } + }; +#endif // ENABLE_SHOW_TOOLPATHS_COG + // helper to render extrusion paths struct Extrusions { @@ -535,7 +580,6 @@ class GCodeViewer int64_t refresh_time{ 0 }; int64_t refresh_paths_time{ 0 }; // opengl calls - int64_t gl_multi_points_calls_count{ 0 }; int64_t gl_multi_lines_calls_count{ 0 }; int64_t gl_multi_triangles_calls_count{ 0 }; int64_t gl_triangles_calls_count{ 0 }; @@ -578,7 +622,6 @@ class GCodeViewer } void reset_opengl() { - gl_multi_points_calls_count = 0; gl_multi_lines_calls_count = 0; gl_multi_triangles_calls_count = 0; gl_triangles_calls_count = 0; @@ -716,6 +759,9 @@ public: private: bool m_gl_data_initialized{ false }; unsigned int m_last_result_id{ 0 }; +#if ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC + EViewType m_last_view_type{ EViewType::Count }; +#endif // ENABLE_VOLUMETRIC_RATE_TOOLPATHS_RECALC size_t m_moves_count{ 0 }; std::vector m_buffers{ static_cast(EMoveType::Extrude) }; // bounding box of toolpaths @@ -734,6 +780,9 @@ private: Extrusions m_extrusions; SequentialView m_sequential_view; Shells m_shells; +#if ENABLE_SHOW_TOOLPATHS_COG + COG m_cog; +#endif // ENABLE_SHOW_TOOLPATHS_COG EViewType m_view_type{ EViewType::FeatureType }; bool m_legend_enabled{ true }; #if ENABLE_PREVIEW_LAYOUT @@ -767,7 +816,11 @@ public: void init(); // extract rendering data from the given parameters +#if ENABLE_LEGACY_OPENGL_REMOVAL + void load(const GCodeProcessorResult& gcode_result, const Print& print); +#else void load(const GCodeProcessorResult& gcode_result, const Print& print, bool initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // recalculate ranges in dependence of what is visible and sets tool/print colors void refresh(const GCodeProcessorResult& gcode_result, const std::vector& str_tool_colors); #if ENABLE_PREVIEW_LAYOUT @@ -779,6 +832,9 @@ public: void reset(); void render(); +#if ENABLE_SHOW_TOOLPATHS_COG + void render_cog() { m_cog.render(); } +#endif // ENABLE_SHOW_TOOLPATHS_COG bool has_data() const { return !m_roles.empty(); } bool can_export_toolpaths() const; @@ -824,7 +880,11 @@ public: private: void load_toolpaths(const GCodeProcessorResult& gcode_result); +#if ENABLE_LEGACY_OPENGL_REMOVAL + void load_shells(const Print& print); +#else void load_shells(const Print& print, bool initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL #if !ENABLE_PREVIEW_LAYOUT void refresh_render_paths(bool keep_sequential_current_first, bool keep_sequential_current_last) const; #endif // !ENABLE_PREVIEW_LAYOUT diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 84cc2e555..3cb1fbb07 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -14,19 +14,16 @@ #include "libslic3r/Technologies.hpp" #include "libslic3r/Tesselate.hpp" #include "libslic3r/PresetBundle.hpp" -#include "slic3r/GUI/3DBed.hpp" -#include "slic3r/GUI/3DScene.hpp" -#include "slic3r/GUI/BackgroundSlicingProcess.hpp" -#include "slic3r/GUI/GLShader.hpp" -#include "slic3r/GUI/GUI.hpp" -#include "slic3r/GUI/Tab.hpp" -#include "slic3r/GUI/GUI_Preview.hpp" -#include "slic3r/GUI/OpenGLManager.hpp" -#include "slic3r/GUI/Plater.hpp" -#include "slic3r/GUI/MainFrame.hpp" -#include "slic3r/Utils/UndoRedo.hpp" -#include "slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp" - +#include "3DBed.hpp" +#include "3DScene.hpp" +#include "BackgroundSlicingProcess.hpp" +#include "GLShader.hpp" +#include "GUI.hpp" +#include "Tab.hpp" +#include "GUI_Preview.hpp" +#include "OpenGLManager.hpp" +#include "Plater.hpp" +#include "MainFrame.hpp" #include "GUI_App.hpp" #include "GUI_ObjectList.hpp" #include "GUI_ObjectManipulation.hpp" @@ -35,6 +32,9 @@ #include "NotificationManager.hpp" #include "format.hpp" +#include "slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp" +#include "slic3r/Utils/UndoRedo.hpp" + #if ENABLE_RETINA_GL #include "slic3r/Utils/RetinaHelper.hpp" #endif @@ -72,7 +72,7 @@ static constexpr const float TRACKBALLSIZE = 0.8f; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL static const Slic3r::ColorRGBA DEFAULT_BG_DARK_COLOR = { 0.478f, 0.478f, 0.478f, 1.0f }; static const Slic3r::ColorRGBA DEFAULT_BG_LIGHT_COLOR = { 0.753f, 0.753f, 0.753f, 1.0f }; static const Slic3r::ColorRGBA ERROR_BG_DARK_COLOR = { 0.478f, 0.192f, 0.039f, 1.0f }; @@ -82,14 +82,16 @@ static const Slic3r::ColorRGB DEFAULT_BG_DARK_COLOR = { 0.478f, 0.478f, 0.478f static const Slic3r::ColorRGB DEFAULT_BG_LIGHT_COLOR = { 0.753f, 0.753f, 0.753f }; static const Slic3r::ColorRGB ERROR_BG_DARK_COLOR = { 0.478f, 0.192f, 0.039f }; static const Slic3r::ColorRGB ERROR_BG_LIGHT_COLOR = { 0.753f, 0.192f, 0.039f }; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Number of floats static constexpr const size_t MAX_VERTEX_BUFFER_SIZE = 131072 * 6; // 3.15MB // Reserve size in number of floats. +#if !ENABLE_LEGACY_OPENGL_REMOVAL static constexpr const size_t VERTEX_BUFFER_RESERVE_SIZE = 131072 * 2; // 1.05MB // Reserve size in number of floats, maximum sum of all preallocated buffers. //static constexpr const size_t VERTEX_BUFFER_RESERVE_SIZE_SUM_MAX = 1024 * 1024 * 128 / 4; // 128MB +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL namespace Slic3r { namespace GUI { @@ -261,24 +263,29 @@ void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) GLCanvas3D::LayersEditing::s_overlay_window_width = ImGui::GetWindowSize().x /*+ (float)m_layers_texture.width/4*/; imgui.end(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_active_object_annotations(canvas); + render_profile(canvas); +#else const Rect& bar_rect = get_bar_rect_viewport(canvas); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_profile.dirty = m_profile.old_bar_rect != bar_rect; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL render_active_object_annotations(canvas, bar_rect); render_profile(bar_rect); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_profile.old_bar_rect = bar_rect; m_profile.dirty = false; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } float GLCanvas3D::LayersEditing::get_cursor_z_relative(const GLCanvas3D& canvas) { const Vec2d mouse_pos = canvas.get_local_mouse_position(); const Rect& rect = get_bar_rect_screen(canvas); - float x = (float)mouse_pos(0); - float y = (float)mouse_pos(1); + float x = (float)mouse_pos.x(); + float y = (float)mouse_pos.y(); float t = rect.get_top(); float b = rect.get_bottom(); @@ -304,6 +311,7 @@ Rect GLCanvas3D::LayersEditing::get_bar_rect_screen(const GLCanvas3D& canvas) return { w - thickness_bar_width(canvas), 0.0f, w, h }; } +#if !ENABLE_GL_SHADERS_ATTRIBUTES Rect GLCanvas3D::LayersEditing::get_bar_rect_viewport(const GLCanvas3D& canvas) { const Size& cnv_size = canvas.get_canvas_size(); @@ -312,6 +320,7 @@ Rect GLCanvas3D::LayersEditing::get_bar_rect_viewport(const GLCanvas3D& canvas) float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); return { (half_w - thickness_bar_width(canvas)) * inv_zoom, half_h * inv_zoom, half_w * inv_zoom, -half_h * inv_zoom }; } +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES bool GLCanvas3D::LayersEditing::is_initialized() const { @@ -344,8 +353,21 @@ std::string GLCanvas3D::LayersEditing::get_tooltip(const GLCanvas3D& canvas) con return ret; } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLCanvas3D::LayersEditing::render_active_object_annotations(const GLCanvas3D& canvas) +#else void GLCanvas3D::LayersEditing::render_active_object_annotations(const GLCanvas3D& canvas, const Rect& bar_rect) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Size cnv_size = canvas.get_canvas_size(); + const float cnv_width = (float)cnv_size.get_width(); + const float cnv_height = (float)cnv_size.get_height(); + if (cnv_width == 0.0f || cnv_height == 0.0f) + return; + + const float cnv_inv_width = 1.0f / cnv_width; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES GLShaderProgram* shader = wxGetApp().get_shader("variable_layer_height"); if (shader == nullptr) return; @@ -357,33 +379,50 @@ void GLCanvas3D::LayersEditing::render_active_object_annotations(const GLCanvas3 shader->set_uniform("z_cursor", m_object_max_z * this->get_cursor_z_relative(canvas)); shader->set_uniform("z_cursor_band_width", band_width); shader->set_uniform("object_max_z", m_object_max_z); +#if ENABLE_GL_SHADERS_ATTRIBUTES + shader->set_uniform("view_model_matrix", Transform3d::Identity()); + shader->set_uniform("projection_matrix", Transform3d::Identity()); + shader->set_uniform("normal_matrix", (Matrix3d)Eigen::Matrix3d::Identity()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1)); glsafe(::glBindTexture(GL_TEXTURE_2D, m_z_texture_id)); // Render the color bar -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (!m_profile.background.is_initialized() || m_profile.old_canvas_width != cnv_width) { + m_profile.old_canvas_width = cnv_width; +#else if (!m_profile.background.is_initialized() || m_profile.dirty) { +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_profile.background.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P2T2, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(4 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(6 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P2T2 }; + init_data.reserve_vertices(4); + init_data.reserve_indices(6); // vertices +#if ENABLE_GL_SHADERS_ATTRIBUTES + const float l = 1.0f - 2.0f * THICKNESS_BAR_WIDTH * cnv_inv_width; + const float r = 1.0f; + const float t = 1.0f; + const float b = -1.0f; +#else const float l = bar_rect.get_left(); const float r = bar_rect.get_right(); const float t = bar_rect.get_top(); const float b = bar_rect.get_bottom(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES init_data.add_vertex(Vec2f(l, b), Vec2f(0.0f, 0.0f)); init_data.add_vertex(Vec2f(r, b), Vec2f(1.0f, 0.0f)); init_data.add_vertex(Vec2f(r, t), Vec2f(1.0f, 1.0f)); init_data.add_vertex(Vec2f(l, t), Vec2f(0.0f, 1.0f)); // indices - init_data.add_ushort_triangle(0, 1, 2); - init_data.add_ushort_triangle(2, 3, 0); + init_data.add_triangle(0, 1, 2); + init_data.add_triangle(2, 3, 0); m_profile.background.init_from(std::move(init_data)); } @@ -402,61 +441,99 @@ void GLCanvas3D::LayersEditing::render_active_object_annotations(const GLCanvas3 ::glTexCoord2f(1.0f, 1.0f); ::glVertex2f(r, t); ::glTexCoord2f(0.0f, 1.0f); ::glVertex2f(l, t); glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); shader->stop_using(); } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLCanvas3D::LayersEditing::render_profile(const GLCanvas3D& canvas) +#else void GLCanvas3D::LayersEditing::render_profile(const Rect& bar_rect) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { //FIXME show some kind of legend. if (!m_slicing_parameters) return; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Size cnv_size = canvas.get_canvas_size(); + const float cnv_width = (float)cnv_size.get_width(); + const float cnv_height = (float)cnv_size.get_height(); + if (cnv_width == 0.0f || cnv_height == 0.0f) + return; + + // Make the vertical bar a bit wider so the layer height curve does not touch the edge of the bar region. + const float scale_x = THICKNESS_BAR_WIDTH / float(1.12 * m_slicing_parameters->max_layer_height); + const float scale_y = cnv_height / m_object_max_z; + + const float cnv_inv_width = 1.0f / cnv_width; + const float cnv_inv_height = 1.0f / cnv_height; +#else // Make the vertical bar a bit wider so the layer height curve does not touch the edge of the bar region. const float scale_x = bar_rect.get_width() / float(1.12 * m_slicing_parameters->max_layer_height); const float scale_y = bar_rect.get_height() / m_object_max_z; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // Baseline +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (!m_profile.baseline.is_initialized() || m_profile.old_layer_height_profile != m_layer_height_profile) { +#else if (!m_profile.baseline.is_initialized() || m_profile.dirty) { +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_profile.baseline.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P2, GLModel::Geometry::EIndexType::USHORT }; + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P2 }; init_data.color = ColorRGBA::BLACK(); - init_data.vertices.reserve(2 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(2 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.reserve_vertices(2); + init_data.reserve_indices(2); // vertices +#if ENABLE_GL_SHADERS_ATTRIBUTES + const float axis_x = 2.0f * ((cnv_width - THICKNESS_BAR_WIDTH + float(m_slicing_parameters->layer_height) * scale_x) * cnv_inv_width - 0.5f); + init_data.add_vertex(Vec2f(axis_x, -1.0f)); + init_data.add_vertex(Vec2f(axis_x, 1.0f)); +#else const float x = bar_rect.get_left() + float(m_slicing_parameters->layer_height) * scale_x; init_data.add_vertex(Vec2f(x, bar_rect.get_bottom())); init_data.add_vertex(Vec2f(x, bar_rect.get_top())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // indices - init_data.add_ushort_line(0, 1); + init_data.add_line(0, 1); m_profile.baseline.init_from(std::move(init_data)); } +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (!m_profile.profile.is_initialized() || m_profile.old_layer_height_profile != m_layer_height_profile) { +#else if (!m_profile.profile.is_initialized() || m_profile.dirty || m_profile.old_layer_height_profile != m_layer_height_profile) { +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_profile.old_layer_height_profile = m_layer_height_profile; m_profile.profile.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::LineStrip, GLModel::Geometry::EVertexLayout::P2, GLModel::Geometry::EIndexType::UINT }; + init_data.format = { GLModel::Geometry::EPrimitiveType::LineStrip, GLModel::Geometry::EVertexLayout::P2 }; init_data.color = ColorRGBA::BLUE(); - init_data.vertices.reserve(m_layer_height_profile.size() * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(m_layer_height_profile.size() * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.reserve_vertices(m_layer_height_profile.size() / 2); + init_data.reserve_indices(m_layer_height_profile.size() / 2); // vertices + indices for (unsigned int i = 0; i < (unsigned int)m_layer_height_profile.size(); i += 2) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + init_data.add_vertex(Vec2f(2.0f * ((cnv_width - THICKNESS_BAR_WIDTH + float(m_layer_height_profile[i + 1]) * scale_x) * cnv_inv_width - 0.5f), + 2.0f * (float(m_layer_height_profile[i]) * scale_y * cnv_inv_height - 0.5))); +#else init_data.add_vertex(Vec2f(bar_rect.get_left() + float(m_layer_height_profile[i + 1]) * scale_x, bar_rect.get_bottom() + float(m_layer_height_profile[i]) * scale_y)); - init_data.add_uint_index(i / 2); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + init_data.add_index(i / 2); } m_profile.profile.init_from(std::move(init_data)); @@ -465,6 +542,10 @@ void GLCanvas3D::LayersEditing::render_profile(const Rect& bar_rect) GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + shader->set_uniform("view_model_matrix", Transform3d::Identity()); + shader->set_uniform("projection_matrix", Transform3d::Identity()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_profile.baseline.render(); m_profile.profile.render(); shader->stop_using(); @@ -485,24 +566,24 @@ void GLCanvas3D::LayersEditing::render_profile(const Rect& bar_rect) for (unsigned int i = 0; i < m_layer_height_profile.size(); i += 2) ::glVertex2f(bar_rect.get_left() + (float)m_layer_height_profile[i + 1] * scale_x, bar_rect.get_bottom() + (float)m_layer_height_profile[i] * scale_y); glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } void GLCanvas3D::LayersEditing::render_volumes(const GLCanvas3D& canvas, const GLVolumeCollection& volumes) { assert(this->is_allowed()); assert(this->last_object_id != -1); + + GLShaderProgram* current_shader = wxGetApp().get_current_shader(); + ScopeGuard guard([current_shader]() { if (current_shader != nullptr) current_shader->start_using(); }); + if (current_shader != nullptr) + current_shader->stop_using(); + GLShaderProgram* shader = wxGetApp().get_shader("variable_layer_height"); if (shader == nullptr) return; - GLShaderProgram* current_shader = wxGetApp().get_current_shader(); - if (shader->get_id() != current_shader->get_id()) - // The layer editing shader is not yet active. Activate it. - shader->start_using(); - else - // The layer editing shader was already active. - current_shader = nullptr; + shader->start_using(); generate_layer_height_texture(); @@ -512,30 +593,39 @@ void GLCanvas3D::LayersEditing::render_volumes(const GLCanvas3D& canvas, const G shader->set_uniform("z_cursor", float(m_object_max_z) * float(this->get_cursor_z_relative(canvas))); shader->set_uniform("z_cursor_band_width", float(this->band_width)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + // Initialize the layer height texture mapping. - GLsizei w = (GLsizei)m_layers_texture.width; - GLsizei h = (GLsizei)m_layers_texture.height; - GLsizei half_w = w / 2; - GLsizei half_h = h / 2; + const GLsizei w = (GLsizei)m_layers_texture.width; + const GLsizei h = (GLsizei)m_layers_texture.height; + const GLsizei half_w = w / 2; + const GLsizei half_h = h / 2; glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1)); glsafe(::glBindTexture(GL_TEXTURE_2D, m_z_texture_id)); glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0)); glsafe(::glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, half_w, half_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0)); glsafe(::glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, m_layers_texture.data.data())); glsafe(::glTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, half_w, half_h, GL_RGBA, GL_UNSIGNED_BYTE, m_layers_texture.data.data() + m_layers_texture.width * m_layers_texture.height * 4)); - for (const GLVolume* glvolume : volumes.volumes) { + for (GLVolume* glvolume : volumes.volumes) { // Render the object using the layer editing shader and texture. - if (! glvolume->is_active || glvolume->composite_id.object_id != this->last_object_id || glvolume->is_modifier) + if (!glvolume->is_active || glvolume->composite_id.object_id != this->last_object_id || glvolume->is_modifier) continue; shader->set_uniform("volume_world_matrix", glvolume->world_matrix()); - shader->set_uniform("object_max_z", GLfloat(0)); + shader->set_uniform("object_max_z", 0.0f); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d view_model_matrix = camera.get_view_matrix() * glvolume->world_matrix(); + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + glvolume->render(); } // Revert back to the previous shader. glBindTexture(GL_TEXTURE_2D, 0); - if (current_shader != nullptr) - current_shader->start_using(); } void GLCanvas3D::LayersEditing::adjust_layer_height_profile() @@ -879,18 +969,18 @@ void GLCanvas3D::SequentialPrintClearance::set_polygons(const Polygons& polygons if (polygons.empty()) return; -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL size_t triangles_count = 0; for (const Polygon& poly : polygons) { triangles_count += poly.points.size() - 2; } const size_t vertices_count = 3 * triangles_count; -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL if (m_render_fill) { GLModel::Geometry fill_data; -#if ENABLE_GLBEGIN_GLEND_REMOVAL - fill_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::UINT }; +#if ENABLE_LEGACY_OPENGL_REMOVAL + fill_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3 }; fill_data.color = { 0.3333f, 0.0f, 0.0f, 0.5f }; // vertices + indices @@ -898,11 +988,13 @@ void GLCanvas3D::SequentialPrintClearance::set_polygons(const Polygons& polygons unsigned int vertices_counter = 0; for (const ExPolygon& poly : polygons_union) { const std::vector triangulation = triangulate_expolygon_3d(poly); + fill_data.reserve_vertices(fill_data.vertices_count() + triangulation.size()); + fill_data.reserve_indices(fill_data.indices_count() + triangulation.size()); for (const Vec3d& v : triangulation) { fill_data.add_vertex((Vec3f)(v.cast() + 0.0125f * Vec3f::UnitZ())); // add a small positive z to avoid z-fighting ++vertices_counter; if (vertices_counter % 3 == 0) - fill_data.add_uint_triangle(vertices_counter - 3, vertices_counter - 2, vertices_counter - 1); + fill_data.add_triangle(vertices_counter - 3, vertices_counter - 2, vertices_counter - 1); } } @@ -932,10 +1024,10 @@ void GLCanvas3D::SequentialPrintClearance::set_polygons(const Polygons& polygons fill_data.entities.emplace_back(entity); m_fill.init_from(fill_data); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_perimeter.init_from(polygons, 0.025f); // add a small positive z to avoid z-fighting #else GLModel::Geometry perimeter_data; @@ -955,7 +1047,7 @@ void GLCanvas3D::SequentialPrintClearance::set_polygons(const Polygons& polygons } m_perimeter.init_from(perimeter_data); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } void GLCanvas3D::SequentialPrintClearance::render() @@ -963,26 +1055,32 @@ void GLCanvas3D::SequentialPrintClearance::render() const ColorRGBA FILL_COLOR = { 1.0f, 0.0f, 0.0f, 0.5f }; const ColorRGBA NO_FILL_COLOR = { 1.0f, 1.0f, 1.0f, 0.75f }; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader("flat"); #else GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (shader == nullptr) return; shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + glsafe(::glEnable(GL_DEPTH_TEST)); glsafe(::glDisable(GL_CULL_FACE)); glsafe(::glEnable(GL_BLEND)); glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_perimeter.set_color(m_render_fill ? FILL_COLOR : NO_FILL_COLOR); #else m_perimeter.set_color(-1, m_render_fill ? FILL_COLOR : NO_FILL_COLOR); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_perimeter.render(); m_fill.render(); @@ -1101,7 +1199,6 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed) , m_moving(false) , m_tab_down(false) , m_cursor_type(Standard) - , m_color_by("volume") , m_reload_delayed(false) #if ENABLE_RENDER_PICKING_PASS , m_show_picking_texture(false) @@ -1152,6 +1249,7 @@ bool GLCanvas3D::init() glsafe(::glEnable(GL_BLEND)); glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); +#if !ENABLE_LEGACY_OPENGL_REMOVAL // Set antialiasing / multisampling glsafe(::glDisable(GL_LINE_SMOOTH)); glsafe(::glDisable(GL_POLYGON_SMOOTH)); @@ -1181,6 +1279,7 @@ bool GLCanvas3D::init() // A handy trick -- have surface material mirror the color. glsafe(::glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)); glsafe(::glEnable(GL_COLOR_MATERIAL)); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL if (m_multisample_allowed) glsafe(::glEnable(GL_MULTISAMPLE)); @@ -1188,9 +1287,11 @@ bool GLCanvas3D::init() if (m_main_toolbar.is_enabled()) m_layers_editing.init(); +#if !ENABLE_LEGACY_OPENGL_REMOVAL // on linux the gl context is not valid until the canvas is not shown on screen // we defer the geometry finalization of volumes until the first call to render() m_volumes.finalize_geometry(true); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL if (m_gizmos.is_enabled() && !m_gizmos.init()) std::cout << "Unable to initialize gizmos: please, check that all the required textures are available" << std::endl; @@ -1351,11 +1452,6 @@ void GLCanvas3D::bed_shape_changed() m_dirty = true; } -void GLCanvas3D::set_color_by(const std::string& value) -{ - m_color_by = value; -} - void GLCanvas3D::refresh_camera_scene_box() { wxGetApp().plater()->get_camera().set_scene_box(scene_bounding_box()); @@ -1548,6 +1644,10 @@ void GLCanvas3D::render() wxGetApp().plater()->init_environment_texture(); #endif // ENABLE_ENVIRONMENT_MAP +#if ENABLE_GLMODEL_STATISTICS + GLModel::reset_statistics_counters(); +#endif // ENABLE_GLMODEL_STATISTICS + const Size& cnv_size = get_canvas_size(); // Probably due to different order of events on Linux/GTK2, when one switched from 3D scene // to preview, this was called before canvas had its final size. It reported zero width @@ -1562,24 +1662,32 @@ void GLCanvas3D::render() camera.requires_zoom_to_bed = false; } +#if !ENABLE_LEGACY_OPENGL_REMOVAL camera.apply_view_matrix(); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL camera.apply_projection(_max_bounding_box(true, true)); +#if !ENABLE_LEGACY_OPENGL_REMOVAL GLfloat position_cam[4] = { 1.0f, 0.0f, 1.0f, 0.0f }; glsafe(::glLightfv(GL_LIGHT1, GL_POSITION, position_cam)); GLfloat position_top[4] = { -0.5f, -0.5f, 1.0f, 0.0f }; glsafe(::glLightfv(GL_LIGHT0, GL_POSITION, position_top)); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL wxGetApp().imgui()->new_frame(); if (m_picking_enabled) { - if (m_rectangle_selection.is_dragging()) - // picking pass using rectangle selection - _rectangular_selection_picking_pass(); - else if (!m_volumes.empty()) - // regular picking pass - _picking_pass(); - } +#if ENABLE_NEW_RECTANGLE_SELECTION + if (m_rectangle_selection.is_dragging() && !m_rectangle_selection.is_empty()) +#else + if (m_rectangle_selection.is_dragging()) +#endif // ENABLE_NEW_RECTANGLE_SELECTION + // picking pass using rectangle selection + _rectangular_selection_picking_pass(); + else if (!m_volumes.empty()) + // regular picking pass + _picking_pass(); + } #if ENABLE_RENDER_PICKING_PASS if (!m_picking_enabled || !m_show_picking_texture) { @@ -1593,13 +1701,21 @@ void GLCanvas3D::render() _render_gcode(); _render_sla_slices(); _render_selection(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + _render_bed(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), true); +#else _render_bed(!camera.is_looking_downward(), true); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES _render_objects(GLVolumeCollection::ERenderType::Transparent); _render_sequential_clearance(); #if ENABLE_RENDER_SELECTION_CENTER _render_selection_center(); #endif // ENABLE_RENDER_SELECTION_CENTER +#if ENABLE_SHOW_TOOLPATHS_COG + if (!m_main_toolbar.is_enabled()) + _render_gcode_cog(); +#endif // ENABLE_SHOW_TOOLPATHS_COG // we need to set the mouse's scene position here because the depth buffer // could be invalidated by the following gizmo render methods @@ -1649,6 +1765,9 @@ void GLCanvas3D::render() #if ENABLE_CAMERA_STATISTICS camera.debug_render(); #endif // ENABLE_CAMERA_STATISTICS +#if ENABLE_GLMODEL_STATISTICS + GLModel::render_statistics(); +#endif // ENABLE_GLMODEL_STATISTICS std::string tooltip; @@ -1796,7 +1915,11 @@ std::vector GLCanvas3D::load_object(const ModelObject& model_object, int ob instance_idxs.emplace_back(i); } } - return m_volumes.load_object(&model_object, obj_idx, instance_idxs, m_color_by, m_initialized); +#if ENABLE_LEGACY_OPENGL_REMOVAL + return m_volumes.load_object(&model_object, obj_idx, instance_idxs); +#else + return m_volumes.load_object(&model_object, obj_idx, instance_idxs, m_initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } std::vector GLCanvas3D::load_object(const Model& model, int obj_idx) @@ -2021,7 +2144,11 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re // Note the index of the loaded volume, so that we can reload the main model GLVolume with the hollowed mesh // later in this function. it->volume_idx = m_volumes.volumes.size(); - m_volumes.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, m_color_by, m_initialized); +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_volumes.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx); +#else + m_volumes.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, m_initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_volumes.volumes.back()->geometry_id = key.geometry_id; update_object_list = true; } else { @@ -2078,31 +2205,61 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re GLVolume &volume = *m_volumes.volumes[it->volume_idx]; if (! volume.offsets.empty() && state.step[istep].timestamp != volume.offsets.front()) { // The backend either produced a new hollowed mesh, or it invalidated the one that the front end has seen. +#if ENABLE_LEGACY_OPENGL_REMOVAL + volume.model.reset(); +#else volume.indexed_vertex_array.release_geometry(); - if (state.step[istep].state == PrintStateBase::DONE) { +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + if (state.step[istep].state == PrintStateBase::DONE) { TriangleMesh mesh = print_object->get_mesh(slaposDrillHoles); assert(! mesh.empty()); - mesh.transform(sla_print->sla_trafo(*m_model->objects[volume.object_idx()]).inverse()); + + // sla_trafo does not contain volume trafo. To get a mesh to create + // a new volume from, we have to apply vol trafo inverse separately. + const ModelObject& mo = *m_model->objects[volume.object_idx()]; + Transform3d trafo = sla_print->sla_trafo(mo) + * mo.volumes.front()->get_transformation().get_matrix(); + mesh.transform(trafo.inverse()); #if ENABLE_SMOOTH_NORMALS +#if ENABLE_LEGACY_OPENGL_REMOVAL + volume.model.init_from(mesh, true); +#else volume.indexed_vertex_array.load_mesh(mesh, true); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#else +#if ENABLE_LEGACY_OPENGL_REMOVAL + volume.model.init_from(mesh); #else volume.indexed_vertex_array.load_mesh(mesh); -#endif // ENABLE_SMOOTH_NORMALS - } else { - // Reload the original volume. -#if ENABLE_SMOOTH_NORMALS - volume.indexed_vertex_array.load_mesh(m_model->objects[volume.object_idx()]->volumes[volume.volume_idx()]->mesh(), true); -#else - volume.indexed_vertex_array.load_mesh(m_model->objects[volume.object_idx()]->volumes[volume.volume_idx()]->mesh()); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL #endif // ENABLE_SMOOTH_NORMALS } + else { + // Reload the original volume. +#if ENABLE_SMOOTH_NORMALS +#if ENABLE_LEGACY_OPENGL_REMOVAL + volume.model.init_from(m_model->objects[volume.object_idx()]->volumes[volume.volume_idx()]->mesh(), true); +#else + volume.indexed_vertex_array.load_mesh(m_model->objects[volume.object_idx()]->volumes[volume.volume_idx()]->mesh(), true); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#else +#if ENABLE_LEGACY_OPENGL_REMOVAL + volume.model.init_from(m_model->objects[volume.object_idx()]->volumes[volume.volume_idx()]->mesh()); +#else + volume.indexed_vertex_array.load_mesh(m_model->objects[volume.object_idx()]->volumes[volume.volume_idx()]->mesh()); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#endif // ENABLE_SMOOTH_NORMALS + } +#if !ENABLE_LEGACY_OPENGL_REMOVAL volume.finalize_geometry(true); - } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL + } //FIXME it is an ugly hack to write the timestamp into the "offsets" field to not have to add another member variable // to the GLVolume. We should refactor GLVolume significantly, so that the GLVolume will not contain member variables // of various concenrs (model vs. 3D print path). volume.offsets = { state.step[istep].timestamp }; - } else if (state.step[istep].state == PrintStateBase::DONE) { + } + else if (state.step[istep].state == PrintStateBase::DONE) { // Check whether there is an existing auxiliary volume to be updated, or a new auxiliary volume to be created. ModelVolumeState key(state.step[istep].timestamp, instance.instance_id.id); auto it = std::lower_bound(aux_volume_state.begin(), aux_volume_state.end(), key, model_volume_state_lower); @@ -2114,7 +2271,8 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re instances[istep].emplace_back(std::pair(instance_idx, print_instance_idx)); else shift_zs[object_idx] = 0.; - } else { + } + else { // Recycling an old GLVolume. Update the Object/Instance indices into the current Model. m_volumes.volumes[it->volume_idx]->composite_id = GLVolume::CompositeID(object_idx, m_volumes.volumes[it->volume_idx]->volume_idx(), instance_idx); m_volumes.volumes[it->volume_idx]->set_instance_transformation(model_object->instances[instance_idx]->get_transformation()); @@ -2124,7 +2282,11 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re for (size_t istep = 0; istep < sla_steps.size(); ++istep) if (!instances[istep].empty()) +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_volumes.load_object_auxiliary(print_object, object_idx, instances[istep], sla_steps[istep], state.step[istep].timestamp); +#else m_volumes.load_object_auxiliary(print_object, object_idx, instances[istep], sla_steps[istep], state.step[istep].timestamp, m_initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } // Shift-up all volumes of the object so that it has the right elevation with respect to the print bed @@ -2154,6 +2316,17 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re float depth = print->wipe_tower_data(extruders_count).depth; float brim_width = print->wipe_tower_data(extruders_count).brim_width; +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL + int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview( + x, y, w, depth, (float)height, a, !print->is_step_done(psWipeTower), + brim_width); +#else + int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview( + 1000, x, y, w, depth, (float)height, a, !print->is_step_done(psWipeTower), + brim_width); +#endif // ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL +#else #if ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview( x, y, w, depth, (float)height, a, !print->is_step_done(psWipeTower), @@ -2163,6 +2336,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re 1000, x, y, w, depth, (float)height, a, !print->is_step_done(psWipeTower), brim_width, m_initialized); #endif // ENABLE_WIPETOWER_OBJECTID_1000_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (volume_idx_wipe_tower_old != -1) map_glvolume_old_to_new[volume_idx_wipe_tower_old] = volume_idx_wipe_tower_new; } @@ -2222,9 +2396,10 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re m_dirty = true; } +#if !ENABLE_LEGACY_OPENGL_REMOVAL static void reserve_new_volume_finalize_old_volume(GLVolume& vol_new, GLVolume& vol_old, bool gl_initialized, size_t prealloc_size = VERTEX_BUFFER_RESERVE_SIZE) { - // Assign the large pre-allocated buffers to the new GLVolume. + // Assign the large pre-allocated buffers to the new GLVolume. vol_new.indexed_vertex_array = std::move(vol_old.indexed_vertex_array); // Copy the content back to the old GLVolume. vol_old.indexed_vertex_array = vol_new.indexed_vertex_array; @@ -2236,10 +2411,15 @@ static void reserve_new_volume_finalize_old_volume(GLVolume& vol_new, GLVolume& // Finalize the old geometry, possibly move data to the graphics card. vol_old.finalize_geometry(gl_initialized); } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL void GLCanvas3D::load_gcode_preview(const GCodeProcessorResult& gcode_result, const std::vector& str_tool_colors) { +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_gcode_viewer.load(gcode_result, *this->fff_print()); +#else m_gcode_viewer.load(gcode_result, *this->fff_print(), m_initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (wxGetApp().is_editor()) { m_gcode_viewer.update_shells_color_by_extruder(m_config); @@ -2712,7 +2892,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) m_dirty = true; }, [this](const Vec3d& direction, bool slow, bool camera_space) { - m_selection.start_dragging(); + m_selection.setup_cache(); double multiplier = slow ? 1.0 : 10.0; Vec3d displacement; @@ -2725,7 +2905,6 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) displacement = multiplier * direction; m_selection.translate(displacement); - m_selection.stop_dragging(); m_dirty = true; } ); @@ -2736,8 +2915,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) if (imgui->update_key_data(evt)) { render(); } - else - { + else { if (!m_gizmos.on_key(evt)) { if (evt.GetEventType() == wxEVT_KEY_UP) { if (evt.ShiftDown() && evt.ControlDown() && keyCode == WXK_SPACE) { @@ -2760,8 +2938,13 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) _update_selection_from_hover(); m_rectangle_selection.stop_dragging(); m_mouse.ignore_left_up = true; +#if !ENABLE_NEW_RECTANGLE_SELECTION m_dirty = true; +#endif // !ENABLE_NEW_RECTANGLE_SELECTION } +#if ENABLE_NEW_RECTANGLE_SELECTION + m_dirty = true; +#endif // ENABLE_NEW_RECTANGLE_SELECTION // set_cursor(Standard); } else if (keyCode == WXK_ALT) { @@ -2773,8 +2956,17 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) } // set_cursor(Standard); } - else if (keyCode == WXK_CONTROL) + else if (keyCode == WXK_CONTROL) { +#if ENABLE_NEW_CAMERA_MOVEMENTS + if (m_mouse.dragging) { + // if the user releases CTRL while rotating the 3D scene + // prevent from moving the selected volume + m_mouse.drag.move_volume_idx = -1; + m_mouse.set_start_position_3D_as_invalid(); + } +#endif // ENABLE_NEW_CAMERA_MOVEMENTS m_dirty = true; + } else if (m_gizmos.is_enabled() && !m_selection.is_empty()) { translationProcessor.process(evt); @@ -2805,15 +2997,16 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) if (keyCode == WXK_SHIFT) { translationProcessor.process(evt); - if (m_picking_enabled && (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports)) - { + if (m_picking_enabled && (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports)) { m_mouse.ignore_left_up = false; // set_cursor(Cross); } +#if ENABLE_NEW_RECTANGLE_SELECTION + m_dirty = true; +#endif // ENABLE_NEW_RECTANGLE_SELECTION } else if (keyCode == WXK_ALT) { - if (m_picking_enabled && (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports)) - { + if (m_picking_enabled && (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports)) { m_mouse.ignore_left_up = false; // set_cursor(Cross); } @@ -2822,9 +3015,8 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) m_dirty = true; else if (m_gizmos.is_enabled() && !m_selection.is_empty()) { auto do_rotate = [this](double angle_z_rad) { - m_selection.start_dragging(); + m_selection.setup_cache(); m_selection.rotate(Vec3d(0.0, 0.0, angle_z_rad), TransformationType(TransformationType::World_Relative_Joint)); - m_selection.stop_dragging(); m_dirty = true; // wxGetApp().obj_manipul()->set_dirty(); }; @@ -3132,30 +3324,21 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_mouse.set_start_position_3D_as_invalid(); m_mouse.position = pos.cast(); - if (evt.Dragging() && current_printer_technology() == ptFFF && fff_print()->config().complete_objects) { - switch (m_gizmos.get_current_type()) - { - case GLGizmosManager::EType::Move: - case GLGizmosManager::EType::Scale: - case GLGizmosManager::EType::Rotate: - { - update_sequential_clearance(); - break; - } - default: { break; } - } - } - else if (evt.Dragging()) { - switch (m_gizmos.get_current_type()) - { - case GLGizmosManager::EType::Move: - case GLGizmosManager::EType::Scale: - case GLGizmosManager::EType::Rotate: - { - show_sinking_contours(); - break; - } - default: { break; } + // It should be detection of volume change + // Not only detection of some modifiers !!! + if (evt.Dragging()) { + GLGizmosManager::EType c = m_gizmos.get_current_type(); + if (current_printer_technology() == ptFFF && + fff_print()->config().complete_objects){ + if (c == GLGizmosManager::EType::Move || + c == GLGizmosManager::EType::Scale || + c == GLGizmosManager::EType::Rotate ) + update_sequential_clearance(); + } else { + if (c == GLGizmosManager::EType::Move || + c == GLGizmosManager::EType::Scale || + c == GLGizmosManager::EType::Rotate) + show_sinking_contours(); } } @@ -3242,6 +3425,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_layers_editing.state = LayersEditing::Editing; _perform_layer_editing_action(&evt); } +#if !ENABLE_NEW_RECTANGLE_SELECTION else if (evt.LeftDown() && (evt.ShiftDown() || evt.AltDown()) && m_picking_enabled) { if (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports && m_gizmos.get_current_type() != GLGizmosManager::FdmSupports @@ -3251,23 +3435,52 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_dirty = true; } } +#endif // !ENABLE_NEW_RECTANGLE_SELECTION else { +#if ENABLE_NEW_RECTANGLE_SELECTION + const bool rectangle_selection_dragging = m_rectangle_selection.is_dragging(); + if (evt.LeftDown() && (evt.ShiftDown() || evt.AltDown()) && m_picking_enabled) { + if (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports && + m_gizmos.get_current_type() != GLGizmosManager::FdmSupports && + m_gizmos.get_current_type() != GLGizmosManager::Seam && + m_gizmos.get_current_type() != GLGizmosManager::MmuSegmentation) { + m_rectangle_selection.start_dragging(m_mouse.position, evt.ShiftDown() ? GLSelectionRectangle::EState::Select : GLSelectionRectangle::EState::Deselect); + m_dirty = true; + } + } +#endif // ENABLE_NEW_RECTANGLE_SELECTION + // Select volume in this 3D canvas. // Don't deselect a volume if layer editing is enabled or any gizmo is active. We want the object to stay selected // during the scene manipulation. +#if ENABLE_NEW_RECTANGLE_SELECTION + if (m_picking_enabled && !any_gizmo_active && (!m_hover_volume_idxs.empty() || !is_layers_editing_enabled()) && !rectangle_selection_dragging) { +#else if (m_picking_enabled && (!any_gizmo_active || !evt.CmdDown()) && (!m_hover_volume_idxs.empty() || !is_layers_editing_enabled())) { +#endif // ENABLE_NEW_RECTANGLE_SELECTION if (evt.LeftDown() && !m_hover_volume_idxs.empty()) { int volume_idx = get_first_hover_volume_idx(); bool already_selected = m_selection.contains_volume(volume_idx); +#if ENABLE_NEW_RECTANGLE_SELECTION + bool shift_down = evt.ShiftDown(); +#else bool ctrl_down = evt.CmdDown(); +#endif // ENABLE_NEW_RECTANGLE_SELECTION Selection::IndicesList curr_idxs = m_selection.get_volume_idxs(); +#if ENABLE_NEW_RECTANGLE_SELECTION + if (already_selected && shift_down) + m_selection.remove(volume_idx); + else { + m_selection.add(volume_idx, !shift_down, true); +#else if (already_selected && ctrl_down) m_selection.remove(volume_idx); else { m_selection.add(volume_idx, !ctrl_down, true); +#endif // ENABLE_NEW_RECTANGLE_SELECTION m_mouse.drag.move_requires_threshold = !already_selected; if (already_selected) m_mouse.set_move_start_threshold_position_2D_as_invalid(); @@ -3289,18 +3502,25 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } +#if ENABLE_NEW_RECTANGLE_SELECTION + if (!m_hover_volume_idxs.empty() && !m_rectangle_selection.is_dragging()) { +#else if (!m_hover_volume_idxs.empty()) { +#endif // ENABLE_NEW_RECTANGLE_SELECTION if (evt.LeftDown() && m_moving_enabled && m_mouse.drag.move_volume_idx == -1) { // Only accept the initial position, if it is inside the volume bounding box. - int volume_idx = get_first_hover_volume_idx(); + const int volume_idx = get_first_hover_volume_idx(); BoundingBoxf3 volume_bbox = m_volumes.volumes[volume_idx]->transformed_bounding_box(); volume_bbox.offset(1.0); if ((!any_gizmo_active || !evt.CmdDown()) && volume_bbox.contains(m_mouse.scene_position)) { m_volumes.volumes[volume_idx]->hover = GLVolume::HS_None; // The dragging operation is initiated. m_mouse.drag.move_volume_idx = volume_idx; - m_selection.start_dragging(); - m_mouse.drag.start_position_3D = m_mouse.scene_position; +#if ENABLE_NEW_CAMERA_MOVEMENTS + m_selection.setup_cache(); + if (!evt.CmdDown()) +#endif // ENABLE_NEW_CAMERA_MOVEMENTS + m_mouse.drag.start_position_3D = m_mouse.scene_position; m_sequential_print_clearance_first_displacement = true; m_moving = true; } @@ -3308,31 +3528,36 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } } +#if ENABLE_NEW_CAMERA_MOVEMENTS + else if (evt.Dragging() && evt.LeftIsDown() && !evt.CmdDown() && m_layers_editing.state == LayersEditing::Unknown && + m_mouse.drag.move_volume_idx != -1 && m_mouse.is_start_position_3D_defined()) { +#else else if (evt.Dragging() && evt.LeftIsDown() && m_layers_editing.state == LayersEditing::Unknown && m_mouse.drag.move_volume_idx != -1) { - if (!m_mouse.drag.move_requires_threshold) { +#endif // ENABLE_NEW_CAMERA_MOVEMENTS + if (!m_mouse.drag.move_requires_threshold) { m_mouse.dragging = true; Vec3d cur_pos = m_mouse.drag.start_position_3D; // we do not want to translate objects if the user just clicked on an object while pressing shift to remove it from the selection and then drag if (m_selection.contains_volume(get_first_hover_volume_idx())) { const Camera& camera = wxGetApp().plater()->get_camera(); - if (std::abs(camera.get_dir_forward()(2)) < EPSILON) { + if (std::abs(camera.get_dir_forward().z()) < EPSILON) { // side view -> move selected volumes orthogonally to camera view direction - Linef3 ray = mouse_ray(pos); - Vec3d dir = ray.unit_vector(); + const Linef3 ray = mouse_ray(pos); + const Vec3d dir = ray.unit_vector(); // finds the intersection of the mouse ray with the plane parallel to the camera viewport and passing throught the starting position // use ray-plane intersection see i.e. https://en.wikipedia.org/wiki/Line%E2%80%93plane_intersection algebric form // in our case plane normal and ray direction are the same (orthogonal view) // when moving to perspective camera the negative z unit axis of the camera needs to be transformed in world space and used as plane normal - Vec3d inters = ray.a + (m_mouse.drag.start_position_3D - ray.a).dot(dir) / dir.squaredNorm() * dir; + const Vec3d inters = ray.a + (m_mouse.drag.start_position_3D - ray.a).dot(dir) / dir.squaredNorm() * dir; // vector from the starting position to the found intersection - Vec3d inters_vec = inters - m_mouse.drag.start_position_3D; + const Vec3d inters_vec = inters - m_mouse.drag.start_position_3D; - Vec3d camera_right = camera.get_dir_right(); - Vec3d camera_up = camera.get_dir_up(); + const Vec3d camera_right = camera.get_dir_right(); + const Vec3d camera_up = camera.get_dir_up(); // finds projection of the vector along the camera axes - double projection_x = inters_vec.dot(camera_right); - double projection_z = inters_vec.dot(camera_up); + const double projection_x = inters_vec.dot(camera_right); + const double projection_z = inters_vec.dot(camera_up); // apply offset cur_pos = m_mouse.drag.start_position_3D + projection_x * camera_right + projection_z * camera_up; @@ -3340,9 +3565,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) else { // Generic view // Get new position at the same Z of the initial click point. - float z0 = 0.0f; - float z1 = 1.0f; - cur_pos = Linef3(_mouse_to_3d(pos, &z0), _mouse_to_3d(pos, &z1)).intersect_plane(m_mouse.drag.start_position_3D(2)); + cur_pos = mouse_ray(pos).intersect_plane(m_mouse.drag.start_position_3D.z()); } } @@ -3354,7 +3577,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } else if (evt.Dragging() && evt.LeftIsDown() && m_picking_enabled && m_rectangle_selection.is_dragging()) { +#if ENABLE_NEW_RECTANGLE_SELECTION + // keeps the mouse position updated while dragging the selection rectangle + m_mouse.position = pos.cast(); + m_rectangle_selection.dragging(m_mouse.position); +#else m_rectangle_selection.dragging(pos.cast()); +#endif // ENABLE_NEW_RECTANGLE_SELECTION m_dirty = true; } else if (evt.Dragging()) { @@ -3367,13 +3596,19 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } // do not process the dragging if the left mouse was set down in another canvas +#if ENABLE_NEW_CAMERA_MOVEMENTS else if (evt.LeftIsDown()) { // if dragging over blank area with left button, rotate + if ((any_gizmo_active || evt.CmdDown() || m_hover_volume_idxs.empty()) && m_mouse.is_start_position_3D_defined()) { +#else + // if dragging over blank area with left button, rotate + else if (evt.LeftIsDown()) { if ((any_gizmo_active || m_hover_volume_idxs.empty()) && m_mouse.is_start_position_3D_defined()) { - const Vec3d rot = (Vec3d(pos.x(), pos.y(), 0.) - m_mouse.drag.start_position_3D) * (PI * TRACKBALLSIZE / 180.); +#endif // ENABLE_NEW_CAMERA_MOVEMENTS + const Vec3d rot = (Vec3d(pos.x(), pos.y(), 0.0) - m_mouse.drag.start_position_3D) * (PI * TRACKBALLSIZE / 180.0); if (wxGetApp().app_config->get("use_free_camera") == "1") // Virtual track ball (similar to the 3DConnexion mouse). - wxGetApp().plater()->get_camera().rotate_local_around_target(Vec3d(rot.y(), rot.x(), 0.)); + wxGetApp().plater()->get_camera().rotate_local_around_target(Vec3d(rot.y(), rot.x(), 0.0)); else { // Forces camera right vector to be parallel to XY plane in case it has been misaligned using the 3D mouse free rotation. // It is cheaper to call this function right away instead of testing wxGetApp().plater()->get_mouse3d_controller().connected(), @@ -3386,15 +3621,15 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_dirty = true; } - m_mouse.drag.start_position_3D = Vec3d((double)pos(0), (double)pos(1), 0.0); + m_mouse.drag.start_position_3D = Vec3d((double)pos.x(), (double)pos.y(), 0.0); } else if (evt.MiddleIsDown() || evt.RightIsDown()) { - // If dragging over blank area with right button, pan. + // If dragging over blank area with right/middle button, pan. if (m_mouse.is_start_position_2D_defined()) { // get point in model space at Z = 0 float z = 0.0f; - const Vec3d& cur_pos = _mouse_to_3d(pos, &z); - Vec3d orig = _mouse_to_3d(m_mouse.drag.start_position_2D, &z); + const Vec3d cur_pos = _mouse_to_3d(pos, &z); + const Vec3d orig = _mouse_to_3d(m_mouse.drag.start_position_2D, &z); Camera& camera = wxGetApp().plater()->get_camera(); if (wxGetApp().app_config->get("use_free_camera") != "1") // Forces camera right vector to be parallel to XY plane in case it has been misaligned using the 3D mouse free rotation. @@ -3411,9 +3646,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) { - if (evt.LeftUp()) - m_selection.stop_dragging(); - if (m_layers_editing.state != LayersEditing::Unknown) { m_layers_editing.state = LayersEditing::Unknown; _stop_timer(); @@ -3470,7 +3702,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) if (!m_mouse.dragging) { // do not post the event if the user is panning the scene // or if right click was done over the wipe tower - bool post_right_click_event = m_hover_volume_idxs.empty() || !m_volumes.volumes[get_first_hover_volume_idx()]->is_wipe_tower; + const bool post_right_click_event = m_hover_volume_idxs.empty() || !m_volumes.volumes[get_first_hover_volume_idx()]->is_wipe_tower; if (post_right_click_event) post_event(RBtnEvent(EVT_GLCANVAS_RIGHT_CLICK, { logical_pos, m_hover_volume_idxs.empty() })); } @@ -3782,15 +4014,6 @@ void GLCanvas3D::do_scale(const std::string& snapshot_type) m_dirty = true; } -void GLCanvas3D::do_flatten(const Vec3d& normal, const std::string& snapshot_type) -{ - if (!snapshot_type.empty()) - wxGetApp().plater()->take_snapshot(_(snapshot_type)); - - m_selection.flattening_rotate(normal); - do_rotate(""); // avoid taking another snapshot -} - void GLCanvas3D::do_mirror(const std::string& snapshot_type) { if (m_model == nullptr) @@ -4104,8 +4327,12 @@ bool GLCanvas3D::_render_undo_redo_stack(const bool is_undo, float pos_x) ImGuiWrapper* imgui = wxGetApp().imgui(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + imgui->set_next_window_pos(pos_x, m_undoredo_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); +#else const float x = pos_x * (float)wxGetApp().plater()->get_camera().get_zoom() + 0.5f * (float)get_canvas_size().get_width(); imgui->set_next_window_pos(x, m_undoredo_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES std::string title = is_undo ? L("Undo History") : L("Redo History"); imgui->begin(_(title), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); @@ -4144,8 +4371,12 @@ bool GLCanvas3D::_render_search_list(float pos_x) bool action_taken = false; ImGuiWrapper* imgui = wxGetApp().imgui(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + imgui->set_next_window_pos(pos_x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); +#else const float x = /*pos_x * (float)wxGetApp().plater()->get_camera().get_zoom() + */0.5f * (float)get_canvas_size().get_width(); imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES std::string title = L("Search"); imgui->begin(_(title), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); @@ -4198,9 +4429,13 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x) { ImGuiWrapper *imgui = wxGetApp().imgui(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + imgui->set_next_window_pos(pos_x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); +#else auto canvas_w = float(get_canvas_size().get_width()); const float x = pos_x * float(wxGetApp().plater()->get_camera().get_zoom()) + 0.5f * canvas_w; imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES imgui->begin(_L("Arrange options"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); @@ -4323,7 +4558,13 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, const camera.set_scene_box(scene_bounding_box()); camera.apply_viewport(0, 0, thumbnail_data.width, thumbnail_data.height); camera.zoom_to_box(volumes_box); +#if !ENABLE_LEGACY_OPENGL_REMOVAL camera.apply_view_matrix(); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL + +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d& view_matrix = camera.get_view_matrix(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES double near_z = -1.0; double far_z = -1.0; @@ -4332,7 +4573,11 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, const // extends the near and far z of the frustrum to avoid the bed being clipped // box in eye space - BoundingBoxf3 t_bed_box = m_bed.extended_bounding_box().transformed(camera.get_view_matrix()); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const BoundingBoxf3 t_bed_box = m_bed.extended_bounding_box().transformed(view_matrix); +#else + const BoundingBoxf3 t_bed_box = m_bed.extended_bounding_box().transformed(camera.get_view_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES near_z = -t_bed_box.max.z(); far_z = -t_bed_box.min.z(); } @@ -4352,11 +4597,25 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, const shader->start_using(); shader->set_uniform("emission_factor", 0.0f); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d& projection_matrix = camera.get_projection_matrix(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + for (GLVolume* vol : visible_volumes) { +#if ENABLE_LEGACY_OPENGL_REMOVAL + vol->model.set_color((vol->printable && !vol->is_outside) ? (current_printer_technology() == ptSLA ? vol->color : ColorRGBA::ORANGE()) : ColorRGBA::GRAY()); +#else shader->set_uniform("uniform_color", (vol->printable && !vol->is_outside) ? (current_printer_technology() == ptSLA ? vol->color : ColorRGBA::ORANGE()) : ColorRGBA::GRAY()); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // the volume may have been deactivated by an active gizmo - bool is_active = vol->is_active; + const bool is_active = vol->is_active; vol->is_active = true; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d matrix = view_matrix * vol->world_matrix(); + shader->set_uniform("view_model_matrix", matrix); + shader->set_uniform("projection_matrix", projection_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES vol->render(); vol->is_active = is_active; } @@ -4366,7 +4625,11 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, const glsafe(::glDisable(GL_DEPTH_TEST)); if (thumbnail_params.show_bed) +#if ENABLE_GL_SHADERS_ATTRIBUTES + _render_bed(view_matrix, projection_matrix, !camera.is_looking_downward(), false); +#else _render_bed(!camera.is_looking_downward(), false); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // restore background color if (thumbnail_params.transparent_background) @@ -4627,13 +4890,15 @@ bool GLCanvas3D::_init_main_toolbar() background_data.right = 16; background_data.bottom = 16; - if (!m_main_toolbar.init(background_data)) - { + if (!m_main_toolbar.init(background_data)) { // unable to init the toolbar texture, disable it m_main_toolbar.set_enabled(false); return true; } // init arrow +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (!m_main_toolbar.init_arrow("toolbar_arrow_2.svg")) +#else BackgroundTexture::Metadata arrow_data; arrow_data.filename = "toolbar_arrow.svg"; arrow_data.left = 0; @@ -4641,14 +4906,16 @@ bool GLCanvas3D::_init_main_toolbar() arrow_data.right = 0; arrow_data.bottom = 0; if (!m_main_toolbar.init_arrow(arrow_data)) - { +#endif // ENABLE_GL_SHADERS_ATTRIBUTES BOOST_LOG_TRIVIAL(error) << "Main toolbar failed to load arrow texture."; - } + // m_gizmos is created at constructor, thus we can init arrow here. +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (!m_gizmos.init_arrow("toolbar_arrow_2.svg")) +#else if (!m_gizmos.init_arrow(arrow_data)) - { +#endif // ENABLE_GL_SHADERS_ATTRIBUTES BOOST_LOG_TRIVIAL(error) << "Gizmos manager failed to load arrow texture."; - } // m_main_toolbar.set_layout_type(GLToolbar::Layout::Vertical); m_main_toolbar.set_layout_type(GLToolbar::Layout::Horizontal); @@ -4695,9 +4962,7 @@ bool GLCanvas3D::_init_main_toolbar() item.right.toggable = true; item.right.render_callback = [this](float left, float right, float, float) { if (m_canvas != nullptr) - { _render_arrange_menu(0.5f * (left + right)); - } }; if (!m_main_toolbar.add_item(item)) return false; @@ -4800,8 +5065,7 @@ bool GLCanvas3D::_init_main_toolbar() item.sprite_id = 11; item.left.toggable = true; item.left.render_callback = [this](float left, float right, float, float) { - if (m_canvas != nullptr) - { + if (m_canvas != nullptr) { if (_render_search_list(0.5f * (left + right))) _deactivate_search_toolbar_item(); } @@ -4848,14 +5112,16 @@ bool GLCanvas3D::_init_undoredo_toolbar() background_data.right = 16; background_data.bottom = 16; - if (!m_undoredo_toolbar.init(background_data)) - { + if (!m_undoredo_toolbar.init(background_data)) { // unable to init the toolbar texture, disable it m_undoredo_toolbar.set_enabled(false); return true; } // init arrow +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (!m_undoredo_toolbar.init_arrow("toolbar_arrow_2.svg")) +#else BackgroundTexture::Metadata arrow_data; arrow_data.filename = "toolbar_arrow.svg"; arrow_data.left = 0; @@ -4863,9 +5129,8 @@ bool GLCanvas3D::_init_undoredo_toolbar() arrow_data.right = 0; arrow_data.bottom = 0; if (!m_undoredo_toolbar.init_arrow(arrow_data)) - { +#endif // ENABLE_GL_SHADERS_ATTRIBUTES BOOST_LOG_TRIVIAL(error) << "Undo/Redo toolbar failed to load arrow texture."; - } // m_undoredo_toolbar.set_layout_type(GLToolbar::Layout::Vertical); m_undoredo_toolbar.set_layout_type(GLToolbar::Layout::Horizontal); @@ -4885,8 +5150,7 @@ bool GLCanvas3D::_init_undoredo_toolbar() item.right.toggable = true; item.right.action_callback = [this]() { m_imgui_undo_redo_hovered_pos = -1; }; item.right.render_callback = [this](float left, float right, float, float) { - if (m_canvas != nullptr) - { + if (m_canvas != nullptr) { if (_render_undo_redo_stack(true, 0.5f * (left + right))) _deactivate_undo_redo_toolbar_items(); } @@ -4905,8 +5169,7 @@ bool GLCanvas3D::_init_undoredo_toolbar() new_additional_tooltip = (boost::format(_utf8(L("Next Undo action: %1%"))) % action).str(); } - if (new_additional_tooltip != curr_additional_tooltip) - { + if (new_additional_tooltip != curr_additional_tooltip) { m_undoredo_toolbar.set_additional_tooltip(id, new_additional_tooltip); set_tooltip(""); } @@ -4923,8 +5186,7 @@ bool GLCanvas3D::_init_undoredo_toolbar() item.left.action_callback = [this]() { post_event(SimpleEvent(EVT_GLCANVAS_REDO)); }; item.right.action_callback = [this]() { m_imgui_undo_redo_hovered_pos = -1; }; item.right.render_callback = [this](float left, float right, float, float) { - if (m_canvas != nullptr) - { + if (m_canvas != nullptr) { if (_render_undo_redo_stack(false, 0.5f * (left + right))) _deactivate_undo_redo_toolbar_items(); } @@ -4943,8 +5205,7 @@ bool GLCanvas3D::_init_undoredo_toolbar() new_additional_tooltip = (boost::format(_utf8(L("Next Redo action: %1%"))) % action).str(); } - if (new_additional_tooltip != curr_additional_tooltip) - { + if (new_additional_tooltip != curr_additional_tooltip) { m_undoredo_toolbar.set_additional_tooltip(id, new_additional_tooltip); set_tooltip(""); } @@ -5022,9 +5283,9 @@ BoundingBoxf3 GLCanvas3D::_max_bounding_box(bool include_gizmos, bool include_be // clamp max bb size with respect to bed bb size if (!m_picking_enabled) { - static const double max_scale_factor = 1.5; + static const double max_scale_factor = 2.0; const Vec3d bb_size = bb.size(); - const Vec3d bed_bb_size = bed_bb.size(); + const Vec3d bed_bb_size = m_bed.build_volume().bounding_volume().size(); if (bb_size.x() > max_scale_factor * bed_bb_size.x() || bb_size.y() > max_scale_factor * bed_bb_size.y() || bb_size.z() > max_scale_factor * bed_bb_size.z()) { @@ -5079,16 +5340,25 @@ void GLCanvas3D::_picking_pass() glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); +#if !ENABLE_GL_SHADERS_ATTRIBUTES m_camera_clipping_plane = m_gizmos.get_clipping_plane(); if (m_camera_clipping_plane.is_active()) { ::glClipPlane(GL_CLIP_PLANE0, (GLdouble*)m_camera_clipping_plane.get_data()); ::glEnable(GL_CLIP_PLANE0); } +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES _render_volumes_for_picking(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES if (m_camera_clipping_plane.is_active()) ::glDisable(GL_CLIP_PLANE0); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + _render_bed_for_picking(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward()); +#else _render_bed_for_picking(!wxGetApp().plater()->get_camera().is_looking_downward()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_gizmos.render_current_gizmo_for_picking_pass(); @@ -5144,7 +5414,12 @@ void GLCanvas3D::_rectangular_selection_picking_pass() glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); _render_volumes_for_picking(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + _render_bed_for_picking(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward()); +#else _render_bed_for_picking(!wxGetApp().plater()->get_camera().is_looking_downward()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (m_multisample_allowed) glsafe(::glEnable(GL_MULTISAMPLE)); @@ -5217,25 +5492,27 @@ void GLCanvas3D::_render_background() use_error_color &= m_gcode_viewer.has_data() && !m_gcode_viewer.is_contained_in_bed(); } +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushMatrix()); glsafe(::glLoadIdentity()); glsafe(::glMatrixMode(GL_PROJECTION)); glsafe(::glPushMatrix()); glsafe(::glLoadIdentity()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES // Draws a bottom to top gradient over the complete screen. glsafe(::glDisable(GL_DEPTH_TEST)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL const ColorRGBA bottom_color = use_error_color ? ERROR_BG_DARK_COLOR : DEFAULT_BG_DARK_COLOR; if (!m_background.is_initialized()) { m_background.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P2T2, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(4 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(6 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P2T2 }; + init_data.reserve_vertices(4); + init_data.reserve_indices(6); // vertices init_data.add_vertex(Vec2f(-1.0f, -1.0f), Vec2f(0.0f, 0.0f)); @@ -5244,8 +5521,8 @@ void GLCanvas3D::_render_background() init_data.add_vertex(Vec2f(-1.0f, 1.0f), Vec2f(0.0f, 1.0f)); // indices - init_data.add_ushort_triangle(0, 1, 2); - init_data.add_ushort_triangle(2, 3, 0); + init_data.add_triangle(0, 1, 2); + init_data.add_triangle(2, 3, 0); m_background.init_from(std::move(init_data)); } @@ -5255,7 +5532,6 @@ void GLCanvas3D::_render_background() shader->start_using(); shader->set_uniform("top_color", use_error_color ? ERROR_BG_LIGHT_COLOR : DEFAULT_BG_LIGHT_COLOR); shader->set_uniform("bottom_color", bottom_color); - m_background.render(); shader->stop_using(); } @@ -5269,16 +5545,22 @@ void GLCanvas3D::_render_background() ::glVertex2f(1.0f, 1.0f); ::glVertex2f(-1.0f, 1.0f); glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glEnable(GL_DEPTH_TEST)); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); glsafe(::glMatrixMode(GL_MODELVIEW)); glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLCanvas3D::_render_bed(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool show_axes) +#else void GLCanvas3D::_render_bed(bool bottom, bool show_axes) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { float scale_factor = 1.0; #if ENABLE_RETINA_GL @@ -5292,17 +5574,29 @@ void GLCanvas3D::_render_bed(bool bottom, bool show_axes) && m_gizmos.get_current_type() != GLGizmosManager::Seam && m_gizmos.get_current_type() != GLGizmosManager::MmuSegmentation); +#if ENABLE_GL_SHADERS_ATTRIBUTES + m_bed.render(*this, view_matrix, projection_matrix, bottom, scale_factor, show_axes, show_texture); +#else m_bed.render(*this, bottom, scale_factor, show_axes, show_texture); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLCanvas3D::_render_bed_for_picking(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom) +#else void GLCanvas3D::_render_bed_for_picking(bool bottom) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { float scale_factor = 1.0; #if ENABLE_RETINA_GL scale_factor = m_retina_helper->get_scale_factor(); #endif // ENABLE_RETINA_GL +#if ENABLE_GL_SHADERS_ATTRIBUTES + m_bed.render_for_picking(*this, view_matrix, projection_matrix, bottom, scale_factor); +#else m_bed.render_for_picking(*this, bottom, scale_factor); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type) @@ -5370,18 +5664,33 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type) { if (m_picking_enabled && !m_gizmos.is_dragging() && m_layers_editing.is_enabled() && (m_layers_editing.last_object_id != -1) && (m_layers_editing.object_max_z() > 0.0f)) { int object_id = m_layers_editing.last_object_id; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + m_volumes.render(type, false, camera.get_view_matrix(), camera.get_projection_matrix(), [object_id](const GLVolume& volume) { + // Which volume to paint without the layer height profile shader? + return volume.is_active && (volume.is_modifier || volume.composite_id.object_id != object_id); + }); +#else m_volumes.render(type, false, wxGetApp().plater()->get_camera().get_view_matrix(), [object_id](const GLVolume& volume) { // Which volume to paint without the layer height profile shader? return volume.is_active && (volume.is_modifier || volume.composite_id.object_id != object_id); }); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // Let LayersEditing handle rendering of the active object using the layer height profile shader. m_layers_editing.render_volumes(*this, m_volumes); } else { // do not cull backfaces to show broken geometry, if any +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + m_volumes.render(type, m_picking_enabled, camera.get_view_matrix(), camera.get_projection_matrix(), [this](const GLVolume& volume) { + return (m_render_sla_auxiliaries || volume.composite_id.volume_id >= 0); + }); +#else m_volumes.render(type, m_picking_enabled, wxGetApp().plater()->get_camera().get_view_matrix(), [this](const GLVolume& volume) { return (m_render_sla_auxiliaries || volume.composite_id.volume_id >= 0); }); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } // In case a painting gizmo is open, it should render the painted triangles @@ -5400,7 +5709,12 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type) } case GLVolumeCollection::ERenderType::Transparent: { +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + m_volumes.render(type, false, camera.get_view_matrix(), camera.get_projection_matrix()); +#else m_volumes.render(type, false, wxGetApp().plater()->get_camera().get_view_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES break; } } @@ -5415,6 +5729,13 @@ void GLCanvas3D::_render_gcode() m_gcode_viewer.render(); } +#if ENABLE_SHOW_TOOLPATHS_COG +void GLCanvas3D::_render_gcode_cog() +{ + m_gcode_viewer.render_cog(); +} +#endif // ENABLE_SHOW_TOOLPATHS_COG + void GLCanvas3D::_render_selection() { float scale_factor = 1.0; @@ -5501,6 +5822,7 @@ void GLCanvas3D::_check_and_update_toolbar_icon_scale() void GLCanvas3D::_render_overlays() { glsafe(::glDisable(GL_DEPTH_TEST)); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushMatrix()); glsafe(::glLoadIdentity()); // ensure that the textures are renderered inside the frustrum @@ -5509,6 +5831,7 @@ void GLCanvas3D::_render_overlays() // ensure that the overlay fits the frustrum near z plane double gui_scale = camera.get_gui_scale(); glsafe(::glScaled(gui_scale, gui_scale, 1.0)); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES _check_and_update_toolbar_icon_scale(); @@ -5547,16 +5870,30 @@ void GLCanvas3D::_render_overlays() } m_labels.render(sorted_instances); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } void GLCanvas3D::_render_volumes_for_picking() const { +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + GLShaderProgram* shader = wxGetApp().get_shader("flat_clip"); +#else + GLShaderProgram* shader = wxGetApp().get_shader("flat"); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + if (shader == nullptr) + return; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + // do not cull backfaces to show broken geometry, if any glsafe(::glDisable(GL_CULL_FACE)); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES const Transform3d& view_matrix = wxGetApp().plater()->get_camera().get_view_matrix(); for (size_t type = 0; type < 2; ++ type) { @@ -5567,13 +5904,31 @@ void GLCanvas3D::_render_volumes_for_picking() const // we reserve color = (0,0,0) for occluders (as the printbed) // so we shift volumes' id by 1 to get the proper color const unsigned int id = 1 + volume.second.first; +#if ENABLE_LEGACY_OPENGL_REMOVAL + volume.first->model.set_color(picking_decode(id)); + shader->start_using(); +#else glsafe(::glColor4fv(picking_decode(id).data())); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix() * volume.first->world_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + shader->set_uniform("volume_world_matrix", volume.first->world_matrix()); + shader->set_uniform("z_range", m_volumes.get_z_range()); + shader->set_uniform("clipping_plane", m_volumes.get_clipping_plane()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES volume.first->render(); - } +#if ENABLE_LEGACY_OPENGL_REMOVAL + shader->stop_using(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + } } +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glEnable(GL_CULL_FACE)); } @@ -5599,9 +5954,7 @@ void GLCanvas3D::_render_gizmos_overlay() m_gizmos.render_overlay(); if (m_gizmo_highlighter.m_render_arrow) - { m_gizmos.render_arrow(*this, m_gizmo_highlighter.m_gizmo_type); - } } void GLCanvas3D::_render_main_toolbar() @@ -5609,20 +5962,26 @@ void GLCanvas3D::_render_main_toolbar() if (!m_main_toolbar.is_enabled()) return; - Size cnv_size = get_canvas_size(); - float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); + const Size cnv_size = get_canvas_size(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const float top = 0.5f * (float)cnv_size.get_height(); +#else + const float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); + const float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES - float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar(); - float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f; - float left = -0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar_width) * inv_zoom; + const float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const float left = -0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar_width); +#else + const float left = -0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar_width) * inv_zoom; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_main_toolbar.set_position(top, left); m_main_toolbar.render(*this); if (m_toolbar_highlighter.m_render_arrow) - { m_main_toolbar.render_arrow(*this, m_toolbar_highlighter.m_toolbar_item); - } } void GLCanvas3D::_render_undoredo_toolbar() @@ -5630,33 +5989,43 @@ void GLCanvas3D::_render_undoredo_toolbar() if (!m_undoredo_toolbar.is_enabled()) return; - Size cnv_size = get_canvas_size(); + const Size cnv_size = get_canvas_size(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const float top = 0.5f * (float)cnv_size.get_height(); +#else float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); - float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; + const float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar(); - float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f; - float left = (m_main_toolbar.get_width() - 0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar_width)) * inv_zoom; + const float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : 0.0f; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const float left = m_main_toolbar.get_width() - 0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar_width); +#else + const float left = (m_main_toolbar.get_width() - 0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width() + collapse_toolbar_width)) * inv_zoom; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_undoredo_toolbar.set_position(top, left); m_undoredo_toolbar.render(*this); if (m_toolbar_highlighter.m_render_arrow) - { m_undoredo_toolbar.render_arrow(*this, m_toolbar_highlighter.m_toolbar_item); - } } void GLCanvas3D::_render_collapse_toolbar() const { GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar(); - Size cnv_size = get_canvas_size(); - float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); + const Size cnv_size = get_canvas_size(); + const float band = m_layers_editing.is_enabled() ? (wxGetApp().imgui()->get_style_scaling() * LayersEditing::THICKNESS_BAR_WIDTH) : 0.0; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const float top = 0.5f * (float)cnv_size.get_height(); + const float left = 0.5f * (float)cnv_size.get_width() - collapse_toolbar.get_width() - band; +#else + const float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); - float band = m_layers_editing.is_enabled() ? (wxGetApp().imgui()->get_style_scaling() * LayersEditing::THICKNESS_BAR_WIDTH) : 0.0; - - float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; - float left = (0.5f * (float)cnv_size.get_width() - (float)collapse_toolbar.get_width() - band) * inv_zoom; + const float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; + const float left = (0.5f * (float)cnv_size.get_width() - (float)collapse_toolbar.get_width() - band) * inv_zoom; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES collapse_toolbar.set_position(top, left); collapse_toolbar.render(*this); @@ -5679,12 +6048,18 @@ void GLCanvas3D::_render_view_toolbar() const view_toolbar.set_icons_size(size); #endif // ENABLE_RETINA_GL - Size cnv_size = get_canvas_size(); + const Size cnv_size = get_canvas_size(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + // places the toolbar on the bottom-left corner of the 3d scene + float top = -0.5f * (float)cnv_size.get_height() + view_toolbar.get_height(); + float left = -0.5f * (float)cnv_size.get_width(); +#else float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); // places the toolbar on the bottom-left corner of the 3d scene float top = (-0.5f * (float)cnv_size.get_height() + view_toolbar.get_height()) * inv_zoom; float left = -0.5f * (float)cnv_size.get_width() * inv_zoom; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES view_toolbar.set_position(top, left); view_toolbar.render(*this); } @@ -5692,54 +6067,54 @@ void GLCanvas3D::_render_view_toolbar() const #if ENABLE_SHOW_CAMERA_TARGET void GLCanvas3D::_render_camera_target() { - static const double half_length = 5.0; + static const float half_length = 5.0f; glsafe(::glDisable(GL_DEPTH_TEST)); glsafe(::glLineWidth(2.0f)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL - const Vec3d& target = wxGetApp().plater()->get_camera().get_target(); - bool target_changed = !m_camera_target.target.isApprox(target); - m_camera_target.target = target; +#if ENABLE_LEGACY_OPENGL_REMOVAL + const Vec3f& target = wxGetApp().plater()->get_camera().get_target().cast(); + m_camera_target.target = target.cast(); for (int i = 0; i < 3; ++i) { - if (!m_camera_target.axis[i].is_initialized() || target_changed) { + if (!m_camera_target.axis[i].is_initialized()) { m_camera_target.axis[i].reset(); - GLModel::InitializationData init_data; - GLModel::InitializationData::Entity entity; - entity.type = GLModel::PrimitiveType::Lines; - entity.positions.reserve(2); + GLModel::Geometry init_data; + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; + init_data.color = (i == X) ? ColorRGBA::X() : ((i == Y) ? ColorRGBA::Y() : ColorRGBA::Z()); + init_data.reserve_vertices(2); + init_data.reserve_indices(2); + + // vertices if (i == X) { - entity.positions.emplace_back(target.x() - half_length, target.y(), target.z()); - entity.positions.emplace_back(target.x() + half_length, target.y(), target.z()); + init_data.add_vertex(Vec3f(-half_length, 0.0f, 0.0f)); + init_data.add_vertex(Vec3f(+half_length, 0.0f, 0.0f)); } else if (i == Y) { - entity.positions.emplace_back(target.x(), target.y() - half_length, target.z()); - entity.positions.emplace_back(target.x(), target.y() + half_length, target.z()); + init_data.add_vertex(Vec3f(0.0f, -half_length, 0.0f)); + init_data.add_vertex(Vec3f(0.0f, +half_length, 0.0f)); } else { - entity.positions.emplace_back(target.x(), target.y(), target.z() - half_length); - entity.positions.emplace_back(target.x(), target.y(), target.z() + half_length); - } - entity.normals.reserve(2); - for (size_t j = 0; j < 2; ++j) { - entity.normals.emplace_back(Vec3f::UnitZ()); + init_data.add_vertex(Vec3f(0.0f, 0.0f, -half_length)); + init_data.add_vertex(Vec3f(0.0f, 0.0f, +half_length)); } - entity.indices.reserve(2); - entity.indices.emplace_back(0); - entity.indices.emplace_back(1); + // indices + init_data.add_line(0, 1); - init_data.entities.emplace_back(entity); - m_camera_target.axis[i].init_from(init_data); - m_camera_target.axis[i].set_color(-1, (i == X) ? ColorRGBA::X() : (i == Y) ? ColorRGBA::Y() : ColorRGBA::Z()); + m_camera_target.axis[i].init_from(std::move(init_data)); } } GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix() * Geometry::assemble_transform(m_camera_target.target)); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES for (int i = 0; i < 3; ++i) { m_camera_target.axis[i].render(); } @@ -5761,7 +6136,7 @@ void GLCanvas3D::_render_camera_target() ::glVertex3d(target.x(), target.y(), target.z() - half_length); ::glVertex3d(target.x(), target.y(), target.z() + half_length); glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } #endif // ENABLE_SHOW_CAMERA_TARGET @@ -5784,32 +6159,77 @@ void GLCanvas3D::_render_sla_slices() if (!obj->is_step_done(slaposSliceSupports)) continue; +#if ENABLE_LEGACY_OPENGL_REMOVAL + SlaCap::ObjectIdToModelsMap::iterator it_caps_bottom = m_sla_caps[0].triangles.find(i); + SlaCap::ObjectIdToModelsMap::iterator it_caps_top = m_sla_caps[1].triangles.find(i); +#else SlaCap::ObjectIdToTrianglesMap::iterator it_caps_bottom = m_sla_caps[0].triangles.find(i); SlaCap::ObjectIdToTrianglesMap::iterator it_caps_top = m_sla_caps[1].triangles.find(i); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { if (it_caps_bottom == m_sla_caps[0].triangles.end()) it_caps_bottom = m_sla_caps[0].triangles.emplace(i, SlaCap::Triangles()).first; if (!m_sla_caps[0].matches(clip_min_z)) { m_sla_caps[0].z = clip_min_z; +#if ENABLE_LEGACY_OPENGL_REMOVAL + it_caps_bottom->second.object.reset(); + it_caps_bottom->second.supports.reset(); +#else it_caps_bottom->second.object.clear(); it_caps_bottom->second.supports.clear(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } if (it_caps_top == m_sla_caps[1].triangles.end()) it_caps_top = m_sla_caps[1].triangles.emplace(i, SlaCap::Triangles()).first; if (!m_sla_caps[1].matches(clip_max_z)) { m_sla_caps[1].z = clip_max_z; +#if ENABLE_LEGACY_OPENGL_REMOVAL + it_caps_top->second.object.reset(); + it_caps_top->second.supports.reset(); +#else it_caps_top->second.object.clear(); it_caps_top->second.supports.clear(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLModel& bottom_obj_triangles = it_caps_bottom->second.object; + GLModel& bottom_sup_triangles = it_caps_bottom->second.supports; + GLModel& top_obj_triangles = it_caps_top->second.object; + GLModel& top_sup_triangles = it_caps_top->second.supports; +#else Pointf3s &bottom_obj_triangles = it_caps_bottom->second.object; Pointf3s &bottom_sup_triangles = it_caps_bottom->second.supports; Pointf3s &top_obj_triangles = it_caps_top->second.object; Pointf3s &top_sup_triangles = it_caps_top->second.supports; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL + auto init_model = [](GLModel& model, const Pointf3s& triangles, const ColorRGBA& color) { + GLModel::Geometry init_data; + init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(triangles.size()); + init_data.reserve_indices(triangles.size() / 3); + init_data.color = color; + + unsigned int vertices_count = 0; + for (const Vec3d& v : triangles) { + init_data.add_vertex((Vec3f)v.cast()); + ++vertices_count; + if (vertices_count % 3 == 0) + init_data.add_triangle(vertices_count - 3, vertices_count - 2, vertices_count - 1); + } + + if (!init_data.is_empty()) + model.init_from(std::move(init_data)); + }; + + if ((!bottom_obj_triangles.is_initialized() || !bottom_sup_triangles.is_initialized() || + !top_obj_triangles.is_initialized() || !top_sup_triangles.is_initialized()) && !obj->get_slice_index().empty()) { +#else if ((bottom_obj_triangles.empty() || bottom_sup_triangles.empty() || top_obj_triangles.empty() || top_sup_triangles.empty()) && - !obj->get_slice_index().empty()) - { + !obj->get_slice_index().empty()) { +#endif // ENABLE_LEGACY_OPENGL_REMOVAL double layer_height = print->default_object_config().layer_height.value; double initial_layer_height = print->material_config().initial_layer_height.value; bool left_handed = obj->is_left_handed(); @@ -5824,39 +6244,94 @@ void GLCanvas3D::_render_sla_slices() const SliceRecord& slice_high = obj->closest_slice_to_print_level(key_high, coord_t(SCALED_EPSILON)); // Offset to avoid OpenGL Z fighting between the object's horizontal surfaces and the triangluated surfaces of the cuts. - double plane_shift_z = 0.002; + const double plane_shift_z = 0.002; if (slice_low.is_valid()) { const ExPolygons& obj_bottom = slice_low.get_slice(soModel); const ExPolygons& sup_bottom = slice_low.get_slice(soSupport); +#if ENABLE_LEGACY_OPENGL_REMOVAL + // calculate model bottom cap + if (!bottom_obj_triangles.is_initialized() && !obj_bottom.empty()) + init_model(bottom_obj_triangles, triangulate_expolygons_3d(obj_bottom, clip_min_z - plane_shift_z, !left_handed), { 1.0f, 0.37f, 0.0f, 1.0f }); + // calculate support bottom cap + if (!bottom_sup_triangles.is_initialized() && !sup_bottom.empty()) + init_model(bottom_sup_triangles, triangulate_expolygons_3d(sup_bottom, clip_min_z - plane_shift_z, !left_handed), { 1.0f, 0.0f, 0.37f, 1.0f }); +#else // calculate model bottom cap if (bottom_obj_triangles.empty() && !obj_bottom.empty()) bottom_obj_triangles = triangulate_expolygons_3d(obj_bottom, clip_min_z - plane_shift_z, ! left_handed); // calculate support bottom cap if (bottom_sup_triangles.empty() && !sup_bottom.empty()) - bottom_sup_triangles = triangulate_expolygons_3d(sup_bottom, clip_min_z - plane_shift_z, ! left_handed); + bottom_sup_triangles = triangulate_expolygons_3d(sup_bottom, clip_min_z - plane_shift_z, !left_handed); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } if (slice_high.is_valid()) { const ExPolygons& obj_top = slice_high.get_slice(soModel); const ExPolygons& sup_top = slice_high.get_slice(soSupport); +#if ENABLE_LEGACY_OPENGL_REMOVAL + // calculate model top cap + if (!top_obj_triangles.is_initialized() && !obj_top.empty()) + init_model(top_obj_triangles, triangulate_expolygons_3d(obj_top, clip_max_z + plane_shift_z, left_handed), { 1.0f, 0.37f, 0.0f, 1.0f }); + // calculate support top cap + if (!top_sup_triangles.is_initialized() && !sup_top.empty()) + init_model(top_sup_triangles, triangulate_expolygons_3d(sup_top, clip_max_z + plane_shift_z, left_handed), { 1.0f, 0.0f, 0.37f, 1.0f }); +#else // calculate model top cap if (top_obj_triangles.empty() && !obj_top.empty()) top_obj_triangles = triangulate_expolygons_3d(obj_top, clip_max_z + plane_shift_z, left_handed); // calculate support top cap if (top_sup_triangles.empty() && !sup_top.empty()) top_sup_triangles = triangulate_expolygons_3d(sup_top, clip_max_z + plane_shift_z, left_handed); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLShaderProgram* shader = wxGetApp().get_shader("flat"); + if (shader != nullptr) { + shader->start_using(); + + for (const SLAPrintObject::Instance& inst : obj->instances()) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d view_model_matrix = camera.get_view_matrix() * + Geometry::assemble_transform(Vec3d(unscale(inst.shift.x()), unscale(inst.shift.y()), 0.0), + inst.rotation * Vec3d::UnitZ(), Vec3d::Ones(), + obj->is_left_handed() ? Vec3d(-1.0f, 1.0f, 1.0f) : Vec3d::Ones()); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#else + glsafe(::glPushMatrix()); + glsafe(::glTranslated(unscale(inst.shift.x()), unscale(inst.shift.y()), 0.0)); + glsafe(::glRotatef(Geometry::rad2deg(inst.rotation), 0.0f, 0.0f, 1.0f)); + if (obj->is_left_handed()) + // The polygons are mirrored by X. + glsafe(::glScalef(-1.0f, 1.0f, 1.0f)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + + bottom_obj_triangles.render(); + top_obj_triangles.render(); + bottom_sup_triangles.render(); + top_sup_triangles.render(); + +#if !ENABLE_GL_SHADERS_ATTRIBUTES + glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES + } + + shader->stop_using(); + } +#else if (!bottom_obj_triangles.empty() || !top_obj_triangles.empty() || !bottom_sup_triangles.empty() || !top_sup_triangles.empty()) { for (const SLAPrintObject::Instance& inst : obj->instances()) { glsafe(::glPushMatrix()); - glsafe(::glTranslated(unscale(inst.shift.x()), unscale(inst.shift.y()), 0)); - glsafe(::glRotatef(Geometry::rad2deg(inst.rotation), 0.0, 0.0, 1.0)); + glsafe(::glTranslated(unscale(inst.shift.x()), unscale(inst.shift.y()), 0.0)); + glsafe(::glRotatef(Geometry::rad2deg(inst.rotation), 0.0f, 0.0f, 1.0f)); if (obj->is_left_handed()) // The polygons are mirrored by X. - glsafe(::glScalef(-1.0, 1.0, 1.0)); + glsafe(::glScalef(-1.0f, 1.0f, 1.0f)); glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); glsafe(::glColor3f(1.0f, 0.37f, 0.0f)); if (!bottom_obj_triangles.empty()) { @@ -5880,6 +6355,7 @@ void GLCanvas3D::_render_sla_slices() glsafe(::glPopMatrix()); } } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } @@ -5907,7 +6383,9 @@ void GLCanvas3D::_update_volumes_hover_state() return; } +#if !ENABLE_NEW_RECTANGLE_SELECTION bool selection_modifiers_only = m_selection.is_empty() || m_selection.is_any_modifier(); +#endif // !ENABLE_NEW_RECTANGLE_SELECTION bool hover_modifiers_only = true; for (int i : m_hover_volume_idxs) { @@ -5936,9 +6414,14 @@ void GLCanvas3D::_update_volumes_hover_state() if (volume.hover != GLVolume::HS_None) continue; +#if ENABLE_NEW_RECTANGLE_SELECTION + bool deselect = volume.selected && ((shift_pressed && m_rectangle_selection.is_empty()) || (alt_pressed && !m_rectangle_selection.is_empty())); + bool select = !volume.selected && (m_rectangle_selection.is_empty() || (shift_pressed && !m_rectangle_selection.is_empty())); +#else bool deselect = volume.selected && ((ctrl_pressed && !shift_pressed) || alt_pressed); // (volume->is_modifier && !selection_modifiers_only && !is_ctrl_pressed) -> allows hovering on selected modifiers belonging to selection of type Instance bool select = (!volume.selected || (volume.is_modifier && !selection_modifiers_only && !ctrl_pressed)) && !alt_pressed; +#endif // ENABLE_NEW_RECTANGLE_SELECTION if (select || deselect) { bool as_volume = @@ -5994,19 +6477,19 @@ Vec3d GLCanvas3D::_mouse_to_3d(const Point& mouse_pos, float* z) return Vec3d(DBL_MAX, DBL_MAX, DBL_MAX); const Camera& camera = wxGetApp().plater()->get_camera(); - Matrix4d modelview = camera.get_view_matrix().matrix(); - Matrix4d projection= camera.get_projection_matrix().matrix(); - Vec4i viewport(camera.get_viewport().data()); + const Matrix4d modelview = camera.get_view_matrix().matrix(); + const Matrix4d projection = camera.get_projection_matrix().matrix(); + const Vec4i viewport(camera.get_viewport().data()); - GLint y = viewport[3] - (GLint)mouse_pos(1); - GLfloat mouse_z; + const int y = viewport[3] - mouse_pos.y(); + float mouse_z; if (z == nullptr) - glsafe(::glReadPixels((GLint)mouse_pos(0), y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, (void*)&mouse_z)); + glsafe(::glReadPixels(mouse_pos.x(), y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, (void*)&mouse_z)); else mouse_z = *z; Vec3d out; - igl::unproject(Vec3d(mouse_pos(0), y, mouse_z), modelview, projection, viewport, out); + igl::unproject(Vec3d(mouse_pos.x(), y, mouse_z), modelview, projection, viewport, out); return out; } @@ -6063,23 +6546,48 @@ void GLCanvas3D::_load_print_toolpaths(const BuildVolume &build_volume) skirt_height = std::min(skirt_height, print_zs.size()); print_zs.erase(print_zs.begin() + skirt_height, print_zs.end()); +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLVolume* volume = m_volumes.new_toolpath_volume(color); + GLModel::Geometry init_data; + init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; +#else GLVolume *volume = m_volumes.new_toolpath_volume(color, VERTEX_BUFFER_RESERVE_SIZE); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL for (size_t i = 0; i < skirt_height; ++ i) { volume->print_zs.emplace_back(print_zs[i]); +#if ENABLE_LEGACY_OPENGL_REMOVAL + volume->offsets.emplace_back(init_data.indices_count()); + if (i == 0) + _3DScene::extrusionentity_to_verts(print->brim(), print_zs[i], Point(0, 0), init_data); + _3DScene::extrusionentity_to_verts(print->skirt(), print_zs[i], Point(0, 0), init_data); +#else volume->offsets.emplace_back(volume->indexed_vertex_array.quad_indices.size()); volume->offsets.emplace_back(volume->indexed_vertex_array.triangle_indices.size()); if (i == 0) _3DScene::extrusionentity_to_verts(print->brim(), print_zs[i], Point(0, 0), *volume); _3DScene::extrusionentity_to_verts(print->skirt(), print_zs[i], Point(0, 0), *volume); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Ensure that no volume grows over the limits. If the volume is too large, allocate a new one. +#if ENABLE_LEGACY_OPENGL_REMOVAL + if (init_data.vertices_size_bytes() > MAX_VERTEX_BUFFER_SIZE) { + volume->model.init_from(std::move(init_data)); +#else if (volume->indexed_vertex_array.vertices_and_normals_interleaved.size() > MAX_VERTEX_BUFFER_SIZE) { - GLVolume &vol = *volume; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + GLVolume &vol = *volume; volume = m_volumes.new_toolpath_volume(vol.color); +#if !ENABLE_LEGACY_OPENGL_REMOVAL reserve_new_volume_finalize_old_volume(*volume, vol, m_initialized); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL } } +#if ENABLE_LEGACY_OPENGL_REMOVAL + volume->model.init_from(std::move(init_data)); + volume->is_outside = !contains(build_volume, volume->model); +#else volume->is_outside = ! build_volume.all_paths_inside_vertices_and_normals_interleaved(volume->indexed_vertex_array.vertices_and_normals_interleaved, volume->indexed_vertex_array.bounding_box()); volume->indexed_vertex_array.finalize_geometry(m_initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, const BuildVolume& build_volume, const std::vector& str_tool_colors, const std::vector& color_print_values) @@ -6251,7 +6759,12 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c // Allocate the volume before locking. GLVolume *volume = new GLVolume(color); volume->is_extrusion_path = true; - tbb::spin_mutex::scoped_lock lock; +#if ENABLE_LEGACY_OPENGL_REMOVAL + // to prevent sending data to gpu (in the main thread) while + // editing the model geometry + volume->model.disable_render(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + tbb::spin_mutex::scoped_lock lock; // Lock by ROII, so if the emplace_back() fails, the lock will be released. lock.acquire(new_volume_mutex); m_volumes.volumes.emplace_back(volume); @@ -6263,31 +6776,57 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c tbb::blocked_range(0, ctxt.layers.size(), grain_size), [&ctxt, &new_volume, is_selected_separate_extruder, this](const tbb::blocked_range& range) { GLVolumePtrs vols; - auto volume = [&ctxt, &vols](size_t layer_idx, int extruder, int feature) -> GLVolume& { - return *vols[ctxt.color_by_color_print()? +#if ENABLE_LEGACY_OPENGL_REMOVAL + std::vector geometries; + auto select_geometry = [&ctxt, &geometries](size_t layer_idx, int extruder, int feature) -> GLModel::Geometry& { + return geometries[ctxt.color_by_color_print() ? ctxt.color_print_color_idx_by_layer_idx_and_extruder(layer_idx, extruder) : - ctxt.color_by_tool() ? - std::min(ctxt.number_tools() - 1, std::max(extruder - 1, 0)) : - feature - ]; + ctxt.color_by_tool() ? + std::min(ctxt.number_tools() - 1, std::max(extruder - 1, 0)) : + feature + ]; }; +#else + auto volume = [&ctxt, &vols](size_t layer_idx, int extruder, int feature) -> GLVolume& { + return *vols[ctxt.color_by_color_print() ? + ctxt.color_print_color_idx_by_layer_idx_and_extruder(layer_idx, extruder) : + ctxt.color_by_tool() ? + std::min(ctxt.number_tools() - 1, std::max(extruder - 1, 0)) : + feature + ]; + }; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (ctxt.color_by_color_print() || ctxt.color_by_tool()) { - for (size_t i = 0; i < ctxt.number_tools(); ++i) + for (size_t i = 0; i < ctxt.number_tools(); ++i) { vols.emplace_back(new_volume(ctxt.color_tool(i))); +#if ENABLE_LEGACY_OPENGL_REMOVAL + geometries.emplace_back(GLModel::Geometry()); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + } } - else + else { vols = { new_volume(ctxt.color_perimeters()), new_volume(ctxt.color_infill()), new_volume(ctxt.color_support()) }; +#if ENABLE_LEGACY_OPENGL_REMOVAL + geometries = { GLModel::Geometry(), GLModel::Geometry(), GLModel::Geometry() }; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + } + +#if ENABLE_LEGACY_OPENGL_REMOVAL + assert(vols.size() == geometries.size()); + for (GLModel::Geometry& g : geometries) { + g.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + } +#else for (GLVolume *vol : vols) // Reserving number of vertices (3x position + 3x color) vol->indexed_vertex_array.reserve(VERTEX_BUFFER_RESERVE_SIZE / 6); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL for (size_t idx_layer = range.begin(); idx_layer < range.end(); ++ idx_layer) { const Layer *layer = ctxt.layers[idx_layer]; - if (is_selected_separate_extruder) - { + if (is_selected_separate_extruder) { bool at_least_one_has_correct_extruder = false; - for (const LayerRegion* layerm : layer->regions()) - { + for (const LayerRegion* layerm : layer->regions()) { if (layerm->slices.surfaces.empty()) continue; const PrintRegionConfig& cfg = layerm->region().config(); @@ -6302,17 +6841,27 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c continue; } - for (GLVolume *vol : vols) +#if ENABLE_LEGACY_OPENGL_REMOVAL + for (size_t i = 0; i < vols.size(); ++i) { + GLVolume* vol = vols[i]; + if (vol->print_zs.empty() || vol->print_zs.back() != layer->print_z) { + vol->print_zs.emplace_back(layer->print_z); + vol->offsets.emplace_back(geometries[i].indices_count()); + } + } +#else + for (GLVolume* vol : vols) if (vol->print_zs.empty() || vol->print_zs.back() != layer->print_z) { vol->print_zs.emplace_back(layer->print_z); vol->offsets.emplace_back(vol->indexed_vertex_array.quad_indices.size()); vol->offsets.emplace_back(vol->indexed_vertex_array.triangle_indices.size()); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + for (const PrintInstance &instance : *ctxt.shifted_copies) { const Point © = instance.shift; for (const LayerRegion *layerm : layer->regions()) { - if (is_selected_separate_extruder) - { + if (is_selected_separate_extruder) { const PrintRegionConfig& cfg = layerm->region().config(); if (cfg.perimeter_extruder.value != m_selected_extruder || cfg.infill_extruder.value != m_selected_extruder || @@ -6320,19 +6869,31 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c continue; } if (ctxt.has_perimeters) +#if ENABLE_LEGACY_OPENGL_REMOVAL + _3DScene::extrusionentity_to_verts(layerm->perimeters, float(layer->print_z), copy, + select_geometry(idx_layer, layerm->region().config().perimeter_extruder.value, 0)); +#else _3DScene::extrusionentity_to_verts(layerm->perimeters, float(layer->print_z), copy, volume(idx_layer, layerm->region().config().perimeter_extruder.value, 0)); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (ctxt.has_infill) { for (const ExtrusionEntity *ee : layerm->fills.entities) { // fill represents infill extrusions of a single island. const auto *fill = dynamic_cast(ee); if (! fill->entities.empty()) +#if ENABLE_LEGACY_OPENGL_REMOVAL + _3DScene::extrusionentity_to_verts(*fill, float(layer->print_z), copy, + select_geometry(idx_layer, is_solid_infill(fill->entities.front()->role()) ? + layerm->region().config().solid_infill_extruder : + layerm->region().config().infill_extruder, 1)); +#else _3DScene::extrusionentity_to_verts(*fill, float(layer->print_z), copy, volume(idx_layer, is_solid_infill(fill->entities.front()->role()) ? layerm->region().config().solid_infill_extruder : layerm->region().config().infill_extruder, 1)); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } } @@ -6340,28 +6901,50 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c const SupportLayer *support_layer = dynamic_cast(layer); if (support_layer) { for (const ExtrusionEntity *extrusion_entity : support_layer->support_fills.entities) +#if ENABLE_LEGACY_OPENGL_REMOVAL + _3DScene::extrusionentity_to_verts(extrusion_entity, float(layer->print_z), copy, + select_geometry(idx_layer, (extrusion_entity->role() == erSupportMaterial) ? + support_layer->object()->config().support_material_extruder : + support_layer->object()->config().support_material_interface_extruder, 2)); +#else _3DScene::extrusionentity_to_verts(extrusion_entity, float(layer->print_z), copy, volume(idx_layer, (extrusion_entity->role() == erSupportMaterial) ? support_layer->object()->config().support_material_extruder : support_layer->object()->config().support_material_interface_extruder, 2)); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } } // Ensure that no volume grows over the limits. If the volume is too large, allocate a new one. for (size_t i = 0; i < vols.size(); ++i) { GLVolume &vol = *vols[i]; - if (vol.indexed_vertex_array.vertices_and_normals_interleaved.size() > MAX_VERTEX_BUFFER_SIZE) { - vols[i] = new_volume(vol.color); - reserve_new_volume_finalize_old_volume(*vols[i], vol, false); - } +#if ENABLE_LEGACY_OPENGL_REMOVAL + if (geometries[i].vertices_size_bytes() > MAX_VERTEX_BUFFER_SIZE) { + vol.model.init_from(std::move(geometries[i])); +#else + if (vol.indexed_vertex_array.vertices_and_normals_interleaved.size() > MAX_VERTEX_BUFFER_SIZE) { +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + vols[i] = new_volume(vol.color); +#if !ENABLE_LEGACY_OPENGL_REMOVAL + reserve_new_volume_finalize_old_volume(*vols[i], vol, false); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL + } } } + +#if ENABLE_LEGACY_OPENGL_REMOVAL + for (size_t i = 0; i < vols.size(); ++i) { + if (!geometries[i].is_empty()) + vols[i]->model.init_from(std::move(geometries[i])); + } +#else for (GLVolume *vol : vols) // Ideally one would call vol->indexed_vertex_array.finalize() here to move the buffers to the OpenGL driver, // but this code runs in parallel and the OpenGL driver is not thread safe. vol->indexed_vertex_array.shrink_to_fit(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL }); BOOST_LOG_TRIVIAL(debug) << "Loading print object toolpaths in parallel - finalizing results" << m_volumes.log_memory_info() << log_memory_info(); @@ -6376,8 +6959,14 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c } for (size_t i = volumes_cnt_initial; i < m_volumes.volumes.size(); ++i) { GLVolume* v = m_volumes.volumes[i]; +#if ENABLE_LEGACY_OPENGL_REMOVAL + v->is_outside = !contains(build_volume, v->model); + // We are done editinig the model, now it can be sent to gpu + v->model.enable_render(); +#else v->is_outside = ! build_volume.all_paths_inside_vertices_and_normals_interleaved(v->indexed_vertex_array.vertices_and_normals_interleaved, v->indexed_vertex_array.bounding_box()); v->indexed_vertex_array.finalize_geometry(m_initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } BOOST_LOG_TRIVIAL(debug) << "Loading print object toolpaths in parallel - end" << m_volumes.log_memory_info() << log_memory_info(); @@ -6397,10 +6986,10 @@ void GLCanvas3D::_load_wipe_tower_toolpaths(const BuildVolume& build_volume, con struct Ctxt { - const Print *print; - const std::vector* tool_colors; - Vec2f wipe_tower_pos; - float wipe_tower_angle; + const Print *print; + const std::vector *tool_colors; + Vec2f wipe_tower_pos; + float wipe_tower_angle; static ColorRGBA color_support() { return ColorRGBA::GREENISH(); } @@ -6442,6 +7031,11 @@ void GLCanvas3D::_load_wipe_tower_toolpaths(const BuildVolume& build_volume, con auto new_volume = [this, &new_volume_mutex](const ColorRGBA& color) { auto *volume = new GLVolume(color); volume->is_extrusion_path = true; +#if ENABLE_LEGACY_OPENGL_REMOVAL + // to prevent sending data to gpu (in the main thread) while + // editing the model geometry + volume->model.disable_render(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL tbb::spin_mutex::scoped_lock lock; lock.acquire(new_volume_mutex); m_volumes.volumes.emplace_back(volume); @@ -6455,23 +7049,46 @@ void GLCanvas3D::_load_wipe_tower_toolpaths(const BuildVolume& build_volume, con [&ctxt, &new_volume](const tbb::blocked_range& range) { // Bounding box of this slab of a wipe tower. GLVolumePtrs vols; +#if ENABLE_LEGACY_OPENGL_REMOVAL + std::vector geometries; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (ctxt.color_by_tool()) { - for (size_t i = 0; i < ctxt.number_tools(); ++i) + for (size_t i = 0; i < ctxt.number_tools(); ++i) { vols.emplace_back(new_volume(ctxt.color_tool(i))); +#if ENABLE_LEGACY_OPENGL_REMOVAL + geometries.emplace_back(GLModel::Geometry()); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + } } - else + else { vols = { new_volume(ctxt.color_support()) }; +#if ENABLE_LEGACY_OPENGL_REMOVAL + geometries = { GLModel::Geometry() }; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + } + +#if ENABLE_LEGACY_OPENGL_REMOVAL + assert(vols.size() == geometries.size()); + for (GLModel::Geometry& g : geometries) { + g.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + } +#else for (GLVolume *volume : vols) // Reserving number of vertices (3x position + 3x color) volume->indexed_vertex_array.reserve(VERTEX_BUFFER_RESERVE_SIZE / 6); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL for (size_t idx_layer = range.begin(); idx_layer < range.end(); ++idx_layer) { const std::vector &layer = ctxt.tool_change(idx_layer); for (size_t i = 0; i < vols.size(); ++i) { GLVolume &vol = *vols[i]; if (vol.print_zs.empty() || vol.print_zs.back() != layer.front().print_z) { vol.print_zs.emplace_back(layer.front().print_z); +#if ENABLE_LEGACY_OPENGL_REMOVAL + vol.offsets.emplace_back(geometries[i].indices_count()); +#else vol.offsets.emplace_back(vol.indexed_vertex_array.quad_indices.size()); vol.offsets.emplace_back(vol.indexed_vertex_array.triangle_indices.size()); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } for (const WipeTower::ToolChangeResult &extrusions : layer) { @@ -6513,21 +7130,42 @@ void GLCanvas3D::_load_wipe_tower_toolpaths(const BuildVolume& build_volume, con e_prev = e; } + +#if ENABLE_LEGACY_OPENGL_REMOVAL + _3DScene::thick_lines_to_verts(lines, widths, heights, lines.front().a == lines.back().b, extrusions.print_z, + geometries[ctxt.volume_idx(e.tool, 0)]); +#else _3DScene::thick_lines_to_verts(lines, widths, heights, lines.front().a == lines.back().b, extrusions.print_z, *vols[ctxt.volume_idx(e.tool, 0)]); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } } for (size_t i = 0; i < vols.size(); ++i) { GLVolume &vol = *vols[i]; +#if ENABLE_LEGACY_OPENGL_REMOVAL + if (geometries[i].vertices_size_bytes() > MAX_VERTEX_BUFFER_SIZE) { + vol.model.init_from(std::move(geometries[i])); +#else if (vol.indexed_vertex_array.vertices_and_normals_interleaved.size() > MAX_VERTEX_BUFFER_SIZE) { +#endif // ENABLE_LEGACY_OPENGL_REMOVAL vols[i] = new_volume(vol.color); +#if !ENABLE_LEGACY_OPENGL_REMOVAL reserve_new_volume_finalize_old_volume(*vols[i], vol, false); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL } } + +#if ENABLE_LEGACY_OPENGL_REMOVAL + for (size_t i = 0; i < vols.size(); ++i) { + if (!geometries[i].is_empty()) + vols[i]->model.init_from(std::move(geometries[i])); + } +#else for (GLVolume *vol : vols) vol->indexed_vertex_array.shrink_to_fit(); - }); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + }); BOOST_LOG_TRIVIAL(debug) << "Loading wipe tower toolpaths in parallel - finalizing results" << m_volumes.log_memory_info() << log_memory_info(); // Remove empty volumes from the newly added volumes. @@ -6541,8 +7179,14 @@ void GLCanvas3D::_load_wipe_tower_toolpaths(const BuildVolume& build_volume, con } for (size_t i = volumes_cnt_initial; i < m_volumes.volumes.size(); ++i) { GLVolume* v = m_volumes.volumes[i]; +#if ENABLE_LEGACY_OPENGL_REMOVAL + v->is_outside = !contains(build_volume, v->model); + // We are done editinig the model, now it can be sent to gpu + v->model.enable_render(); +#else v->is_outside = ! build_volume.all_paths_inside_vertices_and_normals_interleaved(v->indexed_vertex_array.vertices_and_normals_interleaved, v->indexed_vertex_array.bounding_box()); v->indexed_vertex_array.finalize_geometry(m_initialized); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } BOOST_LOG_TRIVIAL(debug) << "Loading wipe tower toolpaths in parallel - end" << m_volumes.log_memory_info() << log_memory_info(); @@ -6566,11 +7210,21 @@ void GLCanvas3D::_load_sla_shells() m_volumes.volumes.emplace_back(new GLVolume(color)); GLVolume& v = *m_volumes.volumes.back(); #if ENABLE_SMOOTH_NORMALS +#if ENABLE_LEGACY_OPENGL_REMOVAL + v.model.init_from(mesh, true); +#else v.indexed_vertex_array.load_mesh(mesh, true); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#else +#if ENABLE_LEGACY_OPENGL_REMOVAL + v.model.init_from(mesh); #else v.indexed_vertex_array.load_mesh(mesh); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL #endif // ENABLE_SMOOTH_NORMALS +#if !ENABLE_LEGACY_OPENGL_REMOVAL v.indexed_vertex_array.finalize_geometry(m_initialized); +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL v.shader_outside_printer_detection_enabled = outside_printer_detection_enabled; v.composite_id.volume_id = volume_id; v.set_instance_offset(unscale(instance.shift.x(), instance.shift.y(), 0.0)); @@ -6685,7 +7339,7 @@ void GLCanvas3D::_update_selection_from_hover() bool ctrl_pressed = wxGetKeyState(WXK_CONTROL); if (m_hover_volume_idxs.empty()) { - if (!ctrl_pressed && (m_rectangle_selection.get_state() == GLSelectionRectangle::Select)) + if (!ctrl_pressed && m_rectangle_selection.get_state() == GLSelectionRectangle::EState::Select) m_selection.remove_all(); return; @@ -6702,7 +7356,10 @@ void GLCanvas3D::_update_selection_from_hover() } bool selection_changed = false; - if (state == GLSelectionRectangle::Select) { +#if ENABLE_NEW_RECTANGLE_SELECTION + if (!m_rectangle_selection.is_empty()) { +#endif // ENABLE_NEW_RECTANGLE_SELECTION + if (state == GLSelectionRectangle::EState::Select) { bool contains_all = true; for (int i : m_hover_volume_idxs) { if (!m_selection.contains_volume((unsigned int)i)) { @@ -6713,7 +7370,7 @@ void GLCanvas3D::_update_selection_from_hover() // the selection is going to be modified (Add) if (!contains_all) { - wxGetApp().plater()->take_snapshot(_(L("Selection-Add from rectangle")), UndoRedo::SnapshotType::Selection); + wxGetApp().plater()->take_snapshot(_L("Selection-Add from rectangle"), UndoRedo::SnapshotType::Selection); selection_changed = true; } } @@ -6728,21 +7385,24 @@ void GLCanvas3D::_update_selection_from_hover() // the selection is going to be modified (Remove) if (contains_any) { - wxGetApp().plater()->take_snapshot(_(L("Selection-Remove from rectangle")), UndoRedo::SnapshotType::Selection); + wxGetApp().plater()->take_snapshot(_L("Selection-Remove from rectangle"), UndoRedo::SnapshotType::Selection); selection_changed = true; } } +#if ENABLE_NEW_RECTANGLE_SELECTION + } +#endif // ENABLE_NEW_RECTANGLE_SELECTION if (!selection_changed) return; Plater::SuppressSnapshots suppress(wxGetApp().plater()); - if ((state == GLSelectionRectangle::Select) && !ctrl_pressed) + if (state == GLSelectionRectangle::EState::Select && !ctrl_pressed) m_selection.clear(); for (int i : m_hover_volume_idxs) { - if (state == GLSelectionRectangle::Select) { + if (state == GLSelectionRectangle::EState::Select) { if (hover_modifiers_only) { const GLVolume& v = *m_volumes.volumes[i]; m_selection.add_volume(v.object_idx(), v.volume_idx(), v.instance_idx(), false); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 93cd8f424..09659faea 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -239,18 +239,24 @@ class GLCanvas3D int last_object_id{ -1 }; float last_z{ 0.0f }; LayerHeightEditActionType last_action{ LAYER_HEIGHT_EDIT_ACTION_INCREASE }; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL struct Profile { GLModel baseline; GLModel profile; GLModel background; +#if ENABLE_GL_SHADERS_ATTRIBUTES + float old_canvas_width{ 0.0f }; +#else Rect old_bar_rect; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES std::vector old_layer_height_profile; +#if !ENABLE_GL_SHADERS_ATTRIBUTES bool dirty{ false }; +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES }; Profile m_profile; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL LayersEditing() = default; ~LayersEditing(); @@ -277,7 +283,9 @@ class GLCanvas3D static float get_cursor_z_relative(const GLCanvas3D& canvas); static bool bar_rect_contains(const GLCanvas3D& canvas, float x, float y); static Rect get_bar_rect_screen(const GLCanvas3D& canvas); +#if !ENABLE_GL_SHADERS_ATTRIBUTES static Rect get_bar_rect_viewport(const GLCanvas3D& canvas); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES static float get_overlay_window_width() { return LayersEditing::s_overlay_window_width; } float object_max_z() const { return m_object_max_z; } @@ -287,8 +295,13 @@ class GLCanvas3D private: bool is_initialized() const; void generate_layer_height_texture(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render_active_object_annotations(const GLCanvas3D& canvas); + void render_profile(const GLCanvas3D& canvas); +#else void render_active_object_annotations(const GLCanvas3D& canvas, const Rect& bar_rect); void render_profile(const Rect& bar_rect); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES void update_slicing_parameters(); static float thickness_bar_width(const GLCanvas3D &canvas); @@ -335,6 +348,16 @@ class GLCanvas3D struct SlaCap { +#if ENABLE_LEGACY_OPENGL_REMOVAL + struct Triangles + { + GLModel object; + GLModel supports; + }; + typedef std::map ObjectIdToModelsMap; + double z; + ObjectIdToModelsMap triangles; +#else struct Triangles { Pointf3s object; @@ -343,6 +366,7 @@ class GLCanvas3D typedef std::map ObjectIdToTrianglesMap; double z; ObjectIdToTrianglesMap triangles; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL SlaCap() { reset(); } void reset() { z = DBL_MAX; triangles.clear(); } @@ -473,7 +497,7 @@ private: std::array m_clipping_planes; ClippingPlane m_camera_clipping_plane; bool m_use_clipping_planes; - SlaCap m_sla_caps[2]; + std::array m_sla_caps; std::string m_sidebar_field; // when true renders an extra frame by not resetting m_dirty to false // see request_extra_frame() @@ -511,8 +535,6 @@ private: // I just don't want to do it now before a release (Lukas Matena 24.3.2019) bool m_render_sla_auxiliaries; - std::string m_color_by; - bool m_reload_delayed; #if ENABLE_RENDER_PICKING_PASS @@ -611,7 +633,7 @@ private: } m_gizmo_highlighter; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL #if ENABLE_SHOW_CAMERA_TARGET struct CameraTarget { @@ -622,7 +644,7 @@ private: CameraTarget m_camera_target; #endif // ENABLE_SHOW_CAMERA_TARGET GLModel m_background; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL public: explicit GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed); @@ -681,8 +703,6 @@ public: bool get_use_clipping_planes() const { return m_use_clipping_planes; } const std::array &get_clipping_planes() const { return m_clipping_planes; }; - void set_color_by(const std::string& value); - void refresh_camera_scene_box(); BoundingBoxf3 volumes_bounding_box() const; @@ -786,7 +806,6 @@ public: void do_move(const std::string& snapshot_type); void do_rotate(const std::string& snapshot_type); void do_scale(const std::string& snapshot_type); - void do_flatten(const Vec3d& normal, const std::string& snapshot_type); void do_mirror(const std::string& snapshot_type); void update_gizmos_on_off_state(); @@ -934,10 +953,18 @@ private: void _picking_pass(); void _rectangular_selection_picking_pass(); void _render_background(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + void _render_bed(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool show_axes); + void _render_bed_for_picking(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom); +#else void _render_bed(bool bottom, bool show_axes); void _render_bed_for_picking(bool bottom); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES void _render_objects(GLVolumeCollection::ERenderType type); void _render_gcode(); +#if ENABLE_SHOW_TOOLPATHS_COG + void _render_gcode_cog(); +#endif // ENABLE_SHOW_TOOLPATHS_COG void _render_selection(); void _render_sequential_clearance(); #if ENABLE_RENDER_SELECTION_CENTER diff --git a/src/slic3r/GUI/GLModel.cpp b/src/slic3r/GUI/GLModel.cpp index 4d3be069c..75998609b 100644 --- a/src/slic3r/GUI/GLModel.cpp +++ b/src/slic3r/GUI/GLModel.cpp @@ -4,20 +4,69 @@ #include "3DScene.hpp" #include "GUI_App.hpp" #include "GLShader.hpp" +#if ENABLE_GLMODEL_STATISTICS +#include "Plater.hpp" +#include "GLCanvas3D.hpp" +#endif // ENABLE_GLMODEL_STATISTICS #include "libslic3r/TriangleMesh.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/Polygon.hpp" +#if ENABLE_LEGACY_OPENGL_REMOVAL +#include "libslic3r/BuildVolume.hpp" +#include "libslic3r/Geometry/ConvexHull.hpp" +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + +#if ENABLE_GLMODEL_STATISTICS +#include +#endif // ENABLE_GLMODEL_STATISTICS #include #include +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_SMOOTH_NORMALS +#include +#include +#include +#endif // ENABLE_SMOOTH_NORMALS +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + #include namespace Slic3r { namespace GUI { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_SMOOTH_NORMALS +static void smooth_normals_corner(const TriangleMesh& mesh, std::vector& normals) +{ + using MapMatrixXfUnaligned = Eigen::Map>; + using MapMatrixXiUnaligned = Eigen::Map>; + + std::vector face_normals = its_face_normals(mesh.its); + + Eigen::MatrixXd vertices = MapMatrixXfUnaligned(mesh.its.vertices.front().data(), + Eigen::Index(mesh.its.vertices.size()), 3).cast(); + Eigen::MatrixXi indices = MapMatrixXiUnaligned(mesh.its.indices.front().data(), + Eigen::Index(mesh.its.indices.size()), 3); + Eigen::MatrixXd in_normals = MapMatrixXfUnaligned(face_normals.front().data(), + Eigen::Index(face_normals.size()), 3).cast(); + Eigen::MatrixXd out_normals; + + igl::per_corner_normals(vertices, indices, in_normals, 1.0, out_normals); + + normals = std::vector(mesh.its.vertices.size()); + for (size_t i = 0; i < mesh.its.indices.size(); ++i) { + for (size_t j = 0; j < 3; ++j) { + normals[mesh.its.indices[i][j]] = out_normals.row(i * 3 + j).cast(); + } + } +} +#endif // ENABLE_SMOOTH_NORMALS +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + +#if ENABLE_LEGACY_OPENGL_REMOVAL void GLModel::Geometry::add_vertex(const Vec2f& position) { assert(format.vertex_layout == EVertexLayout::P2); @@ -42,6 +91,16 @@ void GLModel::Geometry::add_vertex(const Vec3f& position) vertices.emplace_back(position.z()); } +void GLModel::Geometry::add_vertex(const Vec3f& position, const Vec2f& tex_coord) +{ + assert(format.vertex_layout == EVertexLayout::P3T2); + vertices.emplace_back(position.x()); + vertices.emplace_back(position.y()); + vertices.emplace_back(position.z()); + vertices.emplace_back(tex_coord.x()); + vertices.emplace_back(tex_coord.y()); +} + void GLModel::Geometry::add_vertex(const Vec3f& position, const Vec3f& normal) { assert(format.vertex_layout == EVertexLayout::P3N3); @@ -53,70 +112,22 @@ void GLModel::Geometry::add_vertex(const Vec3f& position, const Vec3f& normal) vertices.emplace_back(normal.z()); } -void GLModel::Geometry::add_ushort_index(unsigned short id) +void GLModel::Geometry::add_index(unsigned int id) { - if (format.index_type != EIndexType::USHORT) { - assert(false); - return; - } - indices.resize(indices.size() + sizeof(unsigned short)); - ::memcpy(indices.data() + indices.size() - sizeof(unsigned short), &id, sizeof(unsigned short)); + indices.emplace_back(id); } -void GLModel::Geometry::add_uint_index(unsigned int id) +void GLModel::Geometry::add_line(unsigned int id1, unsigned int id2) { - if (format.index_type != EIndexType::UINT) { - assert(false); - return; - } - indices.resize(indices.size() + sizeof(unsigned int)); - ::memcpy(indices.data() + indices.size() - sizeof(unsigned int), &id, sizeof(unsigned int)); + indices.emplace_back(id1); + indices.emplace_back(id2); } -void GLModel::Geometry::add_ushort_line(unsigned short id1, unsigned short id2) +void GLModel::Geometry::add_triangle(unsigned int id1, unsigned int id2, unsigned int id3) { - if (format.index_type != EIndexType::USHORT) { - assert(false); - return; - } - indices.resize(indices.size() + 2 * sizeof(unsigned short)); - ::memcpy(indices.data() + indices.size() - 2 * sizeof(unsigned short), &id1, sizeof(unsigned short)); - ::memcpy(indices.data() + indices.size() - sizeof(unsigned short), &id2, sizeof(unsigned short)); -} - -void GLModel::Geometry::add_uint_line(unsigned int id1, unsigned int id2) -{ - if (format.index_type != EIndexType::UINT) { - assert(false); - return; - } - indices.resize(indices.size() + 2 * sizeof(unsigned int)); - ::memcpy(indices.data() + indices.size() - 2 * sizeof(unsigned int), &id1, sizeof(unsigned int)); - ::memcpy(indices.data() + indices.size() - sizeof(unsigned int), &id2, sizeof(unsigned int)); -} - -void GLModel::Geometry::add_ushort_triangle(unsigned short id1, unsigned short id2, unsigned short id3) -{ - if (format.index_type != EIndexType::USHORT) { - assert(false); - return; - } - indices.resize(indices.size() + 3 * sizeof(unsigned short)); - ::memcpy(indices.data() + indices.size() - 3 * sizeof(unsigned short), &id1, sizeof(unsigned short)); - ::memcpy(indices.data() + indices.size() - 2 * sizeof(unsigned short), &id2, sizeof(unsigned short)); - ::memcpy(indices.data() + indices.size() - sizeof(unsigned short), &id3, sizeof(unsigned short)); -} - -void GLModel::Geometry::add_uint_triangle(unsigned int id1, unsigned int id2, unsigned int id3) -{ - if (format.index_type != EIndexType::UINT) { - assert(false); - return; - } - indices.resize(indices.size() + 3 * sizeof(unsigned int)); - ::memcpy(indices.data() + indices.size() - 3 * sizeof(unsigned int), &id1, sizeof(unsigned int)); - ::memcpy(indices.data() + indices.size() - 2 * sizeof(unsigned int), &id2, sizeof(unsigned int)); - ::memcpy(indices.data() + indices.size() - sizeof(unsigned int), &id3, sizeof(unsigned int)); + indices.emplace_back(id1); + indices.emplace_back(id2); + indices.emplace_back(id3); } Vec2f GLModel::Geometry::extract_position_2(size_t id) const @@ -187,39 +198,49 @@ Vec2f GLModel::Geometry::extract_tex_coord_2(size_t id) const return { *(start + 0), *(start + 1) }; } -unsigned int GLModel::Geometry::extract_uint_index(size_t id) const +#if ENABLE_LEGACY_OPENGL_REMOVAL +void GLModel::Geometry::set_vertex(size_t id, const Vec3f& position, const Vec3f& normal) { - if (format.index_type != EIndexType::UINT) { - assert(false); - return -1; + assert(format.vertex_layout == EVertexLayout::P3N3); + assert(id < vertices_count()); + if (id < vertices_count()) { + float* start = &vertices[id * vertex_stride_floats(format)]; + *(start + 0) = position.x(); + *(start + 1) = position.y(); + *(start + 2) = position.z(); + *(start + 3) = normal.x(); + *(start + 4) = normal.y(); + *(start + 5) = normal.z(); } +} +void GLModel::Geometry::set_index(size_t id, unsigned int index) +{ + assert(id < indices_count()); + if (id < indices_count()) + indices[id] = index; +} + +unsigned int GLModel::Geometry::extract_index(size_t id) const +{ if (indices_count() <= id) { assert(false); return -1; } - unsigned int ret = -1; - ::memcpy(&ret, indices.data() + id * index_stride_bytes(format), sizeof(unsigned int)); - return ret; + return indices[id]; } -unsigned short GLModel::Geometry::extract_ushort_index(size_t id) const +void GLModel::Geometry::remove_vertex(size_t id) { - if (format.index_type != EIndexType::USHORT) { - assert(false); - return -1; + assert(id < vertices_count()); + if (id < vertices_count()) { + const size_t stride = vertex_stride_floats(format); + std::vector::const_iterator it = vertices.begin() + id * stride; + vertices.erase(it, it + stride); } - - if (indices_count() <= id) { - assert(false); - return -1; - } - - unsigned short ret = -1; - ::memcpy(&ret, indices.data() + id * index_stride_bytes(format), sizeof(unsigned short)); - return ret; } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL size_t GLModel::Geometry::vertex_stride_floats(const Format& format) { @@ -228,6 +249,7 @@ size_t GLModel::Geometry::vertex_stride_floats(const Format& format) case EVertexLayout::P2: { return 2; } case EVertexLayout::P2T2: { return 4; } case EVertexLayout::P3: { return 3; } + case EVertexLayout::P3T2: { return 5; } case EVertexLayout::P3N3: { return 6; } default: { assert(false); return 0; } }; @@ -240,6 +262,7 @@ size_t GLModel::Geometry::position_stride_floats(const Format& format) case EVertexLayout::P2: case EVertexLayout::P2T2: { return 2; } case EVertexLayout::P3: + case EVertexLayout::P3T2: case EVertexLayout::P3N3: { return 3; } default: { assert(false); return 0; } }; @@ -252,6 +275,7 @@ size_t GLModel::Geometry::position_offset_floats(const Format& format) case EVertexLayout::P2: case EVertexLayout::P2T2: case EVertexLayout::P3: + case EVertexLayout::P3T2: case EVertexLayout::P3N3: { return 0; } default: { assert(false); return 0; } }; @@ -279,7 +303,8 @@ size_t GLModel::Geometry::tex_coord_stride_floats(const Format& format) { switch (format.vertex_layout) { - case EVertexLayout::P2T2: { return 2; } + case EVertexLayout::P2T2: + case EVertexLayout::P3T2: { return 2; } default: { assert(false); return 0; } }; } @@ -289,16 +314,18 @@ size_t GLModel::Geometry::tex_coord_offset_floats(const Format& format) switch (format.vertex_layout) { case EVertexLayout::P2T2: { return 2; } + case EVertexLayout::P3T2: { return 3; } default: { assert(false); return 0; } }; } -size_t GLModel::Geometry::index_stride_bytes(const Format& format) +size_t GLModel::Geometry::index_stride_bytes(const Geometry& data) { - switch (format.index_type) + switch (data.index_type) { case EIndexType::UINT: { return sizeof(unsigned int); } case EIndexType::USHORT: { return sizeof(unsigned short); } + case EIndexType::UBYTE: { return sizeof(unsigned char); } default: { assert(false); return 0; } }; } @@ -310,6 +337,7 @@ bool GLModel::Geometry::has_position(const Format& format) case EVertexLayout::P2: case EVertexLayout::P2T2: case EVertexLayout::P3: + case EVertexLayout::P3T2: case EVertexLayout::P3N3: { return true; } default: { assert(false); return false; } }; @@ -321,7 +349,8 @@ bool GLModel::Geometry::has_normal(const Format& format) { case EVertexLayout::P2: case EVertexLayout::P2T2: - case EVertexLayout::P3: { return false; } + case EVertexLayout::P3: + case EVertexLayout::P3T2: { return false; } case EVertexLayout::P3N3: { return true; } default: { assert(false); return false; } }; @@ -331,7 +360,8 @@ bool GLModel::Geometry::has_tex_coord(const Format& format) { switch (format.vertex_layout) { - case EVertexLayout::P2T2: { return true; } + case EVertexLayout::P2T2: + case EVertexLayout::P3T2: { return true; } case EVertexLayout::P2: case EVertexLayout::P3: case EVertexLayout::P3N3: { return false; } @@ -356,15 +386,19 @@ size_t GLModel::Geometry::indices_count() const } return ret; } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_GLMODEL_STATISTICS +GLModel::Statistics GLModel::s_statistics; +#endif // ENABLE_GLMODEL_STATISTICS + +#if ENABLE_LEGACY_OPENGL_REMOVAL void GLModel::init_from(Geometry&& data) #else void GLModel::init_from(const Geometry& data) -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL if (is_initialized()) { // call reset() if you want to reuse this model assert(false); @@ -424,21 +458,69 @@ void GLModel::init_from(const Geometry& data) send_to_gpu(rdata, vertices, indices); m_render_data.emplace_back(rdata); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_SMOOTH_NORMALS +void GLModel::init_from(const TriangleMesh& mesh, bool smooth_normals) +{ + if (smooth_normals) { + if (is_initialized()) { + // call reset() if you want to reuse this model + assert(false); + return; + } + + if (mesh.its.vertices.empty() || mesh.its.indices.empty()) { + assert(false); + return; + } + + std::vector normals; + smooth_normals_corner(mesh, normals); + + const indexed_triangle_set& its = mesh.its; + Geometry& data = m_render_data.geometry; + data.format = { Geometry::EPrimitiveType::Triangles, Geometry::EVertexLayout::P3N3, GLModel::Geometry::index_type(3 * its.indices.size()) }; + data.reserve_vertices(3 * its.indices.size()); + data.reserve_indices(3 * its.indices.size()); + + // vertices + for (size_t i = 0; i < its.vertices.size(); ++i) { + data.add_vertex(its.vertices[i], normals[i]); + } + + // indices + for (size_t i = 0; i < its.indices.size(); ++i) { + const stl_triangle_vertex_indices& idx = its.indices[i]; + if (data.format.index_type == GLModel::Geometry::EIndexType::USHORT) + data.add_ushort_triangle((unsigned short)idx(0), (unsigned short)idx(1), (unsigned short)idx(2)); + else + data.add_uint_triangle((unsigned int)idx(0), (unsigned int)idx(1), (unsigned int)idx(2)); + } + + // update bounding box + for (size_t i = 0; i < vertices_count(); ++i) { + m_bounding_box.merge(m_render_data.geometry.extract_position_3(i).cast()); + } + } + else + init_from(mesh.its); +} +#else void GLModel::init_from(const TriangleMesh& mesh) { init_from(mesh.its); } +#endif // ENABLE_SMOOTH_NORMALS void GLModel::init_from(const indexed_triangle_set& its) #else void GLModel::init_from(const indexed_triangle_set& its, const BoundingBoxf3 &bbox) -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL if (is_initialized()) { // call reset() if you want to reuse this model assert(false); @@ -451,26 +533,26 @@ void GLModel::init_from(const indexed_triangle_set& its, const BoundingBoxf3 &bb } Geometry& data = m_render_data.geometry; - data.format = { Geometry::EPrimitiveType::Triangles, Geometry::EVertexLayout::P3N3, Geometry::EIndexType::UINT }; - data.vertices.reserve(3 * its.indices.size() * Geometry::vertex_stride_floats(data.format)); - data.indices.reserve(3 * its.indices.size() * Geometry::index_stride_bytes(data.format)); + data.format = { Geometry::EPrimitiveType::Triangles, Geometry::EVertexLayout::P3N3 }; + data.reserve_vertices(3 * its.indices.size()); + data.reserve_indices(3 * its.indices.size()); // vertices + indices unsigned int vertices_counter = 0; for (uint32_t i = 0; i < its.indices.size(); ++i) { - stl_triangle_vertex_indices face = its.indices[i]; - stl_vertex vertex[3] = { its.vertices[face[0]], its.vertices[face[1]], its.vertices[face[2]] }; - stl_vertex n = face_normal_normalized(vertex); + const stl_triangle_vertex_indices face = its.indices[i]; + const stl_vertex vertex[3] = { its.vertices[face[0]], its.vertices[face[1]], its.vertices[face[2]] }; + const stl_vertex n = face_normal_normalized(vertex); for (size_t j = 0; j < 3; ++j) { data.add_vertex(vertex[j], n); } vertices_counter += 3; - data.add_uint_triangle(vertices_counter - 3, vertices_counter - 2, vertices_counter - 1); + data.add_triangle(vertices_counter - 3, vertices_counter - 2, vertices_counter - 1); } // update bounding box for (size_t i = 0; i < vertices_count(); ++i) { - m_bounding_box.merge(m_render_data.geometry.extract_position_3(i).cast()); + m_bounding_box.merge(data.extract_position_3(i).cast()); } #else if (!m_render_data.empty()) // call reset() if you want to reuse this model @@ -502,19 +584,19 @@ void GLModel::init_from(const indexed_triangle_set& its, const BoundingBoxf3 &bb send_to_gpu(data, vertices, indices); m_render_data.emplace_back(data); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL void GLModel::init_from(const indexed_triangle_set& its) { init_from(its, bounding_box(its)); } -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL void GLModel::init_from(const Polygons& polygons, float z) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL if (is_initialized()) { // call reset() if you want to reuse this model assert(false); @@ -527,15 +609,15 @@ void GLModel::init_from(const Polygons& polygons, float z) } Geometry& data = m_render_data.geometry; - data.format = { Geometry::EPrimitiveType::Lines, Geometry::EVertexLayout::P3, Geometry::EIndexType::UINT }; + data.format = { Geometry::EPrimitiveType::Lines, Geometry::EVertexLayout::P3 }; size_t segments_count = 0; for (const Polygon& polygon : polygons) { segments_count += polygon.points.size(); } - data.vertices.reserve(2 * segments_count * Geometry::vertex_stride_floats(data.format)); - data.indices.reserve(2 * segments_count * Geometry::index_stride_bytes(data.format)); + data.reserve_vertices(2 * segments_count); + data.reserve_indices(2 * segments_count); // vertices + indices unsigned int vertices_counter = 0; @@ -546,13 +628,13 @@ void GLModel::init_from(const Polygons& polygons, float z) data.add_vertex(Vec3f(unscale(p0.x()), unscale(p0.y()), z)); data.add_vertex(Vec3f(unscale(p1.x()), unscale(p1.y()), z)); vertices_counter += 2; - data.add_uint_line(vertices_counter - 2, vertices_counter - 1); + data.add_line(vertices_counter - 2, vertices_counter - 1); } } // update bounding box for (size_t i = 0; i < vertices_count(); ++i) { - m_bounding_box.merge(m_render_data.geometry.extract_position_3(i).cast()); + m_bounding_box.merge(data.extract_position_3(i).cast()); } #else auto append_polygon = [](const Polygon& polygon, float z, GUI::GLModel::Geometry& data) { @@ -578,7 +660,7 @@ void GLModel::init_from(const Polygons& polygons, float z) append_polygon(polygon, z, init_data); } init_from(init_data); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } bool GLModel::init_from_file(const std::string& filename) @@ -597,19 +679,19 @@ bool GLModel::init_from_file(const std::string& filename) return false; } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL init_from(model.mesh()); #else const TriangleMesh& mesh = model.mesh(); init_from(mesh.its, mesh.bounding_box()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_filename = filename; return true; } -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL void GLModel::set_color(int entity_id, const ColorRGBA& color) { for (size_t i = 0; i < m_render_data.size(); ++i) { @@ -623,25 +705,31 @@ ColorRGBA GLModel::get_color(size_t entity_id) const if (entity_id < 0 || entity_id >= m_render_data.size()) return ColorRGBA{}; return m_render_data[entity_id].color; } -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL void GLModel::reset() { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // release gpu memory if (m_render_data.ibo_id > 0) { glsafe(::glDeleteBuffers(1, &m_render_data.ibo_id)); m_render_data.ibo_id = 0; +#if ENABLE_GLMODEL_STATISTICS + s_statistics.gpu_memory.indices.current -= indices_size_bytes(); +#endif // ENABLE_GLMODEL_STATISTICS } if (m_render_data.vbo_id > 0) { glsafe(::glDeleteBuffers(1, &m_render_data.vbo_id)); m_render_data.vbo_id = 0; +#if ENABLE_GLMODEL_STATISTICS + s_statistics.gpu_memory.vertices.current -= vertices_size_bytes(); +#endif // ENABLE_GLMODEL_STATISTICS } m_render_data.vertices_count = 0; m_render_data.indices_count = 0; m_render_data.geometry.vertices = std::vector(); - m_render_data.geometry.indices = std::vector(); + m_render_data.geometry.indices = std::vector(); #else for (RenderData& data : m_render_data) { // release gpu memory @@ -652,12 +740,12 @@ void GLModel::reset() } m_render_data.clear(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_bounding_box = BoundingBoxf3(); m_filename = std::string(); } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL static GLenum get_primitive_mode(const GLModel::Geometry::Format& format) { switch (format.type) @@ -673,73 +761,27 @@ static GLenum get_primitive_mode(const GLModel::Geometry::Format& format) } } -static GLenum get_index_type(const GLModel::Geometry::Format& format) +static GLenum get_index_type(const GLModel::Geometry& data) { - switch (format.index_type) + switch (data.index_type) { default: case GLModel::Geometry::EIndexType::UINT: { return GL_UNSIGNED_INT; } case GLModel::Geometry::EIndexType::USHORT: { return GL_UNSIGNED_SHORT; } + case GLModel::Geometry::EIndexType::UBYTE: { return GL_UNSIGNED_BYTE; } } } void GLModel::render() #else void GLModel::render() const -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { +#if ENABLE_LEGACY_OPENGL_REMOVAL + render(std::make_pair(0, indices_count())); +#else GLShaderProgram* shader = wxGetApp().get_current_shader(); -#if ENABLE_GLBEGIN_GLEND_REMOVAL - if (shader == nullptr) - return; - - // sends data to gpu if not done yet - if (m_render_data.vbo_id == 0 || m_render_data.ibo_id == 0) { - if (m_render_data.geometry.vertices_count() > 0 && m_render_data.geometry.indices_count() > 0 && !send_to_gpu()) - return; - } - - const Geometry& data = m_render_data.geometry; - - GLenum mode = get_primitive_mode(data.format); - GLenum index_type = get_index_type(data.format); - - const size_t vertex_stride_bytes = Geometry::vertex_stride_bytes(data.format); - const bool position = Geometry::has_position(data.format); - const bool normal = Geometry::has_normal(data.format); - const bool tex_coord = Geometry::has_tex_coord(data.format); - - glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_render_data.vbo_id)); - - if (position) { - glsafe(::glVertexPointer(Geometry::position_stride_floats(data.format), GL_FLOAT, vertex_stride_bytes, (const void*)Geometry::position_offset_bytes(data.format))); - glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); - } - if (normal) { - glsafe(::glNormalPointer(GL_FLOAT, vertex_stride_bytes, (const void*)Geometry::normal_offset_bytes(data.format))); - glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); - } - if (tex_coord) { - glsafe(::glTexCoordPointer(Geometry::tex_coord_stride_floats(data.format), GL_FLOAT, vertex_stride_bytes, (const void*)Geometry::tex_coord_offset_bytes(data.format))); - glsafe(::glEnableClientState(GL_TEXTURE_COORD_ARRAY)); - } - - shader->set_uniform("uniform_color", data.color); - - glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_render_data.ibo_id)); - glsafe(::glDrawElements(mode, indices_count(), index_type, nullptr)); - glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); - - if (tex_coord) - glsafe(::glDisableClientState(GL_TEXTURE_COORD_ARRAY)); - if (normal) - glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); - if (position) - glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); - - glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); -#else for (const RenderData& data : m_render_data) { if (data.vbo_id == 0 || data.ibo_id == 0) continue; @@ -775,32 +817,136 @@ void GLModel::render() const glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_GLBEGIN_GLEND_REMOVAL -void GLModel::render_instanced(unsigned int instances_vbo, unsigned int instances_count) -#else -void GLModel::render_instanced(unsigned int instances_vbo, unsigned int instances_count) const -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +void GLModel::render(const std::pair& range) { - if (instances_vbo == 0) + if (m_render_disabled) + return; + + if (range.second == range.first) return; GLShaderProgram* shader = wxGetApp().get_current_shader(); -#if ENABLE_GLBEGIN_GLEND_REMOVAL + if (shader == nullptr) + return; + + // sends data to gpu if not done yet + if (m_render_data.vbo_id == 0 || m_render_data.ibo_id == 0) { + if (m_render_data.geometry.vertices_count() > 0 && m_render_data.geometry.indices_count() > 0 && !send_to_gpu()) + return; + } + + const Geometry& data = m_render_data.geometry; + + const GLenum mode = get_primitive_mode(data.format); + const GLenum index_type = get_index_type(data); + + const size_t vertex_stride_bytes = Geometry::vertex_stride_bytes(data.format); + const bool position = Geometry::has_position(data.format); + const bool normal = Geometry::has_normal(data.format); + const bool tex_coord = Geometry::has_tex_coord(data.format); + + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_render_data.vbo_id)); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + int position_id = -1; + int normal_id = -1; + int tex_coord_id = -1; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + + if (position) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + position_id = shader->get_attrib_location("v_position"); + if (position_id != -1) { + glsafe(::glVertexAttribPointer(position_id, Geometry::position_stride_floats(data.format), GL_FLOAT, GL_FALSE, vertex_stride_bytes, (const void*)Geometry::position_offset_bytes(data.format))); + glsafe(::glEnableVertexAttribArray(position_id)); + } +#else + glsafe(::glVertexPointer(Geometry::position_stride_floats(data.format), GL_FLOAT, vertex_stride_bytes, (const void*)Geometry::position_offset_bytes(data.format))); + glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + } + if (normal) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + normal_id = shader->get_attrib_location("v_normal"); + if (normal_id != -1) { + glsafe(::glVertexAttribPointer(normal_id, Geometry::normal_stride_floats(data.format), GL_FLOAT, GL_FALSE, vertex_stride_bytes, (const void*)Geometry::normal_offset_bytes(data.format))); + glsafe(::glEnableVertexAttribArray(normal_id)); + } +#else + glsafe(::glNormalPointer(GL_FLOAT, vertex_stride_bytes, (const void*)Geometry::normal_offset_bytes(data.format))); + glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + } + if (tex_coord) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + tex_coord_id = shader->get_attrib_location("v_tex_coord"); + if (tex_coord_id != -1) { + glsafe(::glVertexAttribPointer(tex_coord_id, Geometry::tex_coord_stride_floats(data.format), GL_FLOAT, GL_FALSE, vertex_stride_bytes, (const void*)Geometry::tex_coord_offset_bytes(data.format))); + glsafe(::glEnableVertexAttribArray(tex_coord_id)); + } +#else + glsafe(::glTexCoordPointer(Geometry::tex_coord_stride_floats(data.format), GL_FLOAT, vertex_stride_bytes, (const void*)Geometry::tex_coord_offset_bytes(data.format))); + glsafe(::glEnableClientState(GL_TEXTURE_COORD_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + } + + shader->set_uniform("uniform_color", data.color); + + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_render_data.ibo_id)); + glsafe(::glDrawElements(mode, range.second - range.first, index_type, (const void*)(range.first * Geometry::index_stride_bytes(data)))); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (tex_coord_id != -1) + glsafe(::glDisableVertexAttribArray(tex_coord_id)); + if (normal_id != -1) + glsafe(::glDisableVertexAttribArray(normal_id)); + if (position_id != -1) + glsafe(::glDisableVertexAttribArray(position_id)); +#else + if (tex_coord) + glsafe(::glDisableClientState(GL_TEXTURE_COORD_ARRAY)); + if (normal) + glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); + if (position) + glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + +#if ENABLE_GLMODEL_STATISTICS + ++s_statistics.render_calls; +#endif // ENABLE_GLMODEL_STATISTICS +} +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + +#if ENABLE_LEGACY_OPENGL_REMOVAL +void GLModel::render_instanced(unsigned int instances_vbo, unsigned int instances_count) +#else +void GLModel::render_instanced(unsigned int instances_vbo, unsigned int instances_count) const +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +{ + if (instances_vbo == 0 || instances_count == 0) + return; + + GLShaderProgram* shader = wxGetApp().get_current_shader(); +#if ENABLE_LEGACY_OPENGL_REMOVAL if (shader == nullptr || !boost::algorithm::iends_with(shader->get_name(), "_instanced")) return; // vertex attributes - GLint position_id = shader->get_attrib_location("v_position"); - GLint normal_id = shader->get_attrib_location("v_normal"); + const GLint position_id = shader->get_attrib_location("v_position"); + const GLint normal_id = shader->get_attrib_location("v_normal"); if (position_id == -1 || normal_id == -1) return; // instance attributes - GLint offset_id = shader->get_attrib_location("i_offset"); - GLint scales_id = shader->get_attrib_location("i_scales"); + const GLint offset_id = shader->get_attrib_location("i_offset"); + const GLint scales_id = shader->get_attrib_location("i_scales"); if (offset_id == -1 || scales_id == -1) return; @@ -820,15 +966,16 @@ void GLModel::render_instanced(unsigned int instances_vbo, unsigned int instance GLint offset_id = (shader != nullptr) ? shader->get_attrib_location("i_offset") : -1; GLint scales_id = (shader != nullptr) ? shader->get_attrib_location("i_scales") : -1; assert(offset_id != -1 && scales_id != -1); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glBindBuffer(GL_ARRAY_BUFFER, instances_vbo)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL - glsafe(::glVertexAttribPointer(offset_id, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (GLvoid*)0)); +#if ENABLE_LEGACY_OPENGL_REMOVAL + const size_t instance_stride = 5 * sizeof(float); + glsafe(::glVertexAttribPointer(offset_id, 3, GL_FLOAT, GL_FALSE, instance_stride, (const void*)0)); glsafe(::glEnableVertexAttribArray(offset_id)); glsafe(::glVertexAttribDivisor(offset_id, 1)); - glsafe(::glVertexAttribPointer(scales_id, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (GLvoid*)(3 * sizeof(float)))); + glsafe(::glVertexAttribPointer(scales_id, 2, GL_FLOAT, GL_FALSE, instance_stride, (const void*)(3 * sizeof(float)))); glsafe(::glEnableVertexAttribArray(scales_id)); glsafe(::glVertexAttribDivisor(scales_id, 1)); #else @@ -842,15 +989,13 @@ void GLModel::render_instanced(unsigned int instances_vbo, unsigned int instance glsafe(::glEnableVertexAttribArray(scales_id)); glsafe(::glVertexAttribDivisor(scales_id, 1)); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL const Geometry& data = m_render_data.geometry; - GLenum mode = get_primitive_mode(data.format); - GLenum index_type = get_index_type(data.format); - - shader->set_uniform("uniform_color", data.color); + const GLenum mode = get_primitive_mode(data.format); + const GLenum index_type = get_index_type(data); const size_t vertex_stride_bytes = Geometry::vertex_stride_bytes(data.format); const bool position = Geometry::has_position(data.format); @@ -859,15 +1004,17 @@ void GLModel::render_instanced(unsigned int instances_vbo, unsigned int instance glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_render_data.vbo_id)); if (position) { - glsafe(::glVertexAttribPointer(position_id, Geometry::position_stride_floats(data.format), GL_FLOAT, GL_FALSE, vertex_stride_bytes, (GLvoid*)Geometry::position_offset_bytes(data.format))); + glsafe(::glVertexAttribPointer(position_id, Geometry::position_stride_floats(data.format), GL_FLOAT, GL_FALSE, vertex_stride_bytes, (const void*)Geometry::position_offset_bytes(data.format))); glsafe(::glEnableVertexAttribArray(position_id)); } if (normal) { - glsafe(::glVertexAttribPointer(normal_id, Geometry::normal_stride_floats(data.format), GL_FLOAT, GL_FALSE, vertex_stride_bytes, (GLvoid*)Geometry::normal_offset_bytes(data.format))); + glsafe(::glVertexAttribPointer(normal_id, Geometry::normal_stride_floats(data.format), GL_FLOAT, GL_FALSE, vertex_stride_bytes, (const void*)Geometry::normal_offset_bytes(data.format))); glsafe(::glEnableVertexAttribArray(normal_id)); } + shader->set_uniform("uniform_color", data.color); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_render_data.ibo_id)); glsafe(::glDrawElementsInstanced(mode, indices_count(), index_type, (const void*)0, instances_count)); glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); @@ -923,12 +1070,16 @@ void GLModel::render_instanced(unsigned int instances_vbo, unsigned int instance glsafe(::glDisableVertexAttribArray(scales_id)); if (offset_id != -1) glsafe(::glDisableVertexAttribArray(offset_id)); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + +#if ENABLE_GLMODEL_STATISTICS + ++s_statistics.render_instanced_calls; +#endif // ENABLE_GLMODEL_STATISTICS } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL bool GLModel::send_to_gpu() { if (m_render_data.vbo_id > 0 || m_render_data.ibo_id > 0) { @@ -948,18 +1099,111 @@ bool GLModel::send_to_gpu() glsafe(::glBufferData(GL_ARRAY_BUFFER, data.vertices_size_bytes(), data.vertices.data(), GL_STATIC_DRAW)); glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); m_render_data.vertices_count = vertices_count(); +#if ENABLE_GLMODEL_STATISTICS + s_statistics.gpu_memory.vertices.current += data.vertices_size_bytes(); + s_statistics.gpu_memory.vertices.max = std::max(s_statistics.gpu_memory.vertices.current, s_statistics.gpu_memory.vertices.max); +#endif // ENABLE_GLMODEL_STATISTICS data.vertices = std::vector(); // indices glsafe(::glGenBuffers(1, &m_render_data.ibo_id)); glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_render_data.ibo_id)); - glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, data.indices_size_bytes(), data.indices.data(), GL_STATIC_DRAW)); - glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); - m_render_data.indices_count = indices_count(); - data.indices = std::vector(); + const size_t indices_count = data.indices.size(); + if (m_render_data.vertices_count <= 256) { + // convert indices to unsigned char to save gpu memory + std::vector reduced_indices(indices_count); + for (size_t i = 0; i < indices_count; ++i) { + reduced_indices[i] = (unsigned char)data.indices[i]; + } + data.index_type = Geometry::EIndexType::UBYTE; + glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices_count * sizeof(unsigned char), reduced_indices.data(), GL_STATIC_DRAW)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + } + else if (m_render_data.vertices_count <= 65536) { + // convert indices to unsigned short to save gpu memory + std::vector reduced_indices(indices_count); + for (size_t i = 0; i < data.indices.size(); ++i) { + reduced_indices[i] = (unsigned short)data.indices[i]; + } + data.index_type = Geometry::EIndexType::USHORT; + glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices_count * sizeof(unsigned short), reduced_indices.data(), GL_STATIC_DRAW)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + } + else { + data.index_type = Geometry::EIndexType::UINT; + glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, data.indices_size_bytes(), data.indices.data(), GL_STATIC_DRAW)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + } + m_render_data.indices_count = indices_count; +#if ENABLE_GLMODEL_STATISTICS + s_statistics.gpu_memory.indices.current += data.indices_size_bytes(); + s_statistics.gpu_memory.indices.max = std::max(s_statistics.gpu_memory.indices.current, s_statistics.gpu_memory.indices.max); +#endif // ENABLE_GLMODEL_STATISTICS + data.indices = std::vector(); return true; } + +#if ENABLE_GLMODEL_STATISTICS +void GLModel::render_statistics() +{ + static const float offset = 175.0f; + ImGuiWrapper& imgui = *wxGetApp().imgui(); + + auto add_memory = [&imgui](const std::string& label, int64_t memory) { + auto format_string = [memory](const std::string& units, float value) { + return std::to_string(memory) + " bytes (" + + Slic3r::float_to_string_decimal_point(float(memory) * value, 3) + + " " + units + ")"; + }; + + static const float kb = 1024.0f; + static const float inv_kb = 1.0f / kb; + static const float mb = 1024.0f * kb; + static const float inv_mb = 1.0f / mb; + static const float gb = 1024.0f * mb; + static const float inv_gb = 1.0f / gb; + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, label); + ImGui::SameLine(offset); + if (static_cast(memory) < mb) + imgui.text(format_string("KB", inv_kb)); + else if (static_cast(memory) < gb) + imgui.text(format_string("MB", inv_mb)); + else + imgui.text(format_string("GB", inv_gb)); + }; + + auto add_counter = [&imgui](const std::string& label, int64_t counter) { + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, label); + ImGui::SameLine(offset); + imgui.text(std::to_string(counter)); + }; + + imgui.set_next_window_pos(0.5f * wxGetApp().plater()->get_current_canvas3D()->get_canvas_size().get_width(), 0.0f, ImGuiCond_Once, 0.5f, 0.0f); + ImGui::SetNextWindowSizeConstraints({ 300.0f, 100.0f }, { 600.0f, 900.0f }); + imgui.begin(std::string("GLModel Statistics"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize); + ImGui::BringWindowToDisplayFront(ImGui::GetCurrentWindow()); + + add_counter(std::string("Render calls:"), s_statistics.render_calls); + add_counter(std::string("Render instanced calls:"), s_statistics.render_instanced_calls); + + if (ImGui::CollapsingHeader("GPU memory")) { + ImGui::Indent(10.0f); + if (ImGui::CollapsingHeader("Vertices")) { + add_memory(std::string("Current:"), s_statistics.gpu_memory.vertices.current); + add_memory(std::string("Max:"), s_statistics.gpu_memory.vertices.max); + } + if (ImGui::CollapsingHeader("Indices")) { + add_memory(std::string("Current:"), s_statistics.gpu_memory.indices.current); + add_memory(std::string("Max:"), s_statistics.gpu_memory.indices.max); + } + ImGui::Unindent(10.0f); + } + + imgui.end(); +} +#endif // ENABLE_GLMODEL_STATISTICS + #else void GLModel::send_to_gpu(RenderData& data, const std::vector& vertices, const std::vector& indices) { @@ -978,25 +1222,67 @@ void GLModel::send_to_gpu(RenderData& data, const std::vector& vertices, glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), indices.data(), GL_STATIC_DRAW)); glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_GLBEGIN_GLEND_REMOVAL -static void append_vertex(GLModel::Geometry& data, const Vec3f& position, const Vec3f& normal) +#if ENABLE_LEGACY_OPENGL_REMOVAL +template +inline bool all_vertices_inside(const GLModel::Geometry& geometry, Fn fn) { - data.add_vertex(position, normal); + const size_t position_stride_floats = geometry.position_stride_floats(geometry.format); + const size_t position_offset_floats = geometry.position_offset_floats(geometry.format); + assert(position_stride_floats == 3); + if (geometry.vertices.empty() || position_stride_floats != 3) + return false; + + for (auto it = geometry.vertices.begin(); it != geometry.vertices.end(); ) { + it += position_offset_floats; + if (!fn({ *it, *(it + 1), *(it + 2) })) + return false; + it += (geometry.vertex_stride_floats(geometry.format) - position_offset_floats - position_stride_floats); + } + return true; } -static void append_triangle(GLModel::Geometry& data, unsigned short v1, unsigned short v2, unsigned short v3) +bool contains(const BuildVolume& volume, const GLModel& model, bool ignore_bottom) { - data.add_ushort_index(v1); - data.add_ushort_index(v2); - data.add_ushort_index(v3); -} -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL + static constexpr const double epsilon = BuildVolume::BedEpsilon; + switch (volume.type()) { + case BuildVolume::Type::Rectangle: + { + BoundingBox3Base build_volume = volume.bounding_volume().inflated(epsilon); + if (volume.max_print_height() == 0.0) + build_volume.max.z() = std::numeric_limits::max(); + if (ignore_bottom) + build_volume.min.z() = -std::numeric_limits::max(); + const BoundingBoxf3& model_box = model.get_bounding_box(); + return build_volume.contains(model_box.min) && build_volume.contains(model_box.max); + } + case BuildVolume::Type::Circle: + { + const Geometry::Circled& circle = volume.circle(); + const Vec2f c = unscaled(circle.center); + const float r = unscaled(circle.radius) + float(epsilon); + const float r2 = sqr(r); + return volume.max_print_height() == 0.0 ? + all_vertices_inside(model.get_geometry(), [c, r2](const Vec3f& p) { return (to_2d(p) - c).squaredNorm() <= r2; }) : -GLModel::Geometry stilized_arrow(unsigned short resolution, float tip_radius, float tip_height, float stem_radius, float stem_height) + all_vertices_inside(model.get_geometry(), [c, r2, z = volume.max_print_height() + epsilon](const Vec3f& p) { return (to_2d(p) - c).squaredNorm() <= r2 && p.z() <= z; }); + } + case BuildVolume::Type::Convex: + //FIXME doing test on convex hull until we learn to do test on non-convex polygons efficiently. + case BuildVolume::Type::Custom: + return volume.max_print_height() == 0.0 ? + all_vertices_inside(model.get_geometry(), [&volume](const Vec3f& p) { return Geometry::inside_convex_polygon(volume.top_bottom_convex_hull_decomposition_bed(), to_2d(p).cast()); }) : + all_vertices_inside(model.get_geometry(), [&volume, z = volume.max_print_height() + epsilon](const Vec3f& p) { return Geometry::inside_convex_polygon(volume.top_bottom_convex_hull_decomposition_bed(), to_2d(p).cast()) && p.z() <= z; }); + default: + return true; + } +} +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + +GLModel::Geometry stilized_arrow(unsigned int resolution, float tip_radius, float tip_height, float stem_radius, float stem_height) { -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL auto append_vertex = [](GLModel::Geometry::Entity& entity, const Vec3f& position, const Vec3f& normal) { entity.positions.emplace_back(position); entity.normals.emplace_back(normal); @@ -1006,28 +1292,25 @@ GLModel::Geometry stilized_arrow(unsigned short resolution, float tip_radius, fl entity.indices.emplace_back(v2); entity.indices.emplace_back(v3); }; -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL - resolution = std::max(4, resolution); -#if ENABLE_GLBEGIN_GLEND_REMOVAL - resolution = std::min(10922, resolution); // ensure no unsigned short overflow of indices -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL + resolution = std::max(4, resolution); GLModel::Geometry data; -#if ENABLE_GLBEGIN_GLEND_REMOVAL - data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3, GLModel::Geometry::EIndexType::USHORT }; - data.vertices.reserve((6 * resolution + 2) * GLModel::Geometry::vertex_stride_floats(data.format)); - data.indices.reserve((6 * resolution * 3) * GLModel::Geometry::index_stride_bytes(data.format)); +#if ENABLE_LEGACY_OPENGL_REMOVAL + data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + data.reserve_vertices(6 * resolution + 2); + data.reserve_indices(6 * resolution * 3); #else GLModel::Geometry::Entity entity; entity.type = GLModel::EPrimitiveType::Triangles; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL const float angle_step = 2.0f * float(PI) / float(resolution); std::vector cosines(resolution); std::vector sines(resolution); - for (unsigned short i = 0; i < resolution; ++i) { + for (unsigned int i = 0; i < resolution; ++i) { const float angle = angle_step * float(i); cosines[i] = ::cos(angle); sines[i] = -::sin(angle); @@ -1036,64 +1319,64 @@ GLModel::Geometry stilized_arrow(unsigned short resolution, float tip_radius, fl const float total_height = tip_height + stem_height; // tip vertices/normals -#if ENABLE_GLBEGIN_GLEND_REMOVAL - append_vertex(data, { 0.0f, 0.0f, total_height }, Vec3f::UnitZ()); - for (unsigned short i = 0; i < resolution; ++i) { - append_vertex(data, { tip_radius * sines[i], tip_radius * cosines[i], stem_height }, { sines[i], cosines[i], 0.0f }); +#if ENABLE_LEGACY_OPENGL_REMOVAL + data.add_vertex(Vec3f(0.0f, 0.0f, total_height), (Vec3f)Vec3f::UnitZ()); + for (unsigned int i = 0; i < resolution; ++i) { + data.add_vertex(Vec3f(tip_radius * sines[i], tip_radius * cosines[i], stem_height), Vec3f(sines[i], cosines[i], 0.0f)); } // tip triangles - for (unsigned short i = 0; i < resolution; ++i) { - const unsigned short v3 = (i < resolution - 1) ? i + 2 : 1; - append_triangle(data, 0, i + 1, v3); + for (unsigned int i = 0; i < resolution; ++i) { + const unsigned int v3 = (i < resolution - 1) ? i + 2 : 1; + data.add_triangle(0, i + 1, v3); } // tip cap outer perimeter vertices - for (unsigned short i = 0; i < resolution; ++i) { - append_vertex(data, { tip_radius * sines[i], tip_radius * cosines[i], stem_height }, -Vec3f::UnitZ()); + for (unsigned int i = 0; i < resolution; ++i) { + data.add_vertex(Vec3f(tip_radius * sines[i], tip_radius * cosines[i], stem_height), (Vec3f)(-Vec3f::UnitZ())); } // tip cap inner perimeter vertices - for (unsigned short i = 0; i < resolution; ++i) { - append_vertex(data, { stem_radius * sines[i], stem_radius * cosines[i], stem_height }, -Vec3f::UnitZ()); + for (unsigned int i = 0; i < resolution; ++i) { + data.add_vertex(Vec3f(stem_radius * sines[i], stem_radius * cosines[i], stem_height), (Vec3f)(-Vec3f::UnitZ())); } // tip cap triangles - for (unsigned short i = 0; i < resolution; ++i) { - const unsigned short v2 = (i < resolution - 1) ? i + resolution + 2 : resolution + 1; - const unsigned short v3 = (i < resolution - 1) ? i + 2 * resolution + 2 : 2 * resolution + 1; - append_triangle(data, i + resolution + 1, v3, v2); - append_triangle(data, i + resolution + 1, i + 2 * resolution + 1, v3); + for (unsigned int i = 0; i < resolution; ++i) { + const unsigned int v2 = (i < resolution - 1) ? i + resolution + 2 : resolution + 1; + const unsigned int v3 = (i < resolution - 1) ? i + 2 * resolution + 2 : 2 * resolution + 1; + data.add_triangle(i + resolution + 1, v3, v2); + data.add_triangle(i + resolution + 1, i + 2 * resolution + 1, v3); } // stem bottom vertices - for (unsigned short i = 0; i < resolution; ++i) { - append_vertex(data, { stem_radius * sines[i], stem_radius * cosines[i], stem_height }, { sines[i], cosines[i], 0.0f }); + for (unsigned int i = 0; i < resolution; ++i) { + data.add_vertex(Vec3f(stem_radius * sines[i], stem_radius * cosines[i], stem_height), Vec3f(sines[i], cosines[i], 0.0f)); } // stem top vertices - for (unsigned short i = 0; i < resolution; ++i) { - append_vertex(data, { stem_radius * sines[i], stem_radius * cosines[i], 0.0f }, { sines[i], cosines[i], 0.0f }); + for (unsigned int i = 0; i < resolution; ++i) { + data.add_vertex(Vec3f(stem_radius * sines[i], stem_radius * cosines[i], 0.0f), Vec3f(sines[i], cosines[i], 0.0f)); } // stem triangles - for (unsigned short i = 0; i < resolution; ++i) { - const unsigned short v2 = (i < resolution - 1) ? i + 3 * resolution + 2 : 3 * resolution + 1; - const unsigned short v3 = (i < resolution - 1) ? i + 4 * resolution + 2 : 4 * resolution + 1; - append_triangle(data, i + 3 * resolution + 1, v3, v2); - append_triangle(data, i + 3 * resolution + 1, i + 4 * resolution + 1, v3); + for (unsigned int i = 0; i < resolution; ++i) { + const unsigned int v2 = (i < resolution - 1) ? i + 3 * resolution + 2 : 3 * resolution + 1; + const unsigned int v3 = (i < resolution - 1) ? i + 4 * resolution + 2 : 4 * resolution + 1; + data.add_triangle(i + 3 * resolution + 1, v3, v2); + data.add_triangle(i + 3 * resolution + 1, i + 4 * resolution + 1, v3); } // stem cap vertices - append_vertex(data, Vec3f::Zero(), -Vec3f::UnitZ()); - for (unsigned short i = 0; i < resolution; ++i) { - append_vertex(data, { stem_radius * sines[i], stem_radius * cosines[i], 0.0f }, -Vec3f::UnitZ()); + data.add_vertex((Vec3f)Vec3f::Zero(), (Vec3f)(-Vec3f::UnitZ())); + for (unsigned int i = 0; i < resolution; ++i) { + data.add_vertex(Vec3f(stem_radius * sines[i], stem_radius * cosines[i], 0.0f), (Vec3f)(-Vec3f::UnitZ())); } // stem cap triangles - for (unsigned short i = 0; i < resolution; ++i) { - const unsigned short v3 = (i < resolution - 1) ? i + 5 * resolution + 3 : 5 * resolution + 2; - append_triangle(data, 5 * resolution + 1, v3, i + 5 * resolution + 2); + for (unsigned int i = 0; i < resolution; ++i) { + const unsigned int v3 = (i < resolution - 1) ? i + 5 * resolution + 3 : 5 * resolution + 2; + data.add_triangle(5 * resolution + 1, v3, i + 5 * resolution + 2); } #else append_vertex(entity, { 0.0f, 0.0f, total_height }, Vec3f::UnitZ()); @@ -1156,13 +1439,14 @@ GLModel::Geometry stilized_arrow(unsigned short resolution, float tip_radius, fl } data.entities.emplace_back(entity); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + return data; } -GLModel::Geometry circular_arrow(unsigned short resolution, float radius, float tip_height, float tip_width, float stem_width, float thickness) +GLModel::Geometry circular_arrow(unsigned int resolution, float radius, float tip_height, float tip_width, float stem_width, float thickness) { -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL auto append_vertex = [](GLModel::Geometry::Entity& entity, const Vec3f& position, const Vec3f& normal) { entity.positions.emplace_back(position); entity.normals.emplace_back(normal); @@ -1172,22 +1456,19 @@ GLModel::Geometry circular_arrow(unsigned short resolution, float radius, float entity.indices.emplace_back(v2); entity.indices.emplace_back(v3); }; -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL - resolution = std::max(2, resolution); -#if ENABLE_GLBEGIN_GLEND_REMOVAL - resolution = std::min(8188, resolution); // ensure no unsigned short overflow of indices -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL + resolution = std::max(2, resolution); GLModel::Geometry data; -#if ENABLE_GLBEGIN_GLEND_REMOVAL - data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3, GLModel::Geometry::EIndexType::USHORT }; - data.vertices.reserve((8 * (resolution + 1) + 30) * GLModel::Geometry::vertex_stride_floats(data.format)); - data.indices.reserve(((8 * resolution + 16) * 3) * GLModel::Geometry::index_stride_bytes(data.format)); +#if ENABLE_LEGACY_OPENGL_REMOVAL + data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + data.reserve_vertices(8 * (resolution + 1) + 30); + data.reserve_indices((8 * resolution + 16) * 3); #else GLModel::Geometry::Entity entity; entity.type = GLModel::EPrimitiveType::Triangles; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL const float half_thickness = 0.5f * thickness; const float half_stem_width = 0.5f * stem_width; @@ -1197,149 +1478,149 @@ GLModel::Geometry circular_arrow(unsigned short resolution, float radius, float const float inner_radius = radius - half_stem_width; const float step_angle = 0.5f * float(PI) / float(resolution); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // tip // top face vertices - append_vertex(data, { 0.0f, outer_radius, half_thickness }, Vec3f::UnitZ()); - append_vertex(data, { 0.0f, radius + half_tip_width, half_thickness }, Vec3f::UnitZ()); - append_vertex(data, { -tip_height, radius, half_thickness }, Vec3f::UnitZ()); - append_vertex(data, { 0.0f, radius - half_tip_width, half_thickness }, Vec3f::UnitZ()); - append_vertex(data, { 0.0f, inner_radius, half_thickness }, Vec3f::UnitZ()); + data.add_vertex(Vec3f(0.0f, outer_radius, half_thickness), (Vec3f)Vec3f::UnitZ()); + data.add_vertex(Vec3f(0.0f, radius + half_tip_width, half_thickness), (Vec3f)Vec3f::UnitZ()); + data.add_vertex(Vec3f(-tip_height, radius, half_thickness), (Vec3f)Vec3f::UnitZ()); + data.add_vertex(Vec3f(0.0f, radius - half_tip_width, half_thickness), (Vec3f)Vec3f::UnitZ()); + data.add_vertex(Vec3f(0.0f, inner_radius, half_thickness), (Vec3f)Vec3f::UnitZ()); // top face triangles - append_triangle(data, 0, 1, 2); - append_triangle(data, 0, 2, 4); - append_triangle(data, 4, 2, 3); + data.add_triangle(0, 1, 2); + data.add_triangle(0, 2, 4); + data.add_triangle(4, 2, 3); // bottom face vertices - append_vertex(data, { 0.0f, outer_radius, -half_thickness }, -Vec3f::UnitZ()); - append_vertex(data, { 0.0f, radius + half_tip_width, -half_thickness }, -Vec3f::UnitZ()); - append_vertex(data, { -tip_height, radius, -half_thickness }, -Vec3f::UnitZ()); - append_vertex(data, { 0.0f, radius - half_tip_width, -half_thickness }, -Vec3f::UnitZ()); - append_vertex(data, { 0.0f, inner_radius, -half_thickness }, -Vec3f::UnitZ()); + data.add_vertex(Vec3f(0.0f, outer_radius, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); + data.add_vertex(Vec3f(0.0f, radius + half_tip_width, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); + data.add_vertex(Vec3f(-tip_height, radius, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); + data.add_vertex(Vec3f(0.0f, radius - half_tip_width, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); + data.add_vertex(Vec3f(0.0f, inner_radius, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); // bottom face triangles - append_triangle(data, 5, 7, 6); - append_triangle(data, 5, 9, 7); - append_triangle(data, 9, 8, 7); + data.add_triangle(5, 7, 6); + data.add_triangle(5, 9, 7); + data.add_triangle(9, 8, 7); // side faces vertices - append_vertex(data, { 0.0f, outer_radius, -half_thickness }, Vec3f::UnitX()); - append_vertex(data, { 0.0f, radius + half_tip_width, -half_thickness }, Vec3f::UnitX()); - append_vertex(data, { 0.0f, outer_radius, half_thickness }, Vec3f::UnitX()); - append_vertex(data, { 0.0f, radius + half_tip_width, half_thickness }, Vec3f::UnitX()); + data.add_vertex(Vec3f(0.0f, outer_radius, -half_thickness), (Vec3f)Vec3f::UnitX()); + data.add_vertex(Vec3f(0.0f, radius + half_tip_width, -half_thickness), (Vec3f)Vec3f::UnitX()); + data.add_vertex(Vec3f(0.0f, outer_radius, half_thickness), (Vec3f)Vec3f::UnitX()); + data.add_vertex(Vec3f(0.0f, radius + half_tip_width, half_thickness), (Vec3f)Vec3f::UnitX()); Vec3f normal(-half_tip_width, tip_height, 0.0f); normal.normalize(); - append_vertex(data, { 0.0f, radius + half_tip_width, -half_thickness }, normal); - append_vertex(data, { -tip_height, radius, -half_thickness }, normal); - append_vertex(data, { 0.0f, radius + half_tip_width, half_thickness }, normal); - append_vertex(data, { -tip_height, radius, half_thickness }, normal); + data.add_vertex(Vec3f(0.0f, radius + half_tip_width, -half_thickness), normal); + data.add_vertex(Vec3f(-tip_height, radius, -half_thickness), normal); + data.add_vertex(Vec3f(0.0f, radius + half_tip_width, half_thickness), normal); + data.add_vertex(Vec3f(-tip_height, radius, half_thickness), normal); normal = { -half_tip_width, -tip_height, 0.0f }; normal.normalize(); - append_vertex(data, { -tip_height, radius, -half_thickness }, normal); - append_vertex(data, { 0.0f, radius - half_tip_width, -half_thickness }, normal); - append_vertex(data, { -tip_height, radius, half_thickness }, normal); - append_vertex(data, { 0.0f, radius - half_tip_width, half_thickness }, normal); + data.add_vertex(Vec3f(-tip_height, radius, -half_thickness), normal); + data.add_vertex(Vec3f(0.0f, radius - half_tip_width, -half_thickness), normal); + data.add_vertex(Vec3f(-tip_height, radius, half_thickness), normal); + data.add_vertex(Vec3f(0.0f, radius - half_tip_width, half_thickness), normal); - append_vertex(data, { 0.0f, radius - half_tip_width, -half_thickness }, Vec3f::UnitX()); - append_vertex(data, { 0.0f, inner_radius, -half_thickness }, Vec3f::UnitX()); - append_vertex(data, { 0.0f, radius - half_tip_width, half_thickness }, Vec3f::UnitX()); - append_vertex(data, { 0.0f, inner_radius, half_thickness }, Vec3f::UnitX()); + data.add_vertex(Vec3f(0.0f, radius - half_tip_width, -half_thickness), (Vec3f)Vec3f::UnitX()); + data.add_vertex(Vec3f(0.0f, inner_radius, -half_thickness), (Vec3f)Vec3f::UnitX()); + data.add_vertex(Vec3f(0.0f, radius - half_tip_width, half_thickness), (Vec3f)Vec3f::UnitX()); + data.add_vertex(Vec3f(0.0f, inner_radius, half_thickness), (Vec3f)Vec3f::UnitX()); // side face triangles - for (unsigned short i = 0; i < 4; ++i) { - const unsigned short ii = i * 4; - append_triangle(data, 10 + ii, 11 + ii, 13 + ii); - append_triangle(data, 10 + ii, 13 + ii, 12 + ii); + for (unsigned int i = 0; i < 4; ++i) { + const unsigned int ii = i * 4; + data.add_triangle(10 + ii, 11 + ii, 13 + ii); + data.add_triangle(10 + ii, 13 + ii, 12 + ii); } // stem // top face vertices - for (unsigned short i = 0; i <= resolution; ++i) { + for (unsigned int i = 0; i <= resolution; ++i) { const float angle = float(i) * step_angle; - append_vertex(data, { inner_radius * ::sin(angle), inner_radius * ::cos(angle), half_thickness }, Vec3f::UnitZ()); + data.add_vertex(Vec3f(inner_radius * ::sin(angle), inner_radius * ::cos(angle), half_thickness), (Vec3f)Vec3f::UnitZ()); } - for (unsigned short i = 0; i <= resolution; ++i) { + for (unsigned int i = 0; i <= resolution; ++i) { const float angle = float(i) * step_angle; - append_vertex(data, { outer_radius * ::sin(angle), outer_radius * ::cos(angle), half_thickness }, Vec3f::UnitZ()); + data.add_vertex(Vec3f(outer_radius * ::sin(angle), outer_radius * ::cos(angle), half_thickness), (Vec3f)Vec3f::UnitZ()); } // top face triangles - for (unsigned short i = 0; i < resolution; ++i) { - append_triangle(data, 26 + i, 27 + i, 27 + resolution + i); - append_triangle(data, 27 + i, 28 + resolution + i, 27 + resolution + i); + for (unsigned int i = 0; i < resolution; ++i) { + data.add_triangle(26 + i, 27 + i, 27 + resolution + i); + data.add_triangle(27 + i, 28 + resolution + i, 27 + resolution + i); } // bottom face vertices - for (unsigned short i = 0; i <= resolution; ++i) { + for (unsigned int i = 0; i <= resolution; ++i) { const float angle = float(i) * step_angle; - append_vertex(data, { inner_radius * ::sin(angle), inner_radius * ::cos(angle), -half_thickness }, -Vec3f::UnitZ()); + data.add_vertex(Vec3f(inner_radius * ::sin(angle), inner_radius * ::cos(angle), -half_thickness), (Vec3f)(-Vec3f::UnitZ())); } - for (unsigned short i = 0; i <= resolution; ++i) { + for (unsigned int i = 0; i <= resolution; ++i) { const float angle = float(i) * step_angle; - append_vertex(data, { outer_radius * ::sin(angle), outer_radius * ::cos(angle), -half_thickness }, -Vec3f::UnitZ()); + data.add_vertex(Vec3f(outer_radius * ::sin(angle), outer_radius * ::cos(angle), -half_thickness), (Vec3f)(-Vec3f::UnitZ())); } // bottom face triangles - for (unsigned short i = 0; i < resolution; ++i) { - append_triangle(data, 28 + 2 * resolution + i, 29 + 3 * resolution + i, 29 + 2 * resolution + i); - append_triangle(data, 29 + 2 * resolution + i, 29 + 3 * resolution + i, 30 + 3 * resolution + i); + for (unsigned int i = 0; i < resolution; ++i) { + data.add_triangle(28 + 2 * resolution + i, 29 + 3 * resolution + i, 29 + 2 * resolution + i); + data.add_triangle(29 + 2 * resolution + i, 29 + 3 * resolution + i, 30 + 3 * resolution + i); } // side faces vertices and triangles - for (unsigned short i = 0; i <= resolution; ++i) { + for (unsigned int i = 0; i <= resolution; ++i) { const float angle = float(i) * step_angle; const float c = ::cos(angle); const float s = ::sin(angle); - append_vertex(data, { inner_radius * s, inner_radius * c, -half_thickness }, { -s, -c, 0.0f }); + data.add_vertex(Vec3f(inner_radius * s, inner_radius * c, -half_thickness), Vec3f(-s, -c, 0.0f)); } - for (unsigned short i = 0; i <= resolution; ++i) { + for (unsigned int i = 0; i <= resolution; ++i) { const float angle = float(i) * step_angle; const float c = ::cos(angle); const float s = ::sin(angle); - append_vertex(data, { inner_radius * s, inner_radius * c, half_thickness }, { -s, -c, 0.0f }); + data.add_vertex(Vec3f(inner_radius * s, inner_radius * c, half_thickness), Vec3f(-s, -c, 0.0f)); } - unsigned short first_id = 26 + 4 * (resolution + 1); - for (unsigned short i = 0; i < resolution; ++i) { - const unsigned short ii = first_id + i; - append_triangle(data, ii, ii + 1, ii + resolution + 2); - append_triangle(data, ii, ii + resolution + 2, ii + resolution + 1); + unsigned int first_id = 26 + 4 * (resolution + 1); + for (unsigned int i = 0; i < resolution; ++i) { + const unsigned int ii = first_id + i; + data.add_triangle(ii, ii + 1, ii + resolution + 2); + data.add_triangle(ii, ii + resolution + 2, ii + resolution + 1); } - append_vertex(data, { inner_radius, 0.0f, -half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { outer_radius, 0.0f, -half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { inner_radius, 0.0f, half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { outer_radius, 0.0f, half_thickness }, -Vec3f::UnitY()); + data.add_vertex(Vec3f(inner_radius, 0.0f, -half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(outer_radius, 0.0f, -half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(inner_radius, 0.0f, half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(outer_radius, 0.0f, half_thickness), (Vec3f)(-Vec3f::UnitY())); first_id = 26 + 6 * (resolution + 1); - append_triangle(data, first_id, first_id + 1, first_id + 3); - append_triangle(data, first_id, first_id + 3, first_id + 2); + data.add_triangle(first_id, first_id + 1, first_id + 3); + data.add_triangle(first_id, first_id + 3, first_id + 2); - for (short i = resolution; i >= 0; --i) { + for (int i = resolution; i >= 0; --i) { const float angle = float(i) * step_angle; const float c = ::cos(angle); const float s = ::sin(angle); - append_vertex(data, { outer_radius * s, outer_radius * c, -half_thickness }, { s, c, 0.0f }); + data.add_vertex(Vec3f(outer_radius * s, outer_radius * c, -half_thickness), Vec3f(s, c, 0.0f)); } - for (short i = resolution; i >= 0; --i) { + for (int i = resolution; i >= 0; --i) { const float angle = float(i) * step_angle; const float c = ::cos(angle); const float s = ::sin(angle); - append_vertex(data, { outer_radius * s, outer_radius * c, +half_thickness }, { s, c, 0.0f }); + data.add_vertex(Vec3f(outer_radius * s, outer_radius * c, +half_thickness), Vec3f(s, c, 0.0f)); } first_id = 30 + 6 * (resolution + 1); - for (unsigned short i = 0; i < resolution; ++i) { - const unsigned short ii = first_id + i; - append_triangle(data, ii, ii + 1, ii + resolution + 2); - append_triangle(data, ii, ii + resolution + 2, ii + resolution + 1); + for (unsigned int i = 0; i < resolution; ++i) { + const unsigned int ii = first_id + i; + data.add_triangle(ii, ii + 1, ii + resolution + 2); + data.add_triangle(ii, ii + resolution + 2, ii + resolution + 1); } #else // tip @@ -1487,13 +1768,14 @@ GLModel::Geometry circular_arrow(unsigned short resolution, float radius, float } data.entities.emplace_back(entity); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + return data; } GLModel::Geometry straight_arrow(float tip_width, float tip_height, float stem_width, float stem_height, float thickness) { -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL auto append_vertex = [](GLModel::Geometry::Entity& entity, const Vec3f& position, const Vec3f& normal) { entity.positions.emplace_back(position); entity.normals.emplace_back(normal); @@ -1503,101 +1785,101 @@ GLModel::Geometry straight_arrow(float tip_width, float tip_height, float stem_w entity.indices.emplace_back(v2); entity.indices.emplace_back(v3); }; -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL GLModel::Geometry data; -#if ENABLE_GLBEGIN_GLEND_REMOVAL - data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3, GLModel::Geometry::EIndexType::USHORT }; - data.vertices.reserve(42 * GLModel::Geometry::vertex_stride_floats(data.format)); - data.indices.reserve((24 * 3) * GLModel::Geometry::index_stride_bytes(data.format)); +#if ENABLE_LEGACY_OPENGL_REMOVAL + data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + data.reserve_vertices(42); + data.reserve_indices(72); #else GLModel::Geometry::Entity entity; entity.type = GLModel::EPrimitiveType::Triangles; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL const float half_thickness = 0.5f * thickness; const float half_stem_width = 0.5f * stem_width; const float half_tip_width = 0.5f * tip_width; const float total_height = tip_height + stem_height; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // top face vertices - append_vertex(data, { half_stem_width, 0.0, half_thickness }, Vec3f::UnitZ()); - append_vertex(data, { half_stem_width, stem_height, half_thickness }, Vec3f::UnitZ()); - append_vertex(data, { half_tip_width, stem_height, half_thickness }, Vec3f::UnitZ()); - append_vertex(data, { 0.0, total_height, half_thickness }, Vec3f::UnitZ()); - append_vertex(data, { -half_tip_width, stem_height, half_thickness }, Vec3f::UnitZ()); - append_vertex(data, { -half_stem_width, stem_height, half_thickness }, Vec3f::UnitZ()); - append_vertex(data, { -half_stem_width, 0.0, half_thickness }, Vec3f::UnitZ()); + data.add_vertex(Vec3f(half_stem_width, 0.0f, half_thickness), (Vec3f)Vec3f::UnitZ()); + data.add_vertex(Vec3f(half_stem_width, stem_height, half_thickness), (Vec3f)Vec3f::UnitZ()); + data.add_vertex(Vec3f(half_tip_width, stem_height, half_thickness), (Vec3f)Vec3f::UnitZ()); + data.add_vertex(Vec3f(0.0f, total_height, half_thickness), (Vec3f)Vec3f::UnitZ()); + data.add_vertex(Vec3f(-half_tip_width, stem_height, half_thickness), (Vec3f)Vec3f::UnitZ()); + data.add_vertex(Vec3f(-half_stem_width, stem_height, half_thickness), (Vec3f)Vec3f::UnitZ()); + data.add_vertex(Vec3f(-half_stem_width, 0.0f, half_thickness), (Vec3f)Vec3f::UnitZ()); // top face triangles - append_triangle(data, 0, 1, 6); - append_triangle(data, 6, 1, 5); - append_triangle(data, 4, 5, 3); - append_triangle(data, 5, 1, 3); - append_triangle(data, 1, 2, 3); + data.add_triangle(0, 1, 6); + data.add_triangle(6, 1, 5); + data.add_triangle(4, 5, 3); + data.add_triangle(5, 1, 3); + data.add_triangle(1, 2, 3); // bottom face vertices - append_vertex(data, { half_stem_width, 0.0, -half_thickness }, -Vec3f::UnitZ()); - append_vertex(data, { half_stem_width, stem_height, -half_thickness }, -Vec3f::UnitZ()); - append_vertex(data, { half_tip_width, stem_height, -half_thickness }, -Vec3f::UnitZ()); - append_vertex(data, { 0.0, total_height, -half_thickness }, -Vec3f::UnitZ()); - append_vertex(data, { -half_tip_width, stem_height, -half_thickness }, -Vec3f::UnitZ()); - append_vertex(data, { -half_stem_width, stem_height, -half_thickness }, -Vec3f::UnitZ()); - append_vertex(data, { -half_stem_width, 0.0, -half_thickness }, -Vec3f::UnitZ()); + data.add_vertex(Vec3f(half_stem_width, 0.0f, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); + data.add_vertex(Vec3f(half_stem_width, stem_height, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); + data.add_vertex(Vec3f(half_tip_width, stem_height, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); + data.add_vertex(Vec3f(0.0f, total_height, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); + data.add_vertex(Vec3f(-half_tip_width, stem_height, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); + data.add_vertex(Vec3f(-half_stem_width, stem_height, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); + data.add_vertex(Vec3f(-half_stem_width, 0.0f, -half_thickness), (Vec3f)(-Vec3f::UnitZ())); // bottom face triangles - append_triangle(data, 7, 13, 8); - append_triangle(data, 13, 12, 8); - append_triangle(data, 12, 11, 10); - append_triangle(data, 8, 12, 10); - append_triangle(data, 9, 8, 10); + data.add_triangle(7, 13, 8); + data.add_triangle(13, 12, 8); + data.add_triangle(12, 11, 10); + data.add_triangle(8, 12, 10); + data.add_triangle(9, 8, 10); // side faces vertices - append_vertex(data, { half_stem_width, 0.0, -half_thickness }, Vec3f::UnitX()); - append_vertex(data, { half_stem_width, stem_height, -half_thickness }, Vec3f::UnitX()); - append_vertex(data, { half_stem_width, 0.0, half_thickness }, Vec3f::UnitX()); - append_vertex(data, { half_stem_width, stem_height, half_thickness }, Vec3f::UnitX()); + data.add_vertex(Vec3f(half_stem_width, 0.0f, -half_thickness), (Vec3f)Vec3f::UnitX()); + data.add_vertex(Vec3f(half_stem_width, stem_height, -half_thickness), (Vec3f)Vec3f::UnitX()); + data.add_vertex(Vec3f(half_stem_width, 0.0f, half_thickness), (Vec3f)Vec3f::UnitX()); + data.add_vertex(Vec3f(half_stem_width, stem_height, half_thickness), (Vec3f)Vec3f::UnitX()); - append_vertex(data, { half_stem_width, stem_height, -half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { half_tip_width, stem_height, -half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { half_stem_width, stem_height, half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { half_tip_width, stem_height, half_thickness }, -Vec3f::UnitY()); + data.add_vertex(Vec3f(half_stem_width, stem_height, -half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(half_tip_width, stem_height, -half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(half_stem_width, stem_height, half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(half_tip_width, stem_height, half_thickness), (Vec3f)(-Vec3f::UnitY())); Vec3f normal(tip_height, half_tip_width, 0.0f); normal.normalize(); - append_vertex(data, { half_tip_width, stem_height, -half_thickness }, normal); - append_vertex(data, { 0.0, total_height, -half_thickness }, normal); - append_vertex(data, { half_tip_width, stem_height, half_thickness }, normal); - append_vertex(data, { 0.0, total_height, half_thickness }, normal); + data.add_vertex(Vec3f(half_tip_width, stem_height, -half_thickness), normal); + data.add_vertex(Vec3f(0.0f, total_height, -half_thickness), normal); + data.add_vertex(Vec3f(half_tip_width, stem_height, half_thickness), normal); + data.add_vertex(Vec3f(0.0f, total_height, half_thickness), normal); normal = { -tip_height, half_tip_width, 0.0f }; normal.normalize(); - append_vertex(data, { 0.0, total_height, -half_thickness }, normal); - append_vertex(data, { -half_tip_width, stem_height, -half_thickness }, normal); - append_vertex(data, { 0.0, total_height, half_thickness }, normal); - append_vertex(data, { -half_tip_width, stem_height, half_thickness }, normal); + data.add_vertex(Vec3f(0.0f, total_height, -half_thickness), normal); + data.add_vertex(Vec3f(-half_tip_width, stem_height, -half_thickness), normal); + data.add_vertex(Vec3f(0.0f, total_height, half_thickness), normal); + data.add_vertex(Vec3f(-half_tip_width, stem_height, half_thickness), normal); - append_vertex(data, { -half_tip_width, stem_height, -half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { -half_stem_width, stem_height, -half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { -half_tip_width, stem_height, half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { -half_stem_width, stem_height, half_thickness }, -Vec3f::UnitY()); + data.add_vertex(Vec3f(-half_tip_width, stem_height, -half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(-half_stem_width, stem_height, -half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(-half_tip_width, stem_height, half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(-half_stem_width, stem_height, half_thickness), (Vec3f)(-Vec3f::UnitY())); - append_vertex(data, { -half_stem_width, stem_height, -half_thickness }, -Vec3f::UnitX()); - append_vertex(data, { -half_stem_width, 0.0, -half_thickness }, -Vec3f::UnitX()); - append_vertex(data, { -half_stem_width, stem_height, half_thickness }, -Vec3f::UnitX()); - append_vertex(data, { -half_stem_width, 0.0, half_thickness }, -Vec3f::UnitX()); + data.add_vertex(Vec3f(-half_stem_width, stem_height, -half_thickness), (Vec3f)(-Vec3f::UnitX())); + data.add_vertex(Vec3f(-half_stem_width, 0.0f, -half_thickness), (Vec3f)(-Vec3f::UnitX())); + data.add_vertex(Vec3f(-half_stem_width, stem_height, half_thickness), (Vec3f)(-Vec3f::UnitX())); + data.add_vertex(Vec3f(-half_stem_width, 0.0f, half_thickness), (Vec3f)(-Vec3f::UnitX())); - append_vertex(data, { -half_stem_width, 0.0, -half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { half_stem_width, 0.0, -half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { -half_stem_width, 0.0, half_thickness }, -Vec3f::UnitY()); - append_vertex(data, { half_stem_width, 0.0, half_thickness }, -Vec3f::UnitY()); + data.add_vertex(Vec3f(-half_stem_width, 0.0f, -half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(half_stem_width, 0.0f, -half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(-half_stem_width, 0.0f, half_thickness), (Vec3f)(-Vec3f::UnitY())); + data.add_vertex(Vec3f(half_stem_width, 0.0f, half_thickness), (Vec3f)(-Vec3f::UnitY())); // side face triangles - for (unsigned short i = 0; i < 7; ++i) { - const unsigned short ii = i * 4; - append_triangle(data, 14 + ii, 15 + ii, 17 + ii); - append_triangle(data, 14 + ii, 17 + ii, 16 + ii); + for (unsigned int i = 0; i < 7; ++i) { + const unsigned int ii = i * 4; + data.add_triangle(14 + ii, 15 + ii, 17 + ii); + data.add_triangle(14 + ii, 17 + ii, 16 + ii); } #else // top face vertices @@ -1680,53 +1962,51 @@ GLModel::Geometry straight_arrow(float tip_width, float tip_height, float stem_w } data.entities.emplace_back(entity); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + return data; } -GLModel::Geometry diamond(unsigned short resolution) +GLModel::Geometry diamond(unsigned int resolution) { - resolution = std::max(4, resolution); -#if ENABLE_GLBEGIN_GLEND_REMOVAL - resolution = std::min(65534, resolution); // ensure no unsigned short overflow of indices -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL + resolution = std::max(4, resolution); GLModel::Geometry data; -#if ENABLE_GLBEGIN_GLEND_REMOVAL - data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3, GLModel::Geometry::EIndexType::USHORT }; - data.vertices.reserve((resolution + 2) * GLModel::Geometry::vertex_stride_floats(data.format)); - data.indices.reserve(((2 * (resolution + 1)) * 3) * GLModel::Geometry::index_stride_bytes(data.format)); +#if ENABLE_LEGACY_OPENGL_REMOVAL + data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + data.reserve_vertices(resolution + 2); + data.reserve_indices((2 * (resolution + 1)) * 3); #else GLModel::Geometry::Entity entity; entity.type = GLModel::EPrimitiveType::Triangles; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL const float step = 2.0f * float(PI) / float(resolution); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // vertices - for (unsigned short i = 0; i < resolution; ++i) { - float ii = float(i) * step; + for (unsigned int i = 0; i < resolution; ++i) { + const float ii = float(i) * step; const Vec3f p = { 0.5f * ::cos(ii), 0.5f * ::sin(ii), 0.0f }; - append_vertex(data, p, p.normalized()); + data.add_vertex(p, (Vec3f)p.normalized()); } Vec3f p = { 0.0f, 0.0f, 0.5f }; - append_vertex(data, p, p.normalized()); + data.add_vertex(p, (Vec3f)p.normalized()); p = { 0.0f, 0.0f, -0.5f }; - append_vertex(data, p, p.normalized()); + data.add_vertex(p, (Vec3f)p.normalized()); // triangles // top - for (unsigned short i = 0; i < resolution; ++i) { - append_triangle(data, i + 0, i + 1, resolution); + for (unsigned int i = 0; i < resolution; ++i) { + data.add_triangle(i + 0, i + 1, resolution); } - append_triangle(data, resolution - 1, 0, resolution); + data.add_triangle(resolution - 1, 0, resolution); // bottom - for (unsigned short i = 0; i < resolution; ++i) { - append_triangle(data, i + 0, resolution + 1, i + 1); + for (unsigned int i = 0; i < resolution; ++i) { + data.add_triangle(i + 0, resolution + 1, i + 1); } - append_triangle(data, resolution - 1, resolution + 1, 0); + data.add_triangle(resolution - 1, resolution + 1, 0); #else // positions for (int i = 0; i < resolution; ++i) { @@ -1763,9 +2043,77 @@ GLModel::Geometry diamond(unsigned short resolution) entity.indices.push_back(0); data.entities.emplace_back(entity); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + return data; } +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_SHOW_TOOLPATHS_COG +GLModel::Geometry smooth_sphere(unsigned int resolution, float radius) +{ + resolution = std::max(4, resolution); + + const unsigned int sectorCount = resolution; + const unsigned int stackCount = resolution; + + const float sectorStep = float(2.0 * M_PI / sectorCount); + const float stackStep = float(M_PI / stackCount); + + GLModel::Geometry data; + data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + data.reserve_vertices((stackCount - 1) * sectorCount + 2); + data.reserve_indices((2 * (stackCount - 1) * sectorCount) * 3); + + // vertices + for (unsigned int i = 0; i <= stackCount; ++i) { + // from pi/2 to -pi/2 + const double stackAngle = 0.5 * M_PI - stackStep * i; + const double xy = double(radius) * ::cos(stackAngle); + const double z = double(radius) * ::sin(stackAngle); + if (i == 0 || i == stackCount) { + const Vec3f v(float(xy), 0.0f, float(z)); + data.add_vertex(v, (Vec3f)v.normalized()); + } + else { + for (unsigned int j = 0; j < sectorCount; ++j) { + // from 0 to 2pi + const double sectorAngle = sectorStep * j; + const Vec3f v(float(xy * std::cos(sectorAngle)), float(xy * std::sin(sectorAngle)), float(z)); + data.add_vertex(v, (Vec3f)v.normalized()); + } + } + } + + // triangles + for (unsigned int i = 0; i < stackCount; ++i) { + // Beginning of current stack. + unsigned int k1 = (i == 0) ? 0 : (1 + (i - 1) * sectorCount); + const unsigned int k1_first = k1; + // Beginning of next stack. + unsigned int k2 = (i == 0) ? 1 : (k1 + sectorCount); + const unsigned int k2_first = k2; + for (unsigned int j = 0; j < sectorCount; ++j) { + // 2 triangles per sector excluding first and last stacks + unsigned int k1_next = k1; + unsigned int k2_next = k2; + if (i != 0) { + k1_next = (j + 1 == sectorCount) ? k1_first : (k1 + 1); + data.add_triangle(k1, k2, k1_next); + } + if (i + 1 != stackCount) { + k2_next = (j + 1 == sectorCount) ? k2_first : (k2 + 1); + data.add_triangle(k1_next, k2, k2_next); + } + k1 = k1_next; + k2 = k2_next; + } + } + + return data; +} +#endif // ENABLE_SHOW_TOOLPATHS_COG +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/GLModel.hpp b/src/slic3r/GUI/GLModel.hpp index 61456f377..3176780bf 100644 --- a/src/slic3r/GUI/GLModel.hpp +++ b/src/slic3r/GUI/GLModel.hpp @@ -14,13 +14,16 @@ namespace Slic3r { class TriangleMesh; class Polygon; using Polygons = std::vector; +#if ENABLE_LEGACY_OPENGL_REMOVAL +class BuildVolume; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL namespace GUI { class GLModel { public: -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL enum class EPrimitiveType : unsigned char { Triangles, @@ -37,11 +40,11 @@ namespace GUI { size_t indices_count{ 0 }; ColorRGBA color; }; -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL struct Geometry { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL enum class EPrimitiveType : unsigned char { Points, @@ -58,55 +61,63 @@ namespace GUI { P2, // position 2 floats P2T2, // position 2 floats + texture coords 2 floats P3, // position 3 floats + P3T2, // position 3 floats + texture coords 2 floats P3N3, // position 3 floats + normal 3 floats }; enum class EIndexType : unsigned char { UINT, // unsigned int - USHORT // unsigned short + USHORT, // unsigned short + UBYTE // unsigned byte }; struct Format { EPrimitiveType type{ EPrimitiveType::Triangles }; EVertexLayout vertex_layout{ EVertexLayout::P3N3 }; - EIndexType index_type{ EIndexType::UINT }; }; Format format; std::vector vertices; - std::vector indices; + std::vector indices; + EIndexType index_type{ EIndexType::UINT }; ColorRGBA color{ ColorRGBA::BLACK() }; - void add_vertex(const Vec2f& position); - void add_vertex(const Vec2f& position, const Vec2f& tex_coord); - void add_vertex(const Vec3f& position); - void add_vertex(const Vec3f& position, const Vec3f& normal); + void reserve_vertices(size_t vertices_count) { vertices.reserve(vertices_count * vertex_stride_floats(format)); } + void reserve_indices(size_t indices_count) { indices.reserve(indices_count); } - void add_ushort_index(unsigned short id); - void add_uint_index(unsigned int id); + void add_vertex(const Vec2f& position); // EVertexLayout::P2 + void add_vertex(const Vec2f& position, const Vec2f& tex_coord); // EVertexLayout::P2T2 + void add_vertex(const Vec3f& position); // EVertexLayout::P3 + void add_vertex(const Vec3f& position, const Vec2f& tex_coord); // EVertexLayout::P3T2 + void add_vertex(const Vec3f& position, const Vec3f& normal); // EVertexLayout::P3N3 - void add_ushort_line(unsigned short id1, unsigned short id2); - void add_uint_line(unsigned int id1, unsigned int id2); + void set_vertex(size_t id, const Vec3f& position, const Vec3f& normal); // EVertexLayout::P3N3 - void add_ushort_triangle(unsigned short id1, unsigned short id2, unsigned short id3); - void add_uint_triangle(unsigned int id1, unsigned int id2, unsigned int id3); + void set_index(size_t id, unsigned int index); + + void add_index(unsigned int id); + void add_line(unsigned int id1, unsigned int id2); + void add_triangle(unsigned int id1, unsigned int id2, unsigned int id3); Vec2f extract_position_2(size_t id) const; Vec3f extract_position_3(size_t id) const; Vec3f extract_normal_3(size_t id) const; Vec2f extract_tex_coord_2(size_t id) const; - unsigned int extract_uint_index(size_t id) const; - unsigned short extract_ushort_index(size_t id) const; + unsigned int extract_index(size_t id) const; + + void remove_vertex(size_t id); + + bool is_empty() const { return vertices_count() == 0 || indices_count() == 0; } size_t vertices_count() const { return vertices.size() / vertex_stride_floats(format); } - size_t indices_count() const { return indices.size() / index_stride_bytes(format); } + size_t indices_count() const { return indices.size(); } size_t vertices_size_floats() const { return vertices.size(); } size_t vertices_size_bytes() const { return vertices_size_floats() * sizeof(float); } - size_t indices_size_bytes() const { return indices.size(); } + size_t indices_size_bytes() const { return indices.size() * index_stride_bytes(*this); } static size_t vertex_stride_floats(const Format& format); static size_t vertex_stride_bytes(const Format& format) { return vertex_stride_floats(format) * sizeof(float); } @@ -126,7 +137,7 @@ namespace GUI { static size_t tex_coord_offset_floats(const Format& format); static size_t tex_coord_offset_bytes(const Format& format) { return tex_coord_offset_floats(format) * sizeof(float); } - static size_t index_stride_bytes(const Format& format); + static size_t index_stride_bytes(const Geometry& data); static bool has_position(const Format& format); static bool has_normal(const Format& format); @@ -149,10 +160,10 @@ namespace GUI { size_t indices_count() const; size_t indices_size_bytes() const { return indices_count() * sizeof(unsigned int); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL }; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL struct RenderData { Geometry geometry; @@ -161,15 +172,46 @@ namespace GUI { size_t vertices_count{ 0 }; size_t indices_count{ 0 }; }; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL private: -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GLMODEL_STATISTICS + struct Statistics + { + struct Buffers + { + struct Data + { + size_t current{ 0 }; + size_t max{ 0 }; + }; + Data indices; + Data vertices; + }; + + Buffers gpu_memory; + + int64_t render_calls{ 0 }; + int64_t render_instanced_calls{ 0 }; + }; + + static Statistics s_statistics; +#endif // ENABLE_GLMODEL_STATISTICS + RenderData m_render_data; + + // By default the vertex and index buffers data are sent to gpu at the first call to render() method. + // If you need to initialize a model from outside the main thread, so that a call to render() may happen + // before the initialization is complete, use the methods: + // disable_render() + // ... do your initialization ... + // enable_render() + // to keep the data on cpu side until needed. + bool m_render_disabled{ false }; #else std::vector m_render_data; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL - +#endif // ENABLE_LEGACY_OPENGL_REMOVAL BoundingBoxf3 m_bounding_box; std::string m_filename; @@ -177,7 +219,7 @@ namespace GUI { GLModel() = default; virtual ~GLModel() { reset(); } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL size_t vertices_count() const { return m_render_data.vertices_count > 0 ? m_render_data.vertices_count : m_render_data.geometry.vertices_count(); } size_t indices_count() const { return m_render_data.indices_count > 0 ? @@ -186,62 +228,105 @@ namespace GUI { size_t vertices_size_floats() const { return vertices_count() * Geometry::vertex_stride_floats(m_render_data.geometry.format); } size_t vertices_size_bytes() const { return vertices_size_floats() * sizeof(float); } - size_t indices_size_bytes() const { return indices_count() * Geometry::index_stride_bytes(m_render_data.geometry.format); } + size_t indices_size_bytes() const { return indices_count() * Geometry::index_stride_bytes(m_render_data.geometry); } + + const Geometry& get_geometry() const { return m_render_data.geometry; } void init_from(Geometry&& data); +#if ENABLE_SMOOTH_NORMALS + void init_from(const TriangleMesh& mesh, bool smooth_normals = false); +#else void init_from(const TriangleMesh& mesh); +#endif // ENABLE_SMOOTH_NORMALS #else void init_from(const Geometry& data); void init_from(const indexed_triangle_set& its, const BoundingBoxf3& bbox); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL void init_from(const indexed_triangle_set& its); void init_from(const Polygons& polygons, float z); bool init_from_file(const std::string& filename); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void set_color(const ColorRGBA& color) { m_render_data.geometry.color = color; } const ColorRGBA& get_color() const { return m_render_data.geometry.color; } #else // if entity_id == -1 set the color of all entities void set_color(int entity_id, const ColorRGBA& color); ColorRGBA get_color(size_t entity_id = 0U) const; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL void reset(); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void render(); + void render(const std::pair& range); void render_instanced(unsigned int instances_vbo, unsigned int instances_count); bool is_initialized() const { return vertices_count() > 0 && indices_count() > 0; } + bool is_empty() const { return m_render_data.geometry.is_empty(); } #else void render() const; void render_instanced(unsigned int instances_vbo, unsigned int instances_count) const; bool is_initialized() const { return !m_render_data.empty(); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL const BoundingBoxf3& get_bounding_box() const { return m_bounding_box; } const std::string& get_filename() const { return m_filename; } +#if ENABLE_LEGACY_OPENGL_REMOVAL + bool is_render_disabled() const { return m_render_disabled; } + void enable_render() { m_render_disabled = false; } + void disable_render() { m_render_disabled = true; } + + size_t cpu_memory_used() const { + size_t ret = 0; + if (!m_render_data.geometry.vertices.empty()) + ret += vertices_size_bytes(); + if (!m_render_data.geometry.indices.empty()) + ret += indices_size_bytes(); + return ret; + } + size_t gpu_memory_used() const { + size_t ret = 0; + if (m_render_data.geometry.vertices.empty()) + ret += vertices_size_bytes(); + if (m_render_data.geometry.indices.empty()) + ret += indices_size_bytes(); + return ret; + } + +#if ENABLE_GLMODEL_STATISTICS + static void render_statistics(); + static void reset_statistics_counters() { + s_statistics.render_calls = 0; + s_statistics.render_instanced_calls = 0; + } +#endif // ENABLE_GLMODEL_STATISTICS +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + private: -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL bool send_to_gpu(); #else void send_to_gpu(RenderData& data, const std::vector& vertices, const std::vector& indices); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL }; +#if ENABLE_LEGACY_OPENGL_REMOVAL + bool contains(const BuildVolume& volume, const GLModel& model, bool ignore_bottom = true); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + // create an arrow with cylindrical stem and conical tip, with the given dimensions and resolution // the origin of the arrow is in the center of the stem cap // the arrow has its axis of symmetry along the Z axis and is pointing upward // used to render bed axes and sequential marker - GLModel::Geometry stilized_arrow(unsigned short resolution, float tip_radius, float tip_height, float stem_radius, float stem_height); + GLModel::Geometry stilized_arrow(unsigned int resolution, float tip_radius, float tip_height, float stem_radius, float stem_height); // create an arrow whose stem is a quarter of circle, with the given dimensions and resolution // the origin of the arrow is in the center of the circle // the arrow is contained in the 1st quadrant of the XY plane and is pointing counterclockwise // used to render sidebar hints for rotations - GLModel::Geometry circular_arrow(unsigned short resolution, float radius, float tip_height, float tip_width, float stem_width, float thickness); + GLModel::Geometry circular_arrow(unsigned int resolution, float radius, float tip_height, float tip_width, float stem_width, float thickness); // create an arrow with the given dimensions // the origin of the arrow is in the center of the stem cap @@ -252,7 +337,15 @@ namespace GUI { // create a diamond with the given resolution // the origin of the diamond is in its center // the diamond is contained into a box with size [1, 1, 1] - GLModel::Geometry diamond(unsigned short resolution); + GLModel::Geometry diamond(unsigned int resolution); + +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_SHOW_TOOLPATHS_COG + // create a sphere with the given resolution and smooth normals + // the origin of the sphere is in its center + GLModel::Geometry smooth_sphere(unsigned int resolution, float radius); +#endif // ENABLE_SHOW_TOOLPATHS_COG +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/GLSelectionRectangle.cpp b/src/slic3r/GUI/GLSelectionRectangle.cpp index 5331d517d..a8be0f84e 100644 --- a/src/slic3r/GUI/GLSelectionRectangle.cpp +++ b/src/slic3r/GUI/GLSelectionRectangle.cpp @@ -13,12 +13,12 @@ namespace GUI { void GLSelectionRectangle::start_dragging(const Vec2d& mouse_position, EState state) { - if (is_dragging() || (state == Off)) + if (is_dragging() || state == EState::Off) return; m_state = state; m_start_corner = mouse_position; - m_end_corner = mouse_position; + m_end_corner = mouse_position; } void GLSelectionRectangle::dragging(const Vec2d& mouse_position) @@ -36,7 +36,7 @@ namespace GUI { if (!is_dragging()) return out; - m_state = Off; + m_state = EState::Off; const Camera& camera = wxGetApp().plater()->get_camera(); Matrix4d modelview = camera.get_view_matrix().matrix(); @@ -66,7 +66,7 @@ namespace GUI { void GLSelectionRectangle::stop_dragging() { if (is_dragging()) - m_state = Off; + m_state = EState::Off; } void GLSelectionRectangle::render(const GLCanvas3D& canvas) @@ -74,34 +74,49 @@ namespace GUI { if (!is_dragging()) return; - const Camera& camera = wxGetApp().plater()->get_camera(); - float inv_zoom = (float)camera.get_inv_zoom(); + const Size cnv_size = canvas.get_canvas_size(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const float cnv_width = (float)cnv_size.get_width(); + const float cnv_height = (float)cnv_size.get_height(); + if (cnv_width == 0.0f || cnv_height == 0.0f) + return; - Size cnv_size = canvas.get_canvas_size(); - float cnv_half_width = 0.5f * (float)cnv_size.get_width(); - float cnv_half_height = 0.5f * (float)cnv_size.get_height(); + const float cnv_inv_width = 1.0f / cnv_width; + const float cnv_inv_height = 1.0f / cnv_height; + const float left = 2.0f * (get_left() * cnv_inv_width - 0.5f); + const float right = 2.0f * (get_right() * cnv_inv_width - 0.5f); + const float top = -2.0f * (get_top() * cnv_inv_height - 0.5f); + const float bottom = -2.0f * (get_bottom() * cnv_inv_height - 0.5f); +#else + const Camera& camera = wxGetApp().plater()->get_camera(); + const float inv_zoom = (float)camera.get_inv_zoom(); + + const float cnv_half_width = 0.5f * (float)cnv_size.get_width(); + const float cnv_half_height = 0.5f * (float)cnv_size.get_height(); if (cnv_half_width == 0.0f || cnv_half_height == 0.0f) return; - Vec2d start(m_start_corner(0) - cnv_half_width, cnv_half_height - m_start_corner(1)); - Vec2d end(m_end_corner(0) - cnv_half_width, cnv_half_height - m_end_corner(1)); + const Vec2d start(m_start_corner.x() - cnv_half_width, cnv_half_height - m_start_corner.y()); + const Vec2d end(m_end_corner.x() - cnv_half_width, cnv_half_height - m_end_corner.y()); + + const float left = (float)std::min(start.x(), end.x()) * inv_zoom; + const float top = (float)std::max(start.y(), end.y()) * inv_zoom; + const float right = (float)std::max(start.x(), end.x()) * inv_zoom; + const float bottom = (float)std::min(start.y(), end.y()) * inv_zoom; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES - const float left = (float)std::min(start(0), end(0)) * inv_zoom; - const float top = (float)std::max(start(1), end(1)) * inv_zoom; - const float right = (float)std::max(start(0), end(0)) * inv_zoom; - const float bottom = (float)std::min(start(1), end(1)) * inv_zoom; - glsafe(::glLineWidth(1.5f)); -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL float color[3]; - color[0] = (m_state == Select) ? 0.3f : 1.0f; - color[1] = (m_state == Select) ? 1.0f : 0.3f; + color[0] = (m_state == EState::Select) ? 0.3f : 1.0f; + color[1] = (m_state == EState::Select) ? 1.0f : 0.3f; color[2] = 0.3f; glsafe(::glColor3fv(color)); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glDisable(GL_DEPTH_TEST)); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushMatrix()); glsafe(::glLoadIdentity()); // ensure that the rectangle is renderered inside the frustrum @@ -109,12 +124,13 @@ namespace GUI { // ensure that the overlay fits the frustrum near z plane const double gui_scale = camera.get_gui_scale(); glsafe(::glScaled(gui_scale, gui_scale, 1.0)); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushAttrib(GL_ENABLE_BIT)); glsafe(::glLineStipple(4, 0xAAAA)); glsafe(::glEnable(GL_LINE_STIPPLE)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); @@ -125,9 +141,9 @@ namespace GUI { m_rectangle.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::LineLoop, GLModel::Geometry::EVertexLayout::P2, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(4 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(4 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::LineLoop, GLModel::Geometry::EVertexLayout::P2 }; + init_data.reserve_vertices(4); + init_data.reserve_indices(4); // vertices init_data.add_vertex(Vec2f(left, bottom)); @@ -136,19 +152,20 @@ namespace GUI { init_data.add_vertex(Vec2f(left, top)); // indices - init_data.add_ushort_index(0); - init_data.add_ushort_index(1); - init_data.add_ushort_index(2); - init_data.add_ushort_index(3); + init_data.add_index(0); + init_data.add_index(1); + init_data.add_index(2); + init_data.add_index(3); m_rectangle.init_from(std::move(init_data)); } - const ColorRGBA color( - (m_state == Select) ? 0.3f : 1.0f, - (m_state == Select) ? 1.0f : 0.3f, - 0.3f, 1.0f); - m_rectangle.set_color(color); +#if ENABLE_GL_SHADERS_ATTRIBUTES + shader->set_uniform("view_model_matrix", Transform3d::Identity()); + shader->set_uniform("projection_matrix", Transform3d::Identity()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + + m_rectangle.set_color(ColorRGBA((m_state == EState::Select) ? 0.3f : 1.0f, (m_state == EState::Select) ? 1.0f : 0.3f, 0.3f, 1.0f)); m_rectangle.render(); shader->stop_using(); } @@ -159,11 +176,13 @@ namespace GUI { ::glVertex2f((GLfloat)right, (GLfloat)top); ::glVertex2f((GLfloat)left, (GLfloat)top); glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glPopAttrib()); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } } // namespace GUI diff --git a/src/slic3r/GUI/GLSelectionRectangle.hpp b/src/slic3r/GUI/GLSelectionRectangle.hpp index ae0b7a097..49b3447ba 100644 --- a/src/slic3r/GUI/GLSelectionRectangle.hpp +++ b/src/slic3r/GUI/GLSelectionRectangle.hpp @@ -2,9 +2,9 @@ #define slic3r_GLSelectionRectangle_hpp_ #include "libslic3r/Point.hpp" -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL #include "GLModel.hpp" -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL namespace Slic3r { namespace GUI { @@ -14,7 +14,7 @@ class GLCanvas3D; class GLSelectionRectangle { public: - enum EState { + enum class EState { Off, Select, Deselect @@ -35,25 +35,29 @@ public: void render(const GLCanvas3D& canvas); - bool is_dragging() const { return m_state != Off; } + bool is_dragging() const { return m_state != EState::Off; } +#if ENABLE_NEW_RECTANGLE_SELECTION + bool is_empty() const { return m_state == EState::Off || m_start_corner.isApprox(m_end_corner); } +#endif // ENABLE_NEW_RECTANGLE_SELECTION + EState get_state() const { return m_state; } - float get_width() const { return std::abs(m_start_corner(0) - m_end_corner(0)); } - float get_height() const { return std::abs(m_start_corner(1) - m_end_corner(1)); } - float get_left() const { return std::min(m_start_corner(0), m_end_corner(0)); } - float get_right() const { return std::max(m_start_corner(0), m_end_corner(0)); } - float get_top() const { return std::max(m_start_corner(1), m_end_corner(1)); } - float get_bottom() const { return std::min(m_start_corner(1), m_end_corner(1)); } + float get_width() const { return std::abs(m_start_corner.x() - m_end_corner.x()); } + float get_height() const { return std::abs(m_start_corner.y() - m_end_corner.y()); } + float get_left() const { return std::min(m_start_corner.x(), m_end_corner.x()); } + float get_right() const { return std::max(m_start_corner.x(), m_end_corner.x()); } + float get_top() const { return std::max(m_start_corner.y(), m_end_corner.y()); } + float get_bottom() const { return std::min(m_start_corner.y(), m_end_corner.y()); } private: - EState m_state{ Off }; + EState m_state{ EState::Off }; Vec2d m_start_corner{ Vec2d::Zero() }; Vec2d m_end_corner{ Vec2d::Zero() }; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLModel m_rectangle; Vec2d m_old_start_corner{ Vec2d::Zero() }; Vec2d m_old_end_corner{ Vec2d::Zero() }; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL }; diff --git a/src/slic3r/GUI/GLShader.cpp b/src/slic3r/GUI/GLShader.cpp index 32b3d5960..9e3001d77 100644 --- a/src/slic3r/GUI/GLShader.cpp +++ b/src/slic3r/GUI/GLShader.cpp @@ -122,8 +122,7 @@ bool GLShaderProgram::init_from_texts(const std::string& name, const ShaderSourc for (size_t i = 0; i < static_cast(EShaderType::Count); ++i) { const std::string& source = sources[i]; - if (!source.empty()) - { + if (!source.empty()) { EShaderType type = static_cast(i); auto [result, id] = create_shader(type); if (result) @@ -265,6 +264,12 @@ void GLShaderProgram::set_uniform(int id, const std::array& value) con glsafe(::glUniform4fv(id, 1, static_cast(value.data()))); } +void GLShaderProgram::set_uniform(int id, const std::array& value) const +{ + const std::array f_value = { float(value[0]), float(value[1]), float(value[2]), float(value[3]) }; + set_uniform(id, f_value); +} + void GLShaderProgram::set_uniform(int id, const float* value, size_t size) const { if (id >= 0) { @@ -296,6 +301,26 @@ void GLShaderProgram::set_uniform(int id, const Matrix3f& value) const glsafe(::glUniformMatrix3fv(id, 1, GL_FALSE, static_cast(value.data()))); } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLShaderProgram::set_uniform(int id, const Matrix3d& value) const +{ + set_uniform(id, (Matrix3f)value.cast()); +} +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + +#if ENABLE_GL_IMGUI_SHADERS +void GLShaderProgram::set_uniform(int id, const Matrix4f& value) const +{ + if (id >= 0) + glsafe(::glUniformMatrix4fv(id, 1, GL_FALSE, static_cast(value.data()))); +} + +void GLShaderProgram::set_uniform(int id, const Matrix4d& value) const +{ + set_uniform(id, (Matrix4f)value.cast()); +} +#endif // ENABLE_GL_IMGUI_SHADERS + void GLShaderProgram::set_uniform(int id, const Vec3f& value) const { if (id >= 0) diff --git a/src/slic3r/GUI/GLShader.hpp b/src/slic3r/GUI/GLShader.hpp index 06a5c00e5..72edb8b66 100644 --- a/src/slic3r/GUI/GLShader.hpp +++ b/src/slic3r/GUI/GLShader.hpp @@ -57,10 +57,18 @@ public: void set_uniform(const char* name, const std::array& value) const { set_uniform(get_uniform_location(name), value); } void set_uniform(const char* name, const std::array& value) const { set_uniform(get_uniform_location(name), value); } void set_uniform(const char* name, const std::array& value) const { set_uniform(get_uniform_location(name), value); } + void set_uniform(const char* name, const std::array& value) const { set_uniform(get_uniform_location(name), value); } void set_uniform(const char* name, const float* value, size_t size) const { set_uniform(get_uniform_location(name), value, size); } void set_uniform(const char* name, const Transform3f& value) const { set_uniform(get_uniform_location(name), value); } void set_uniform(const char* name, const Transform3d& value) const { set_uniform(get_uniform_location(name), value); } void set_uniform(const char* name, const Matrix3f& value) const { set_uniform(get_uniform_location(name), value); } +#if ENABLE_GL_SHADERS_ATTRIBUTES + void set_uniform(const char* name, const Matrix3d& value) const { set_uniform(get_uniform_location(name), value); } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_IMGUI_SHADERS + void set_uniform(const char* name, const Matrix4f& value) const { set_uniform(get_uniform_location(name), value); } + void set_uniform(const char* name, const Matrix4d& value) const { set_uniform(get_uniform_location(name), value); } +#endif // ENABLE_GL_IMGUI_SHADERS void set_uniform(const char* name, const Vec3f& value) const { set_uniform(get_uniform_location(name), value); } void set_uniform(const char* name, const Vec3d& value) const { set_uniform(get_uniform_location(name), value); } void set_uniform(const char* name, const ColorRGB& value) const { set_uniform(get_uniform_location(name), value); } @@ -76,10 +84,18 @@ public: void set_uniform(int id, const std::array& value) const; void set_uniform(int id, const std::array& value) const; void set_uniform(int id, const std::array& value) const; + void set_uniform(int id, const std::array& value) const; void set_uniform(int id, const float* value, size_t size) const; void set_uniform(int id, const Transform3f& value) const; void set_uniform(int id, const Transform3d& value) const; void set_uniform(int id, const Matrix3f& value) const; +#if ENABLE_GL_SHADERS_ATTRIBUTES + void set_uniform(int id, const Matrix3d& value) const; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_IMGUI_SHADERS + void set_uniform(int id, const Matrix4f& value) const; + void set_uniform(int id, const Matrix4d& value) const; +#endif // ENABLE_GL_IMGUI_SHADERS void set_uniform(int id, const Vec3f& value) const; void set_uniform(int id, const Vec3d& value) const; void set_uniform(int id, const ColorRGB& value) const; diff --git a/src/slic3r/GUI/GLShadersManager.cpp b/src/slic3r/GUI/GLShadersManager.cpp index ae71e90af..9edd39d7f 100644 --- a/src/slic3r/GUI/GLShadersManager.cpp +++ b/src/slic3r/GUI/GLShadersManager.cpp @@ -33,43 +33,96 @@ std::pair GLShadersManager::init() bool valid = true; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + const std::string prefix = GUI::wxGetApp().is_gl_version_greater_or_equal_to(3, 1) ? "140/" : "110/"; + // imgui shader + valid &= append_shader("imgui", { prefix + "imgui.vs", prefix + "imgui.fs" }); + // basic shader, used to render all what was previously rendered using the immediate mode + valid &= append_shader("flat", { prefix + "flat.vs", prefix + "flat.fs" }); + // basic shader with plane clipping, used to render volumes in picking pass + valid &= append_shader("flat_clip", { prefix + "flat_clip.vs", prefix + "flat_clip.fs" }); + // basic shader for textures, used to render textures + valid &= append_shader("flat_texture", { prefix + "flat_texture.vs", prefix + "flat_texture.fs" }); + // used to render 3D scene background + valid &= append_shader("background", { prefix + "background.vs", prefix + "background.fs" }); +#else // basic shader, used to render all what was previously rendered using the immediate mode valid &= append_shader("flat", { "flat.vs", "flat.fs" }); // basic shader for textures, used to render textures valid &= append_shader("flat_texture", { "flat_texture.vs", "flat_texture.fs" }); // used to render 3D scene background valid &= append_shader("background", { "background.vs", "background.fs" }); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_SHOW_TOOLPATHS_COG + // used to render toolpaths center of gravity +#if ENABLE_GL_SHADERS_ATTRIBUTES + valid &= append_shader("toolpaths_cog", { prefix + "toolpaths_cog.vs", prefix + "toolpaths_cog.fs" }); +#else + valid &= append_shader("toolpaths_cog", { "toolpaths_cog.vs", "toolpaths_cog.fs" }); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#endif // ENABLE_SHOW_TOOLPATHS_COG +#if ENABLE_GL_SHADERS_ATTRIBUTES + // used to render bed axes and model, selection hints, gcode sequential view marker model, preview shells, options in gcode preview + valid &= append_shader("gouraud_light", { prefix + "gouraud_light.vs", prefix + "gouraud_light.fs" }); + // used to render printbed + valid &= append_shader("printbed", { prefix + "printbed.vs", prefix + "printbed.fs" }); +#else // used to render bed axes and model, selection hints, gcode sequential view marker model, preview shells, options in gcode preview valid &= append_shader("gouraud_light", { "gouraud_light.vs", "gouraud_light.fs" }); // used to render printbed valid &= append_shader("printbed", { "printbed.vs", "printbed.fs" }); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // used to render options in gcode preview - if (GUI::wxGetApp().is_gl_version_greater_or_equal_to(3, 3)) + if (GUI::wxGetApp().is_gl_version_greater_or_equal_to(3, 3)) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + valid &= append_shader("gouraud_light_instanced", { prefix + "gouraud_light_instanced.vs", prefix + "gouraud_light_instanced.fs" }); +#else valid &= append_shader("gouraud_light_instanced", { "gouraud_light_instanced.vs", "gouraud_light_instanced.fs" }); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + } +#if ENABLE_GL_SHADERS_ATTRIBUTES + // used to render objects in 3d editor + valid &= append_shader("gouraud", { prefix + "gouraud.vs", prefix + "gouraud.fs" } +#else // used to render extrusion and travel paths as lines in gcode preview valid &= append_shader("toolpaths_lines", { "toolpaths_lines.vs", "toolpaths_lines.fs" }); // used to render objects in 3d editor valid &= append_shader("gouraud", { "gouraud.vs", "gouraud.fs" } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES #if ENABLE_ENVIRONMENT_MAP , { "ENABLE_ENVIRONMENT_MAP"sv } #endif // ENABLE_ENVIRONMENT_MAP ); +#if ENABLE_GL_SHADERS_ATTRIBUTES + // used to render variable layers heights in 3d editor + valid &= append_shader("variable_layer_height", { prefix + "variable_layer_height.vs", prefix + "variable_layer_height.fs" }); + // used to render highlight contour around selected triangles inside the multi-material gizmo + valid &= append_shader("mm_contour", { prefix + "mm_contour.vs", prefix + "mm_contour.fs" }); +#else // used to render variable layers heights in 3d editor valid &= append_shader("variable_layer_height", { "variable_layer_height.vs", "variable_layer_height.fs" }); // used to render highlight contour around selected triangles inside the multi-material gizmo valid &= append_shader("mm_contour", { "mm_contour.vs", "mm_contour.fs" }); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // Used to render painted triangles inside the multi-material gizmo. Triangle normals are computed inside fragment shader. // For Apple's on Arm CPU computed triangle normals inside fragment shader using dFdx and dFdy has the opposite direction. // Because of this, objects had darker colors inside the multi-material gizmo. // Based on https://stackoverflow.com/a/66206648, the similar behavior was also spotted on some other devices with Arm CPU. // Since macOS 12 (Monterey), this issue with the opposite direction on Apple's Arm CPU seems to be fixed, and computed // triangle normals inside fragment shader have the right direction. +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (platform_flavor() == PlatformFlavor::OSXOnArm && wxPlatformInfo::Get().GetOSMajorVersion() < 12) + valid &= append_shader("mm_gouraud", { prefix + "mm_gouraud.vs", prefix + "mm_gouraud.fs" }, { "FLIP_TRIANGLE_NORMALS"sv }); + else + valid &= append_shader("mm_gouraud", { prefix + "mm_gouraud.vs", prefix + "mm_gouraud.fs" }); +#else if (platform_flavor() == PlatformFlavor::OSXOnArm && wxPlatformInfo::Get().GetOSMajorVersion() < 12) valid &= append_shader("mm_gouraud", {"mm_gouraud.vs", "mm_gouraud.fs"}, {"FLIP_TRIANGLE_NORMALS"sv}); else valid &= append_shader("mm_gouraud", {"mm_gouraud.vs", "mm_gouraud.fs"}); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES return { valid, error }; } diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index cbf760ff4..137a0a109 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -3,10 +3,10 @@ #include "3DScene.hpp" #include "OpenGLManager.hpp" -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL #include "GUI_App.hpp" #include "GLModel.hpp" -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL #include @@ -211,7 +211,7 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vectorwidth, image->height); // offset by 1 to leave the first pixel empty (both in x and y) - nsvgRasterize(rast, image, 1, 1, scale, sprite_data.data(), sprite_size_px, sprite_size_px, sprite_stride); + nsvgRasterize(rast, image, 1, 1, scale, sprite_data.data(), sprite_size_px_ex, sprite_size_px_ex, sprite_stride); // makes white only copy of the sprite ::memcpy((void*)sprite_white_only_data.data(), (const void*)sprite_data.data(), sprite_bytes); @@ -339,11 +339,11 @@ void GLTexture::render_sub_texture(unsigned int tex_id, float left, float right, glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)tex_id)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P2T2, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(4 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(6 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P2T2 }; + init_data.reserve_vertices(4); + init_data.reserve_indices(6); // vertices init_data.add_vertex(Vec2f(left, bottom), Vec2f(uvs.left_bottom.u, uvs.left_bottom.v)); @@ -352,8 +352,8 @@ void GLTexture::render_sub_texture(unsigned int tex_id, float left, float right, init_data.add_vertex(Vec2f(left, top), Vec2f(uvs.left_top.u, uvs.left_top.v)); // indices - init_data.add_ushort_triangle(0, 1, 2); - init_data.add_ushort_triangle(2, 3, 0); + init_data.add_triangle(0, 1, 2); + init_data.add_triangle(2, 3, 0); GLModel model; model.init_from(std::move(init_data)); @@ -361,6 +361,10 @@ void GLTexture::render_sub_texture(unsigned int tex_id, float left, float right, GLShaderProgram* shader = wxGetApp().get_shader("flat_texture"); if (shader != nullptr) { shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + shader->set_uniform("view_model_matrix", Transform3d::Identity()); + shader->set_uniform("projection_matrix", Transform3d::Identity()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES model.render(); shader->stop_using(); } @@ -371,7 +375,7 @@ void GLTexture::render_sub_texture(unsigned int tex_id, float left, float right, ::glTexCoord2f(uvs.right_top.u, uvs.right_top.v); ::glVertex2f(right, top); ::glTexCoord2f(uvs.left_top.u, uvs.left_top.v); ::glVertex2f(left, top); glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 86827442d..78fbc084f 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -85,26 +85,29 @@ bool GLToolbarItem::update_enabled_state() return ret; } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLToolbarItem::render(const GLCanvas3D& parent, unsigned int tex_id, float left, float right, float bottom, float top, unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) const +#else void GLToolbarItem::render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) const +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { - auto uvs = [this](unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) -> GLTexture::Quad_UVs - { - assert((tex_width != 0) && (tex_height != 0)); + auto uvs = [this](unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) -> GLTexture::Quad_UVs { + assert(tex_width != 0 && tex_height != 0); GLTexture::Quad_UVs ret; // tiles in the texture are spaced by 1 pixel - float icon_size_px = (float)(tex_width - 1) / ((float)Num_States + (float)Num_Rendered_Highlight_States); - char render_state = (m_highlight_state == NotHighlighted ? m_state : Num_States + m_highlight_state); - float inv_tex_width = 1.0f / (float)tex_width; - float inv_tex_height = 1.0f / (float)tex_height; + const float icon_size_px = (float)(tex_width - 1) / ((float)Num_States + (float)Num_Rendered_Highlight_States); + const char render_state = (m_highlight_state == NotHighlighted ? m_state : Num_States + m_highlight_state); + const float inv_tex_width = 1.0f / (float)tex_width; + const float inv_tex_height = 1.0f / (float)tex_height; // tiles in the texture are spaced by 1 pixel - float u_offset = 1.0f * inv_tex_width; - float v_offset = 1.0f * inv_tex_height; - float du = icon_size_px * inv_tex_width; - float dv = icon_size_px * inv_tex_height; - float left = u_offset + (float)render_state * du; - float right = left + du - u_offset; - float top = v_offset + (float)m_data.sprite_id * dv; - float bottom = top + dv - v_offset; + const float u_offset = 1.0f * inv_tex_width; + const float v_offset = 1.0f * inv_tex_height; + const float du = icon_size_px * inv_tex_width; + const float dv = icon_size_px * inv_tex_height; + const float left = u_offset + (float)render_state * du; + const float right = left + du - u_offset; + const float top = v_offset + (float)m_data.sprite_id * dv; + const float bottom = top + dv - v_offset; ret.left_top = { left, top }; ret.left_bottom = { left, bottom }; ret.right_bottom = { right, bottom }; @@ -114,12 +117,26 @@ void GLToolbarItem::render(unsigned int tex_id, float left, float right, float b GLTexture::render_sub_texture(tex_id, left, right, bottom, top, uvs(tex_width, tex_height, icon_size)); - if (is_pressed()) - { - if ((m_last_action_type == Left) && m_data.left.can_render()) + if (is_pressed()) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Size cnv_size = parent.get_canvas_size(); + const float cnv_w = (float)cnv_size.get_width(); + const float cnv_h = (float)cnv_size.get_height(); + + const float out_left = (0.5f * left + 0.5f) * cnv_w; + const float out_right = (0.5f * right + 0.5f) * cnv_w; + const float out_top = (0.5f * top + 0.5f) * cnv_h; + const float out_bottom = (0.5f * bottom + 0.5f) * cnv_h; + if (m_last_action_type == Left && m_data.left.can_render()) + m_data.left.render_callback(out_left, out_right, out_bottom, out_top); + else if (m_last_action_type == Right && m_data.right.can_render()) + m_data.right.render_callback(out_left, out_right, out_bottom, out_top); +#else + if (m_last_action_type == Left && m_data.left.can_render()) m_data.left.render_callback(left, right, bottom, top); - else if ((m_last_action_type == Right) && m_data.right.can_render()) + else if (m_last_action_type == Right && m_data.right.can_render()) m_data.right.render_callback(left, right, bottom, top); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } } @@ -185,6 +202,16 @@ bool GLToolbar::init(const BackgroundTexture::Metadata& background_texture) return res; } +#if ENABLE_GL_SHADERS_ATTRIBUTES +bool GLToolbar::init_arrow(const std::string& filename) +{ + if (m_arrow_texture.get_id() != 0) + return true; + + const std::string path = resources_dir() + "/icons/"; + return (!filename.empty()) ? m_arrow_texture.load_from_svg_file(path + filename, false, false, false, 512) : false; +} +#else bool GLToolbar::init_arrow(const BackgroundTexture::Metadata& arrow_texture) { if (m_arrow_texture.texture.get_id() != 0) @@ -193,14 +220,15 @@ bool GLToolbar::init_arrow(const BackgroundTexture::Metadata& arrow_texture) std::string path = resources_dir() + "/icons/"; bool res = false; - if (!arrow_texture.filename.empty()) { + if (!arrow_texture.filename.empty()) res = m_arrow_texture.texture.load_from_svg_file(path + arrow_texture.filename, false, false, false, 1000); - } + if (res) m_arrow_texture.metadata = arrow_texture; return res; } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES GLToolbar::Layout::EType GLToolbar::get_layout_type() const { @@ -434,18 +462,16 @@ void GLToolbar::render(const GLCanvas3D& parent) { default: case Layout::Horizontal: { render_horizontal(parent); break; } - case Layout::Vertical: { render_vertical(parent); break; } + case Layout::Vertical: { render_vertical(parent); break; } } } - - bool GLToolbar::on_mouse(wxMouseEvent& evt, GLCanvas3D& parent) { if (!m_enabled) return false; - Vec2d mouse_pos((double)evt.GetX(), (double)evt.GetY()); + const Vec2d mouse_pos((double)evt.GetX(), (double)evt.GetY()); bool processed = false; // mouse anywhere @@ -493,7 +519,7 @@ bool GLToolbar::on_mouse(wxMouseEvent& evt, GLCanvas3D& parent) return false; } - int item_id = contains_mouse(mouse_pos, parent); + const int item_id = contains_mouse(mouse_pos, parent); if (item_id != -1) { // mouse inside toolbar if (evt.LeftDown() || evt.LeftDClick()) { @@ -601,16 +627,12 @@ int GLToolbar::get_visible_items_cnt() const void GLToolbar::do_action(GLToolbarItem::EActionType type, int item_id, GLCanvas3D& parent, bool check_hover) { - if ((m_pressed_toggable_id == -1) || (m_pressed_toggable_id == item_id)) - { - if ((0 <= item_id) && (item_id < (int)m_items.size())) - { + if (m_pressed_toggable_id == -1 || m_pressed_toggable_id == item_id) { + if (0 <= item_id && item_id < (int)m_items.size()) { GLToolbarItem* item = m_items[item_id]; - if ((item != nullptr) && !item->is_separator() && !item->is_disabled() && (!check_hover || item->is_hovered())) - { - if (((type == GLToolbarItem::Right) && item->is_right_toggable()) || - ((type == GLToolbarItem::Left) && item->is_left_toggable())) - { + if (item != nullptr && !item->is_separator() && !item->is_disabled() && (!check_hover || item->is_hovered())) { + if ((type == GLToolbarItem::Right && item->is_right_toggable()) || + (type == GLToolbarItem::Left && item->is_left_toggable())) { GLToolbarItem::EState state = item->get_state(); if (state == GLToolbarItem::Hover) item->set_state(GLToolbarItem::HoverPressed); @@ -628,12 +650,11 @@ void GLToolbar::do_action(GLToolbarItem::EActionType type, int item_id, GLCanvas switch (type) { default: - case GLToolbarItem::Left: { item->do_left_action(); break; } + case GLToolbarItem::Left: { item->do_left_action(); break; } case GLToolbarItem::Right: { item->do_right_action(); break; } } } - else - { + else { if (m_type == Radio) select_item(item->get_name()); else @@ -648,8 +669,7 @@ void GLToolbar::do_action(GLToolbarItem::EActionType type, int item_id, GLCanvas case GLToolbarItem::Right: { item->do_right_action(); break; } } - if ((m_type == Normal) && (item->get_state() != GLToolbarItem::Disabled)) - { + if (m_type == Normal && item->get_state() != GLToolbarItem::Disabled) { // the item may get disabled during the action, if not, set it back to hover state item->set_state(GLToolbarItem::Hover); parent.render(); @@ -669,10 +689,209 @@ void GLToolbar::update_hover_state(const Vec2d& mouse_pos, GLCanvas3D& parent) { default: case Layout::Horizontal: { update_hover_state_horizontal(mouse_pos, parent); break; } - case Layout::Vertical: { update_hover_state_vertical(mouse_pos, parent); break; } + case Layout::Vertical: { update_hover_state_vertical(mouse_pos, parent); break; } } } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLToolbar::update_hover_state_horizontal(const Vec2d& mouse_pos, GLCanvas3D& parent) +{ + const Size cnv_size = parent.get_canvas_size(); + const Vec2d scaled_mouse_pos((mouse_pos.x() - 0.5 * (double)cnv_size.get_width()), (0.5 * (double)cnv_size.get_height() - mouse_pos.y())); + + const float icons_size = m_layout.icons_size * m_layout.scale; + const float separator_size = m_layout.separator_size * m_layout.scale; + const float gap_size = m_layout.gap_size * m_layout.scale; + const float border = m_layout.border * m_layout.scale; + + const float separator_stride = separator_size + gap_size; + const float icon_stride = icons_size + gap_size; + + float left = m_layout.left + border; + float top = m_layout.top - border; + + for (GLToolbarItem* item : m_items) { + if (!item->is_visible()) + continue; + + if (item->is_separator()) + left += separator_stride; + else { + const float right = left + icons_size; + const float bottom = top - icons_size; + + const GLToolbarItem::EState state = item->get_state(); + bool inside = (left <= (float)scaled_mouse_pos.x()) && + ((float)scaled_mouse_pos.x() <= right) && + (bottom <= (float)scaled_mouse_pos.y()) && + ((float)scaled_mouse_pos.y() <= top); + + switch (state) + { + case GLToolbarItem::Normal: + { + if (inside) { + item->set_state(GLToolbarItem::Hover); + parent.set_as_dirty(); + } + + break; + } + case GLToolbarItem::Hover: + { + if (!inside) { + item->set_state(GLToolbarItem::Normal); + parent.set_as_dirty(); + } + + break; + } + case GLToolbarItem::Pressed: + { + if (inside) { + item->set_state(GLToolbarItem::HoverPressed); + parent.set_as_dirty(); + } + + break; + } + case GLToolbarItem::HoverPressed: + { + if (!inside) { + item->set_state(GLToolbarItem::Pressed); + parent.set_as_dirty(); + } + + break; + } + case GLToolbarItem::Disabled: + { + if (inside) { + item->set_state(GLToolbarItem::HoverDisabled); + parent.set_as_dirty(); + } + + break; + } + case GLToolbarItem::HoverDisabled: + { + if (!inside) { + item->set_state(GLToolbarItem::Disabled); + parent.set_as_dirty(); + } + + break; + } + default: + { + break; + } + } + + left += icon_stride; + } + } +} + +void GLToolbar::update_hover_state_vertical(const Vec2d& mouse_pos, GLCanvas3D& parent) +{ + const Size cnv_size = parent.get_canvas_size(); + const Vec2d scaled_mouse_pos((mouse_pos.x() - 0.5 * (double)cnv_size.get_width()), (0.5 * (double)cnv_size.get_height() - mouse_pos.y())); + + const float icons_size = m_layout.icons_size * m_layout.scale; + const float separator_size = m_layout.separator_size * m_layout.scale; + const float gap_size = m_layout.gap_size * m_layout.scale; + const float border = m_layout.border * m_layout.scale; + + const float separator_stride = separator_size + gap_size; + const float icon_stride = icons_size + gap_size; + + float left = m_layout.left + border; + float top = m_layout.top - border; + + for (GLToolbarItem* item : m_items) { + if (!item->is_visible()) + continue; + + if (item->is_separator()) + top -= separator_stride; + else { + const float right = left + icons_size; + const float bottom = top - icons_size; + + GLToolbarItem::EState state = item->get_state(); + const bool inside = (left <= (float)scaled_mouse_pos.x()) && + ((float)scaled_mouse_pos.x() <= right) && + (bottom <= (float)scaled_mouse_pos.y()) && + ((float)scaled_mouse_pos.y() <= top); + + switch (state) + { + case GLToolbarItem::Normal: + { + if (inside) { + item->set_state(GLToolbarItem::Hover); + parent.set_as_dirty(); + } + + break; + } + case GLToolbarItem::Hover: + { + if (!inside) { + item->set_state(GLToolbarItem::Normal); + parent.set_as_dirty(); + } + + break; + } + case GLToolbarItem::Pressed: + { + if (inside) { + item->set_state(GLToolbarItem::HoverPressed); + parent.set_as_dirty(); + } + + break; + } + case GLToolbarItem::HoverPressed: + { + if (!inside) { + item->set_state(GLToolbarItem::Pressed); + parent.set_as_dirty(); + } + + break; + } + case GLToolbarItem::Disabled: + { + if (inside) { + item->set_state(GLToolbarItem::HoverDisabled); + parent.set_as_dirty(); + } + + break; + } + case GLToolbarItem::HoverDisabled: + { + if (!inside) { + item->set_state(GLToolbarItem::Disabled); + parent.set_as_dirty(); + } + + break; + } + default: + { + break; + } + } + + top -= icon_stride; + } + } +} +#else void GLToolbar::update_hover_state_horizontal(const Vec2d& mouse_pos, GLCanvas3D& parent) { // NB: mouse_pos is already scaled appropriately @@ -889,18 +1108,16 @@ void GLToolbar::update_hover_state_vertical(const Vec2d& mouse_pos, GLCanvas3D& } } } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES GLToolbarItem* GLToolbar::get_item(const std::string& item_name) { if (!m_enabled) return nullptr; - for (GLToolbarItem* item : m_items) - { - if (item->get_name() == item_name) - { + for (GLToolbarItem* item : m_items) { + if (item->get_name() == item_name) return item; - } } return nullptr; } @@ -914,10 +1131,159 @@ int GLToolbar::contains_mouse(const Vec2d& mouse_pos, const GLCanvas3D& parent) { default: case Layout::Horizontal: { return contains_mouse_horizontal(mouse_pos, parent); } - case Layout::Vertical: { return contains_mouse_vertical(mouse_pos, parent); } + case Layout::Vertical: { return contains_mouse_vertical(mouse_pos, parent); } } } +#if ENABLE_GL_SHADERS_ATTRIBUTES +int GLToolbar::contains_mouse_horizontal(const Vec2d& mouse_pos, const GLCanvas3D& parent) const +{ + const Size cnv_size = parent.get_canvas_size(); + const Vec2d scaled_mouse_pos((mouse_pos.x() - 0.5 * (double)cnv_size.get_width()), (0.5 * (double)cnv_size.get_height() - mouse_pos.y())); + + const float icons_size = m_layout.icons_size * m_layout.scale; + const float separator_size = m_layout.separator_size * m_layout.scale; + const float gap_size = m_layout.gap_size * m_layout.scale; + const float border = m_layout.border * m_layout.scale; + + float left = m_layout.left + border; + const float top = m_layout.top - border; + + for (size_t id = 0; id < m_items.size(); ++id) { + GLToolbarItem* item = m_items[id]; + + if (!item->is_visible()) + continue; + + if (item->is_separator()) { + float right = left + separator_size; + const float bottom = top - icons_size; + + // mouse inside the separator + if (left <= (float)scaled_mouse_pos.x() && + (float)scaled_mouse_pos.x() <= right && + bottom <= (float)scaled_mouse_pos.y() && + (float)scaled_mouse_pos.y() <= top) + return id; + + left = right; + right += gap_size; + + if (id < m_items.size() - 1) { + // mouse inside the gap + if (left <= (float)scaled_mouse_pos.x() && + (float)scaled_mouse_pos.x() <= right && + bottom <= (float)scaled_mouse_pos.y() && + (float)scaled_mouse_pos.y() <= top) + return -2; + } + + left = right; + } + else { + float right = left + icons_size; + const float bottom = top - icons_size; + + // mouse inside the icon + if (left <= (float)scaled_mouse_pos.x() && + (float)scaled_mouse_pos.x() <= right && + bottom <= (float)scaled_mouse_pos.y() && + (float)scaled_mouse_pos.y() <= top) + return id; + + left = right; + right += gap_size; + + if (id < m_items.size() - 1) { + // mouse inside the gap + if (left <= (float)scaled_mouse_pos.x() && + (float)scaled_mouse_pos.x() <= right && + bottom <= (float)scaled_mouse_pos.y() && + (float)scaled_mouse_pos.y() <= top) + return -2; + } + + left = right; + } + } + + return -1; +} + +int GLToolbar::contains_mouse_vertical(const Vec2d& mouse_pos, const GLCanvas3D& parent) const +{ + const Size cnv_size = parent.get_canvas_size(); + const Vec2d scaled_mouse_pos((mouse_pos.x() - 0.5 * (double)cnv_size.get_width()), (0.5 * (double)cnv_size.get_height() - mouse_pos.y())); + + const float icons_size = m_layout.icons_size * m_layout.scale; + const float separator_size = m_layout.separator_size * m_layout.scale; + const float gap_size = m_layout.gap_size * m_layout.scale; + const float border = m_layout.border * m_layout.scale; + + const float left = m_layout.left + border; + float top = m_layout.top - border; + + for (size_t id = 0; id < m_items.size(); ++id) { + GLToolbarItem* item = m_items[id]; + + if (!item->is_visible()) + continue; + + if (item->is_separator()) { + const float right = left + icons_size; + float bottom = top - separator_size; + + // mouse inside the separator + if (left <= (float)scaled_mouse_pos.x() && + (float)scaled_mouse_pos.x() <= right && + bottom <= (float)scaled_mouse_pos.y() && + (float)scaled_mouse_pos.y() <= top) + return id; + + top = bottom; + bottom -= gap_size; + + if (id < m_items.size() - 1) { + // mouse inside the gap + if (left <= (float)scaled_mouse_pos.x() && + (float)scaled_mouse_pos.x() <= right && + bottom <= (float)scaled_mouse_pos.y() && + (float)scaled_mouse_pos.y() <= top) + return -2; + } + + top = bottom; + } + else { + const float right = left + icons_size; + float bottom = top - icons_size; + + // mouse inside the icon + if (left <= (float)scaled_mouse_pos.x() && + (float)scaled_mouse_pos.x() <= right && + bottom <= (float)scaled_mouse_pos.y() && + (float)scaled_mouse_pos.y() <= top) + return id; + + top = bottom; + bottom -= gap_size; + + if (id < m_items.size() - 1) { + // mouse inside the gap + if (left <= (float)scaled_mouse_pos.x() && + (float)scaled_mouse_pos.x() <= right && + bottom <= (float)scaled_mouse_pos.y() && + (float)scaled_mouse_pos.y() <= top) + return -2; + } + + top = bottom; + } + } + + return -1; +} +#else int GLToolbar::contains_mouse_horizontal(const Vec2d& mouse_pos, const GLCanvas3D& parent) const { // NB: mouse_pos is already scaled appropriately @@ -1062,14 +1428,92 @@ int GLToolbar::contains_mouse_vertical(const Vec2d& mouse_pos, const GLCanvas3D& return -1; } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLToolbar::render_background(float left, float top, float right, float bottom, float border_w, float border_h) const +{ + const unsigned int tex_id = m_background_texture.texture.get_id(); + const float tex_width = (float)m_background_texture.texture.get_width(); + const float tex_height = (float)m_background_texture.texture.get_height(); + if (tex_id != 0 && tex_width > 0.0f && tex_height > 0.0f) { + const float inv_tex_width = 1.0f / tex_width; + const float inv_tex_height = 1.0f / tex_height; + + const float internal_left = left + border_w; + const float internal_right = right - border_w; + const float internal_top = top - border_h; + const float internal_bottom = bottom + border_w; + + const float left_uv = 0.0f; + const float right_uv = 1.0f; + const float top_uv = 1.0f; + const float bottom_uv = 0.0f; + + const float internal_left_uv = (float)m_background_texture.metadata.left * inv_tex_width; + const float internal_right_uv = 1.0f - (float)m_background_texture.metadata.right * inv_tex_width; + const float internal_top_uv = 1.0f - (float)m_background_texture.metadata.top * inv_tex_height; + const float internal_bottom_uv = (float)m_background_texture.metadata.bottom * inv_tex_height; + + // top-left corner + if (m_layout.horizontal_orientation == Layout::HO_Left || m_layout.vertical_orientation == Layout::VO_Top) + GLTexture::render_sub_texture(tex_id, left, internal_left, internal_top, top, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + else + GLTexture::render_sub_texture(tex_id, left, internal_left, internal_top, top, { { left_uv, internal_top_uv }, { internal_left_uv, internal_top_uv }, { internal_left_uv, top_uv }, { left_uv, top_uv } }); + + // top edge + if (m_layout.vertical_orientation == Layout::VO_Top) + GLTexture::render_sub_texture(tex_id, internal_left, internal_right, internal_top, top, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + else + GLTexture::render_sub_texture(tex_id, internal_left, internal_right, internal_top, top, { { internal_left_uv, internal_top_uv }, { internal_right_uv, internal_top_uv }, { internal_right_uv, top_uv }, { internal_left_uv, top_uv } }); + + // top-right corner + if (m_layout.horizontal_orientation == Layout::HO_Right || m_layout.vertical_orientation == Layout::VO_Top) + GLTexture::render_sub_texture(tex_id, internal_right, right, internal_top, top, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + else + GLTexture::render_sub_texture(tex_id, internal_right, right, internal_top, top, { { internal_right_uv, internal_top_uv }, { right_uv, internal_top_uv }, { right_uv, top_uv }, { internal_right_uv, top_uv } }); + + // center-left edge + if (m_layout.horizontal_orientation == Layout::HO_Left) + GLTexture::render_sub_texture(tex_id, left, internal_left, internal_bottom, internal_top, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + else + GLTexture::render_sub_texture(tex_id, left, internal_left, internal_bottom, internal_top, { { left_uv, internal_bottom_uv }, { internal_left_uv, internal_bottom_uv }, { internal_left_uv, internal_top_uv }, { left_uv, internal_top_uv } }); + + // center + GLTexture::render_sub_texture(tex_id, internal_left, internal_right, internal_bottom, internal_top, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + + // center-right edge + if (m_layout.horizontal_orientation == Layout::HO_Right) + GLTexture::render_sub_texture(tex_id, internal_right, right, internal_bottom, internal_top, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + else + GLTexture::render_sub_texture(tex_id, internal_right, right, internal_bottom, internal_top, { { internal_right_uv, internal_bottom_uv }, { right_uv, internal_bottom_uv }, { right_uv, internal_top_uv }, { internal_right_uv, internal_top_uv } }); + + // bottom-left corner + if (m_layout.horizontal_orientation == Layout::HO_Left || m_layout.vertical_orientation == Layout::VO_Bottom) + GLTexture::render_sub_texture(tex_id, left, internal_left, bottom, internal_bottom, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + else + GLTexture::render_sub_texture(tex_id, left, internal_left, bottom, internal_bottom, { { left_uv, bottom_uv }, { internal_left_uv, bottom_uv }, { internal_left_uv, internal_bottom_uv }, { left_uv, internal_bottom_uv } }); + + // bottom edge + if (m_layout.vertical_orientation == Layout::VO_Bottom) + GLTexture::render_sub_texture(tex_id, internal_left, internal_right, bottom, internal_bottom, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + else + GLTexture::render_sub_texture(tex_id, internal_left, internal_right, bottom, internal_bottom, { { internal_left_uv, bottom_uv }, { internal_right_uv, bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_left_uv, internal_bottom_uv } }); + + // bottom-right corner + if (m_layout.horizontal_orientation == Layout::HO_Right || m_layout.vertical_orientation == Layout::VO_Bottom) + GLTexture::render_sub_texture(tex_id, internal_right, right, bottom, internal_bottom, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + else + GLTexture::render_sub_texture(tex_id, internal_right, right, bottom, internal_bottom, { { internal_right_uv, bottom_uv }, { right_uv, bottom_uv }, { right_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv } }); + } +} +#else void GLToolbar::render_background(float left, float top, float right, float bottom, float border) const { unsigned int tex_id = m_background_texture.texture.get_id(); float tex_width = (float)m_background_texture.texture.get_width(); float tex_height = (float)m_background_texture.texture.get_height(); - if ((tex_id != 0) && (tex_width > 0) && (tex_height > 0)) - { + if (tex_id != 0 && tex_width > 0 && tex_height > 0) { float inv_tex_width = (tex_width != 0.0f) ? 1.0f / tex_width : 0.0f; float inv_tex_height = (tex_height != 0.0f) ? 1.0f / tex_height : 0.0f; @@ -1140,7 +1584,78 @@ void GLToolbar::render_background(float left, float top, float right, float bott GLTexture::render_sub_texture(tex_id, internal_right, right, bottom, internal_bottom, { { internal_right_uv, bottom_uv }, { right_uv, bottom_uv }, { right_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv } }); } } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLToolbar::render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighted_item) +{ + // arrow texture not initialized + if (m_arrow_texture.get_id() == 0) + return; + + const Size cnv_size = parent.get_canvas_size(); + const float cnv_w = (float)cnv_size.get_width(); + const float cnv_h = (float)cnv_size.get_height(); + + if (cnv_w == 0 || cnv_h == 0) + return; + + const float inv_cnv_w = 1.0f / cnv_w; + const float inv_cnv_h = 1.0f / cnv_h; + + const float icons_size_x = 2.0f * m_layout.icons_size * m_layout.scale * inv_cnv_w; + const float icons_size_y = 2.0f * m_layout.icons_size * m_layout.scale * inv_cnv_h; + const float separator_size = 2.0f * m_layout.separator_size * m_layout.scale * inv_cnv_w; + const float gap_size = 2.0f * m_layout.gap_size * m_layout.scale * inv_cnv_w; + const float border_x = 2.0f * m_layout.border * m_layout.scale * inv_cnv_w; + const float border_y = 2.0f * m_layout.border * m_layout.scale * inv_cnv_h; + + const float separator_stride = separator_size + gap_size; + const float icon_stride = icons_size_x + gap_size; + + float left = 2.0f * m_layout.left * inv_cnv_w + border_x; + float top = 2.0f * m_layout.top * inv_cnv_h - 2.0f * border_y - icons_size_y; + + bool found = false; + for (const GLToolbarItem* item : m_items) { + if (!item->is_visible()) + continue; + + if (item->is_separator()) + left += separator_stride; + else { + if (item->get_name() == highlighted_item->get_name()) { + found = true; + break; + } + left += icon_stride; + } + } + if (!found) + return; + + const float right = left + icons_size_x; + + const unsigned int tex_id = m_arrow_texture.get_id(); + // arrow width and height + const float arr_tex_width = (float)m_arrow_texture.get_width(); + const float arr_tex_height = (float)m_arrow_texture.get_height(); + if (tex_id != 0 && arr_tex_width > 0.0f && arr_tex_height > 0.0f) { + const float arrow_size_x = 2.0f * m_layout.scale * arr_tex_width * inv_cnv_w; + const float arrow_size_y = 2.0f * m_layout.scale * arr_tex_height * inv_cnv_h; + + const float left_uv = 0.0f; + const float right_uv = 1.0f; + const float top_uv = 1.0f; + const float bottom_uv = 0.0f; + + top -= border_y; + const float bottom = top - arrow_size_y * icons_size_x / arrow_size_x; + + GLTexture::render_sub_texture(tex_id, left, right, bottom, top, { { left_uv, top_uv }, { right_uv, top_uv }, { right_uv, bottom_uv }, { left_uv, bottom_uv } }); + } +} +#else void GLToolbar::render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighted_item) { // arrow texture not initialized @@ -1206,7 +1721,119 @@ void GLToolbar::render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighte GLTexture::render_sub_texture(tex_id, internal_left, internal_right, internal_bottom, internal_top, { { internal_left_uv, internal_top_uv }, { internal_right_uv, internal_top_uv }, { internal_right_uv, internal_bottom_uv }, { internal_left_uv, internal_bottom_uv } }); } } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLToolbar::render_horizontal(const GLCanvas3D& parent) +{ + const Size cnv_size = parent.get_canvas_size(); + const float cnv_w = (float)cnv_size.get_width(); + const float cnv_h = (float)cnv_size.get_height(); + + if (cnv_w == 0 || cnv_h == 0) + return; + + const unsigned int tex_id = m_icons_texture.get_id(); + const int tex_width = m_icons_texture.get_width(); + const int tex_height = m_icons_texture.get_height(); + + if (tex_id == 0 || tex_width <= 0 || tex_height <= 0) + return; + + const float inv_cnv_w = 1.0f / cnv_w; + const float inv_cnv_h = 1.0f / cnv_h; + + const float icons_size_x = 2.0f * m_layout.icons_size * m_layout.scale * inv_cnv_w; + const float icons_size_y = 2.0f * m_layout.icons_size * m_layout.scale * inv_cnv_h; + const float separator_size = 2.0f * m_layout.separator_size * m_layout.scale * inv_cnv_w; + const float gap_size = 2.0f * m_layout.gap_size * m_layout.scale * inv_cnv_w; + const float border_w = 2.0f * m_layout.border * m_layout.scale * inv_cnv_w; + const float border_h = 2.0f * m_layout.border * m_layout.scale * inv_cnv_h; + const float width = 2.0f * get_width() * inv_cnv_w; + const float height = 2.0f * get_height() * inv_cnv_h; + + const float separator_stride = separator_size + gap_size; + const float icon_stride = icons_size_x + gap_size; + + float left = 2.0f * m_layout.left * inv_cnv_w; + float top = 2.0f * m_layout.top * inv_cnv_h; + const float right = left + width; + const float bottom = top - height; + + render_background(left, top, right, bottom, border_w, border_h); + + left += border_w; + top -= border_h; + + // renders icons + for (const GLToolbarItem* item : m_items) { + if (!item->is_visible()) + continue; + + if (item->is_separator()) + left += separator_stride; + else { + item->render(parent, tex_id, left, left + icons_size_x, top - icons_size_y, top, (unsigned int)tex_width, (unsigned int)tex_height, (unsigned int)(m_layout.icons_size * m_layout.scale)); + left += icon_stride; + } + } +} + +void GLToolbar::render_vertical(const GLCanvas3D& parent) +{ + const Size cnv_size = parent.get_canvas_size(); + const float cnv_w = (float)cnv_size.get_width(); + const float cnv_h = (float)cnv_size.get_height(); + + if (cnv_w == 0 || cnv_h == 0) + return; + + const unsigned int tex_id = m_icons_texture.get_id(); + const int tex_width = m_icons_texture.get_width(); + const int tex_height = m_icons_texture.get_height(); + + if (tex_id == 0 || tex_width <= 0 || tex_height <= 0) + return; + + const float inv_cnv_w = 1.0f / cnv_w; + const float inv_cnv_h = 1.0f / cnv_h; + + const float icons_size_x = 2.0f * m_layout.icons_size * m_layout.scale * inv_cnv_w; + const float icons_size_y = 2.0f * m_layout.icons_size * m_layout.scale * inv_cnv_h; + const float separator_size = 2.0f * m_layout.separator_size * m_layout.scale * inv_cnv_h; + const float gap_size = 2.0f * m_layout.gap_size * m_layout.scale * inv_cnv_h; + const float border_w = 2.0f * m_layout.border * m_layout.scale * inv_cnv_w; + const float border_h = 2.0f * m_layout.border * m_layout.scale * inv_cnv_h; + const float width = 2.0f * get_width() * inv_cnv_w; + const float height = 2.0f * get_height() * inv_cnv_h; + + const float separator_stride = separator_size + gap_size; + const float icon_stride = icons_size_y + gap_size; + + float left = 2.0f * m_layout.left * inv_cnv_w; + float top = 2.0f * m_layout.top * inv_cnv_h; + const float right = left + width; + const float bottom = top - height; + + render_background(left, top, right, bottom, border_w, border_h); + + left += border_w; + top -= border_h; + + // renders icons + for (const GLToolbarItem* item : m_items) { + if (!item->is_visible()) + continue; + + if (item->is_separator()) + top -= separator_stride; + else { + item->render(parent, tex_id, left, left + icons_size_x, top - icons_size_y, top, (unsigned int)tex_width, (unsigned int)tex_height, (unsigned int)(m_layout.icons_size * m_layout.scale)); + top -= icon_stride; + } + } +} +#else void GLToolbar::render_horizontal(const GLCanvas3D& parent) { unsigned int tex_id = m_icons_texture.get_id(); @@ -1300,6 +1927,7 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) } } } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES bool GLToolbar::generate_icons_texture() { diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp index 5740db3e6..bd3204d63 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -153,7 +153,12 @@ public: // returns true if the state changes bool update_enabled_state(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render(const GLCanvas3D& parent, unsigned int tex_id, float left, float right, float bottom, float top, unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) const; +#else void render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) const; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + private: void set_visible(bool visible) { m_data.visible = visible; } @@ -246,7 +251,11 @@ private: GLTexture m_icons_texture; bool m_icons_texture_dirty; BackgroundTexture m_background_texture; +#if ENABLE_GL_SHADERS_ATTRIBUTES + GLTexture m_arrow_texture; +#else BackgroundTexture m_arrow_texture; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES Layout m_layout; ItemsList m_items; @@ -273,7 +282,11 @@ public: bool init(const BackgroundTexture::Metadata& background_texture); +#if ENABLE_GL_SHADERS_ATTRIBUTES + bool init_arrow(const std::string& filename); +#else bool init_arrow(const BackgroundTexture::Metadata& arrow_texture); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES Layout::EType get_layout_type() const; void set_layout_type(Layout::EType type); @@ -344,7 +357,11 @@ private: int contains_mouse_horizontal(const Vec2d& mouse_pos, const GLCanvas3D& parent) const; int contains_mouse_vertical(const Vec2d& mouse_pos, const GLCanvas3D& parent) const; +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render_background(float left, float top, float right, float bottom, float border_w, float border_h) const; +#else void render_background(float left, float top, float right, float bottom, float border) const; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES void render_horizontal(const GLCanvas3D& parent); void render_vertical(const GLCanvas3D& parent); diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index a0b674e27..5886be028 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #if __APPLE__ #import @@ -476,50 +477,132 @@ void about() void desktop_open_datadir_folder() { + boost::filesystem::path path(data_dir()); + desktop_open_folder(std::move(path)); +} + +void desktop_open_folder(const boost::filesystem::path& path) +{ + if (!boost::filesystem::is_directory(path)) + return; + // Execute command to open a file explorer, platform dependent. - // FIXME: The const_casts aren't needed in wxWidgets 3.1, remove them when we upgrade. - - const auto path = data_dir(); #ifdef _WIN32 - const wxString widepath = from_u8(path); - const wchar_t *argv[] = { L"explorer", widepath.GetData(), nullptr }; - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); + const wxString widepath = path.wstring(); + const wchar_t* argv[] = { L"explorer", widepath.GetData(), nullptr }; + ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); #elif __APPLE__ - const char *argv[] = { "open", path.data(), nullptr }; - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); + const char* argv[] = { "open", path.string().c_str(), nullptr }; + ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); #else - const char *argv[] = { "xdg-open", path.data(), nullptr }; - - // Check if we're running in an AppImage container, if so, we need to remove AppImage's env vars, - // because they may mess up the environment expected by the file manager. - // Mostly this is about LD_LIBRARY_PATH, but we remove a few more too for good measure. - if (wxGetEnv("APPIMAGE", nullptr)) { - // We're running from AppImage - wxEnvVariableHashMap env_vars; - wxGetEnvMap(&env_vars); - - env_vars.erase("APPIMAGE"); - env_vars.erase("APPDIR"); - env_vars.erase("LD_LIBRARY_PATH"); - env_vars.erase("LD_PRELOAD"); - env_vars.erase("UNION_PRELOAD"); - - wxExecuteEnv exec_env; - exec_env.env = std::move(env_vars); - - wxString owd; - if (wxGetEnv("OWD", &owd)) { - // This is the original work directory from which the AppImage image was run, - // set it as CWD for the child process: - exec_env.cwd = std::move(owd); - } - - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, &exec_env); - } else { - // Looks like we're NOT running from AppImage, we'll make no changes to the environment. - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, nullptr); - } + const char* argv[] = { "xdg-open", path.string().c_str(), nullptr }; + desktop_execute(argv); #endif } -} } +#ifdef __linux__ +namespace { +wxExecuteEnv get_appimage_exec_env() +{ + // If we're running in an AppImage container, we need to remove AppImage's env vars, + // because they may mess up the environment expected by the file manager. + // Mostly this is about LD_LIBRARY_PATH, but we remove a few more too for good measure. + wxEnvVariableHashMap env_vars; + wxGetEnvMap(&env_vars); + + env_vars.erase("APPIMAGE"); + env_vars.erase("APPDIR"); + env_vars.erase("LD_LIBRARY_PATH"); + env_vars.erase("LD_PRELOAD"); + env_vars.erase("UNION_PRELOAD"); + + wxExecuteEnv exec_env; + exec_env.env = std::move(env_vars); + + wxString owd; + if (wxGetEnv("OWD", &owd)) { + // This is the original work directory from which the AppImage image was run, + // set it as CWD for the child process: + exec_env.cwd = std::move(owd); + } + return exec_env; +} +} // namespace +void desktop_execute(const char* argv[]) +{ + // Check if we're running in an AppImage container, if so, we need to remove AppImage's env vars, + // because they may mess up the environment expected by the file manager. + // Mostly this is about LD_LIBRARY_PATH, but we remove a few more too for good measure. + if (wxGetEnv("APPIMAGE", nullptr)) { + // We're running from AppImage + wxExecuteEnv exec_env = get_appimage_exec_env(); + ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, &exec_env); + } + else { + // Looks like we're NOT running from AppImage, we'll make no changes to the environment. + ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, nullptr); + } +} +void desktop_execute_get_result(wxString command, wxArrayString& output) +{ + output.Clear(); + //Check if we're running in an AppImage container, if so, we need to remove AppImage's env vars, + // because they may mess up the environment expected by the file manager. + // Mostly this is about LD_LIBRARY_PATH, but we remove a few more too for good measure. + if (wxGetEnv("APPIMAGE", nullptr)) { + // We're running from AppImage + wxExecuteEnv exec_env = get_appimage_exec_env(); + ::wxExecute(command, output, wxEXEC_SYNC | wxEXEC_NOEVENTS, &exec_env); + } else { + // Looks like we're NOT running from AppImage, we'll make no changes to the environment. + ::wxExecute(command, output, wxEXEC_SYNC | wxEXEC_NOEVENTS); + } +} +#endif // __linux__ + +#ifdef _WIN32 +bool create_process(const boost::filesystem::path& path, const std::wstring& cmd_opt, std::string& error_msg) +{ + // find updater exe + if (boost::filesystem::exists(path)) { + // Using quoted string as mentioned in CreateProcessW docs. + std::wstring wcmd = L"\"" + path.wstring() + L"\""; + if (!cmd_opt.empty()) + wcmd += L" " + cmd_opt; + + // additional information + STARTUPINFOW si; + PROCESS_INFORMATION pi; + + // set the size of the structures + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + ZeroMemory(&pi, sizeof(pi)); + + // start the program up + if (CreateProcessW(NULL, // the path + wcmd.data(), // Command line + NULL, // Process handle not inheritable + NULL, // Thread handle not inheritable + FALSE, // Set handle inheritance to FALSE + 0, // No creation flags + NULL, // Use parent's environment block + NULL, // Use parent's starting directory + &si, // Pointer to STARTUPINFO structure + &pi // Pointer to PROCESS_INFORMATION structure (removed extra parentheses) + )) { + // Close process and thread handles. + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return true; + } + else + error_msg = "CreateProcessW failed to create process " + boost::nowide::narrow(path.wstring()); + } + else + error_msg = "Executable doesn't exists. Path: " + boost::nowide::narrow(path.wstring()); + return false; +} +#endif //_WIN32 + +} } // namespaces GUI / Slic3r diff --git a/src/slic3r/GUI/GUI.hpp b/src/slic3r/GUI/GUI.hpp index 20c882878..cb7cf5487 100644 --- a/src/slic3r/GUI/GUI.hpp +++ b/src/slic3r/GUI/GUI.hpp @@ -13,6 +13,7 @@ class wxWindow; class wxMenuBar; class wxComboCtrl; class wxFileDialog; +class wxArrayString; class wxTopLevelWindow; namespace Slic3r { @@ -80,6 +81,24 @@ boost::filesystem::path into_path(const wxString &str); extern void about(); // Ask the destop to open the datadir using the default file explorer. extern void desktop_open_datadir_folder(); +// Ask the destop to open the directory specified by path using the default file explorer. +void desktop_open_folder(const boost::filesystem::path& path); + +#ifdef __linux__ +// Calling wxExecute on Linux with proper handling of AppImage's env vars. +// argv example: { "xdg-open", path.c_str(), nullptr } +void desktop_execute(const char* argv[]); +void desktop_execute_get_result(wxString command, wxArrayString& output); +#endif // __linux__ + +#ifdef _WIN32 +// Call CreateProcessW to start external proccess on path +// returns true on success +// path should contain path to the process +// cmd_opt can be empty or contain command line options. Example: L"/silent" +// error_msg will contain error message if create_process return false +bool create_process(const boost::filesystem::path& path, const std::wstring& cmd_opt, std::string& error_msg); +#endif //_WIN32 } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index a33742d14..76f321d89 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -57,6 +57,7 @@ #include "../Utils/PrintHost.hpp" #include "../Utils/Process.hpp" #include "../Utils/MacDarkMode.hpp" +#include "../Utils/AppUpdater.hpp" #include "slic3r/Config/Snapshot.hpp" #include "ConfigSnapshotDialog.hpp" #include "FirmwareDialog.hpp" @@ -430,50 +431,21 @@ bool static check_old_linux_datadir(const wxString& app_name) { } #endif - #ifdef _WIN32 +#if 0 // External Updater is replaced with AppUpdater.cpp static bool run_updater_win() { // find updater exe boost::filesystem::path path_updater = boost::dll::program_location().parent_path() / "prusaslicer-updater.exe"; - if (boost::filesystem::exists(path_updater)) { - // run updater. Original args: /silent -restartapp prusa-slicer.exe -startappfirst - - // Using quoted string as mentioned in CreateProcessW docs, silent execution parameter. - std::wstring wcmd = L"\"" + path_updater.wstring() + L"\" /silent"; - - // additional information - STARTUPINFOW si; - PROCESS_INFORMATION pi; - - // set the size of the structures - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - ZeroMemory(&pi, sizeof(pi)); - - // start the program up - if (CreateProcessW(NULL, // the path - wcmd.data(), // Command line - NULL, // Process handle not inheritable - NULL, // Thread handle not inheritable - FALSE, // Set handle inheritance to FALSE - 0, // No creation flags - NULL, // Use parent's environment block - NULL, // Use parent's starting directory - &si, // Pointer to STARTUPINFO structure - &pi // Pointer to PROCESS_INFORMATION structure (removed extra parentheses) - )) { - // Close process and thread handles. - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - return true; - } else { - BOOST_LOG_TRIVIAL(error) << "Failed to start prusaslicer-updater.exe with command " << wcmd; - } - } - return false; + // run updater. Original args: /silent -restartapp prusa-slicer.exe -startappfirst + std::string msg; + bool res = create_process(path_updater, L"/silent", msg); + if (!res) + BOOST_LOG_TRIVIAL(error) << msg; + return res; } -#endif //_WIN32 +#endif // 0 +#endif // _WIN32 struct FileWildcards { std::string_view title; @@ -496,9 +468,47 @@ static const FileWildcards file_wildcards_by_type[FT_SIZE] = { /* FT_TEX */ { "Texture"sv, { ".png"sv, ".svg"sv } }, - /* FT_SL1 */ { "Masked SLA files"sv, { ".sl1"sv, ".sl1s"sv } }, + /* FT_SL1 */ { "Masked SLA files"sv, { ".sl1"sv, ".sl1s"sv, ".pwmx"sv } }, }; +#if ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR +wxString file_wildcards(FileType file_type) +{ + const FileWildcards& data = file_wildcards_by_type[file_type]; + std::string title; + std::string mask; + + // Generate cumulative first item + for (const std::string_view& ext : data.file_extensions) { + if (title.empty()) { + title = "*"; + title += ext; + mask = title; + } + else { + title += ", *"; + title += ext; + mask += ";*"; + mask += ext; + } + mask += ";*"; + mask += boost::to_upper_copy(std::string(ext)); + } + + wxString ret = GUI::format_wxstr("%s (%s)|%s", data.title, title, mask); + + // Adds an item for each of the extensions + if (data.file_extensions.size() > 1) { + for (const std::string_view& ext : data.file_extensions) { + title = "*"; + title += ext; + ret += GUI::format_wxstr("|%s (%s)|%s", data.title, title, title); + } + } + + return ret; +} +#else // This function produces a Win32 file dialog file template mask to be consumed by wxWidgets on all platforms. // The function accepts a custom extension parameter. If the parameter is provided, the custom extension // will be added as a fist to the list. This is important for a "file save" dialog on OSX, which strips @@ -551,8 +561,10 @@ wxString file_wildcards(FileType file_type, const std::string &custom_extension) mask += ";*"; mask += boost::to_upper_copy(std::string(ext)); } + return GUI::format_wxstr("%s (%s)|%s", data.title, title, mask); } +#endif // ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)).utf8_str().data(); } @@ -754,7 +766,7 @@ void GUI_App::post_init() if (boost::algorithm::iends_with(filename, ".amf") || boost::algorithm::iends_with(filename, ".amf.xml") || boost::algorithm::iends_with(filename, ".3mf")) - this->plater()->set_project_filename(filename); + this->plater()->set_project_filename(from_u8(filename)); } } if (! this->init_params->extra_config.empty()) @@ -776,18 +788,13 @@ void GUI_App::post_init() CallAfter([this] { bool cw_showed = this->config_wizard_startup(); this->preset_updater->sync(preset_bundle); + this->app_version_check(false); if (! cw_showed) { // The CallAfter is needed as well, without it, GL extensions did not show. // Also, we only want to show this when the wizard does not, so the new user // sees something else than "we want something" on the first start. show_send_system_info_dialog_if_needed(); } - #ifdef _WIN32 - // Run external updater on Windows if version check is enabled. - if (this->preset_updater->version_check_enabled() && ! run_updater_win()) - // "prusaslicer-updater.exe" was not started, run our own update check. - #endif // _WIN32 - this->preset_updater->slic3r_update_notify(); }); } @@ -813,6 +820,8 @@ GUI_App::GUI_App(EAppMode mode) { //app config initializes early becasuse it is used in instance checking in PrusaSlicer.cpp this->init_app_config(); + // init app downloader after path to datadir is set + m_app_updater = std::make_unique(); } GUI_App::~GUI_App() @@ -871,8 +880,10 @@ void GUI_App::init_app_config() { // Profiles for the alpha are stored into the PrusaSlicer-alpha directory to not mix with the current release. // SetAppName(SLIC3R_APP_KEY); -// SetAppName(SLIC3R_APP_KEY "-alpha"); - SetAppName(SLIC3R_APP_KEY "-beta"); + SetAppName(SLIC3R_APP_KEY "-alpha"); +// SetAppName(SLIC3R_APP_KEY "-beta"); + + // SetAppDisplayName(SLIC3R_APP_NAME); // Set the Slic3r data directory at the Slic3r XS module. @@ -1200,23 +1211,8 @@ bool GUI_App::on_init_inner() #endif // __WXMSW__ preset_updater = new PresetUpdater(); - Bind(EVT_SLIC3R_VERSION_ONLINE, [this](const wxCommandEvent& evt) { - app_config->set("version_online", into_u8(evt.GetString())); - app_config->save(); - std::string opt = app_config->get("notify_release"); - if (this->plater_ != nullptr && (opt == "all" || opt == "release")) { - if (*Semver::parse(SLIC3R_VERSION) < *Semver::parse(into_u8(evt.GetString()))) { - this->plater_->get_notification_manager()->push_notification(NotificationType::NewAppAvailable - , NotificationManager::NotificationLevel::ImportantNotificationLevel - , Slic3r::format(_u8L("New release version %1% is available."), evt.GetString()) - , _u8L("See Download page.") - , [](wxEvtHandler* evnthndlr) {wxGetApp().open_web_page_localized("https://www.prusa3d.com/slicerweb"); return true; } - ); - } - } - }); + Bind(EVT_SLIC3R_VERSION_ONLINE, &GUI_App::on_version_read, this); Bind(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE, [this](const wxCommandEvent& evt) { - app_config->save(); if (this->plater_ != nullptr && app_config->get("notify_release") == "all") { std::string evt_string = into_u8(evt.GetString()); if (*Semver::parse(SLIC3R_VERSION) < *Semver::parse(evt_string)) { @@ -1230,6 +1226,22 @@ bool GUI_App::on_init_inner() } } }); + Bind(EVT_SLIC3R_APP_DOWNLOAD_PROGRESS, [this](const wxCommandEvent& evt) { + //lm:This does not force a render. The progress bar only updateswhen the mouse is moved. + if (this->plater_ != nullptr) + this->plater_->get_notification_manager()->set_download_progress_percentage((float)std::stoi(into_u8(evt.GetString())) / 100.f ); + }); + + Bind(EVT_SLIC3R_APP_DOWNLOAD_FAILED, [this](const wxCommandEvent& evt) { + if (this->plater_ != nullptr) + this->plater_->get_notification_manager()->close_notification_of_type(NotificationType::AppDownload); + if(!evt.GetString().IsEmpty()) + show_error(nullptr, evt.GetString()); + }); + + Bind(EVT_SLIC3R_APP_OPEN_FAILED, [](const wxCommandEvent& evt) { + show_error(nullptr, evt.GetString()); + }); } else { #ifdef __WXMSW__ @@ -1285,8 +1297,13 @@ bool GUI_App::on_init_inner() else load_current_presets(); + // Save the active profiles as a "saved into project". + update_saved_preset_from_current_preset(); + if (plater_ != nullptr) { + // Save the names of active presets and project specific config into ProjectDirtyStateManager. plater_->reset_project_dirty_initial_presets(); + // Update Project dirty state, update application title bar. plater_->update_project_dirty_from_presets(); } @@ -2235,7 +2252,8 @@ void GUI_App::add_config_menu(wxMenuBar *menu) local_menu->Append(config_id_base + ConfigMenuWizard, config_wizard_name + dots, config_wizard_tooltip); local_menu->Append(config_id_base + ConfigMenuSnapshots, _L("&Configuration Snapshots") + dots, _L("Inspect / activate configuration snapshots")); local_menu->Append(config_id_base + ConfigMenuTakeSnapshot, _L("Take Configuration &Snapshot"), _L("Capture a configuration snapshot")); - local_menu->Append(config_id_base + ConfigMenuUpdate, _L("Check for Configuration Updates"), _L("Check for configuration updates")); + local_menu->Append(config_id_base + ConfigMenuUpdateConf, _L("Check for Configuration Updates"), _L("Check for configuration updates")); + local_menu->Append(config_id_base + ConfigMenuUpdateApp, _L("Check for Application Updates"), _L("Check for new version of application")); #if defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) //if (DesktopIntegrationDialog::integration_possible()) local_menu->Append(config_id_base + ConfigMenuDesktopIntegration, _L("Desktop Integration"), _L("Desktop Integration")); @@ -2277,9 +2295,12 @@ void GUI_App::add_config_menu(wxMenuBar *menu) case ConfigMenuWizard: run_wizard(ConfigWizard::RR_USER); break; - case ConfigMenuUpdate: + case ConfigMenuUpdateConf: check_updates(true); break; + case ConfigMenuUpdateApp: + app_version_check(true); + break; #ifdef __linux__ case ConfigMenuDesktopIntegration: show_desktop_integration_dialog(); @@ -2447,16 +2468,13 @@ void GUI_App::update_saved_preset_from_current_preset() } } -std::vector> GUI_App::get_selected_presets() const +std::vector GUI_App::get_active_preset_collections() const { - std::vector> ret; + std::vector ret; PrinterTechnology printer_technology = preset_bundle->printers.get_edited_preset().printer_technology(); - for (Tab* tab : tabs_list) { - if (tab->supports_printer_technology(printer_technology)) { - const PresetCollection* presets = tab->get_presets(); - ret.push_back({ static_cast(presets->type()), presets->get_selected_preset_name() }); - } - } + for (const Tab* tab : tabs_list) + if (tab->supports_printer_technology(printer_technology)) + ret.push_back(tab->get_presets()); return ret; } @@ -3222,5 +3240,87 @@ void GUI_App::associate_gcode_files() } #endif // __WXMSW__ + +void GUI_App::on_version_read(wxCommandEvent& evt) +{ + app_config->set("version_online", into_u8(evt.GetString())); + app_config->save(); + std::string opt = app_config->get("notify_release"); + if (this->plater_ == nullptr || (opt != "all" && opt != "release")) { + return; + } + if (*Semver::parse(SLIC3R_VERSION) >= *Semver::parse(into_u8(evt.GetString()))) { + return; + } + // notification + /* + this->plater_->get_notification_manager()->push_notification(NotificationType::NewAppAvailable + , NotificationManager::NotificationLevel::ImportantNotificationLevel + , Slic3r::format(_u8L("New release version %1% is available."), evt.GetString()) + , _u8L("See Download page.") + , [](wxEvtHandler* evnthndlr) {wxGetApp().open_web_page_localized("https://www.prusa3d.com/slicerweb"); return true; } + ); + */ + // updater + // read triggered_by_user that was set when calling GUI_App::app_version_check + app_updater(m_app_updater->get_triggered_by_user()); +} + +void GUI_App::app_updater(bool from_user) +{ + DownloadAppData app_data = m_app_updater->get_app_data(); + + if (from_user && (!app_data.version || *app_data.version <= *Semver::parse(SLIC3R_VERSION))) + { + BOOST_LOG_TRIVIAL(info) << "There is no newer version online."; + MsgNoAppUpdates no_update_dialog; + no_update_dialog.ShowModal(); + return; + + } + + assert(!app_data.url.empty()); + assert(!app_data.target_path.empty()); + + // dialog with new version info + AppUpdateAvailableDialog dialog(*Semver::parse(SLIC3R_VERSION), *app_data.version); + auto dialog_result = dialog.ShowModal(); + // checkbox "do not show again" + if (dialog.disable_version_check()) { + app_config->set("notify_release", "none"); + } + // Doesn't wish to update + if (dialog_result != wxID_OK) { + return; + } + // dialog with new version download (installer or app dependent on system) including path selection + AppUpdateDownloadDialog dwnld_dlg(*app_data.version, app_data.target_path); + dialog_result = dwnld_dlg.ShowModal(); + // Doesn't wish to download + if (dialog_result != wxID_OK) { + return; + } + app_data.target_path =dwnld_dlg.get_download_path(); + + // start download + this->plater_->get_notification_manager()->push_download_progress_notification(_utf8("Download"), std::bind(&AppUpdater::cancel_callback, this->m_app_updater.get())); + app_data.start_after = dwnld_dlg.run_after_download(); + m_app_updater->set_app_data(std::move(app_data)); + m_app_updater->sync_download(); +} + +void GUI_App::app_version_check(bool from_user) +{ + if (from_user) { + if (m_app_updater->get_download_ongoing()) { + MessageDialog msgdlg(nullptr, _L("Download of new version is already ongoing. Do you wish to continue?"), _L("Notice"), wxYES_NO); + if (msgdlg.ShowModal() != wxID_YES) + return; + } + } + std::string version_check_url = app_config->version_check_url(); + m_app_updater->sync_version(version_check_url, from_user); +} + } // GUI } //Slic3r diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index ac80fc8b2..ce07fb772 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -32,6 +32,7 @@ class PresetUpdater; class ModelObject; class PrintHostJobQueue; class Model; +class AppUpdater; namespace GUI{ @@ -71,13 +72,18 @@ enum FileType FT_SIZE, }; +#if ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR +extern wxString file_wildcards(FileType file_type); +#else extern wxString file_wildcards(FileType file_type, const std::string &custom_extension = std::string{}); +#endif // ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR enum ConfigMenuIDs { ConfigMenuWizard, ConfigMenuSnapshots, ConfigMenuTakeSnapshot, - ConfigMenuUpdate, + ConfigMenuUpdateConf, + ConfigMenuUpdateApp, ConfigMenuDesktopIntegration, ConfigMenuPreferences, ConfigMenuModeSimple, @@ -152,6 +158,7 @@ private: std::unique_ptr m_imgui; std::unique_ptr m_printhost_job_queue; std::unique_ptr m_other_instance_message_handler; + std::unique_ptr m_app_updater; std::unique_ptr m_single_instance_checker; std::string m_instance_hash_string; size_t m_instance_hash_int; @@ -252,7 +259,7 @@ public: bool has_unsaved_preset_changes() const; bool has_current_preset_changes() const; void update_saved_preset_from_current_preset(); - std::vector> get_selected_presets() const; + std::vector get_active_preset_collections() const; bool check_and_save_current_preset_changes(const wxString& caption, const wxString& header, bool remember_choice = true, bool use_dont_save_insted_of_discard = false); void apply_keeped_preset_modifications(); bool check_and_keep_current_preset_changes(const wxString& caption, const wxString& header, int action_buttons, bool* postponed_apply_of_keeped_changes = nullptr); @@ -356,6 +363,11 @@ private: // Returns true if the configuration is fine. // Returns true if the configuration is not compatible and the user decided to rather close the slicer instead of reconfiguring. bool check_updates(const bool verbose); + void on_version_read(wxCommandEvent& evt); + // if the data from version file are already downloaded, shows dialogs to start download of new version of app + void app_updater(bool from_user); + // inititate read of version file online in separate thread + void app_version_check(bool from_user); bool m_datadir_redefined { false }; }; diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 2b551eaca..4370a2f64 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -821,7 +821,7 @@ void ObjectList::paste_objects_into_list(const std::vector& object_idxs) wxDataViewItemArray items; for (const size_t object : object_idxs) { - add_object_to_list(object); + add_object_to_list(object, false); items.Add(m_objects_model->GetItemById(object)); } @@ -1691,16 +1691,16 @@ void ObjectList::load_shape_object(const std::string& type_name) if (selection.get_object_idx() != -1) return; - const int obj_idx = m_objects->size(); - if (obj_idx < 0) - return; - take_snapshot(_L("Add Shape")); // Create mesh BoundingBoxf3 bb; TriangleMesh mesh = create_mesh(type_name, bb); load_mesh_object(mesh, _L("Shape") + "-" + _(type_name)); +#if ENABLE_RELOAD_FROM_DISK_REWORK + if (!m_objects->empty()) + m_objects->back()->volumes.front()->source.is_from_builtin_objects = true; +#endif // ENABLE_RELOAD_FROM_DISK_REWORK wxGetApp().mainframe->update_title(); } diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index 4c1615dd4..6ab87150b 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -657,9 +657,9 @@ void ObjectManipulation::update_if_dirty() else m_og->disable(); - if (!selection.is_dragging()) { + if (!wxGetApp().plater()->canvas3D()->is_dragging()) { update_reset_buttons_visibility(); - update_mirror_buttons_visibility(); + update_mirror_buttons_visibility(); } m_dirty = false; @@ -814,9 +814,8 @@ void ObjectManipulation::change_position_value(int axis, double value) auto canvas = wxGetApp().plater()->canvas3D(); Selection& selection = canvas->get_selection(); - selection.start_dragging(); + selection.setup_cache(); selection.translate(position - m_cache.position, selection.requires_local_axes()); - selection.stop_dragging(); canvas->do_move(L("Set Position")); m_cache.position = position; @@ -844,11 +843,10 @@ void ObjectManipulation::change_rotation_value(int axis, double value) transformation_type.set_local(); } - selection.start_dragging(); + selection.setup_cache(); selection.rotate( (M_PI / 180.0) * (transformation_type.absolute() ? rotation : rotation - m_cache.rotation), transformation_type); - selection.stop_dragging(); canvas->do_rotate(L("Set Orientation")); m_cache.rotation = rotation; @@ -925,9 +923,8 @@ void ObjectManipulation::do_scale(int axis, const Vec3d &scale) const if (m_uniform_scale || selection.requires_uniform_scale()) scaling_factor = scale(axis) * Vec3d::Ones(); - selection.start_dragging(); + selection.setup_cache(); selection.scale(scaling_factor, transformation_type); - selection.stop_dragging(); wxGetApp().plater()->canvas3D()->do_scale(L("Set Scale")); } @@ -1104,8 +1101,8 @@ ManipulationEditor::ManipulationEditor(ObjectManipulation* parent, parent->set_focused_editor(nullptr); #if ENABLE_OBJECT_MANIPULATOR_FOCUS - // if the widget loosing focus is not a manipulator field, call kill_focus - if (dynamic_cast(e.GetWindow()) == nullptr) + // if the widgets exchanging focus are both manipulator fields, call kill_focus + if (dynamic_cast(e.GetEventObject()) != nullptr && dynamic_cast(e.GetWindow()) != nullptr) #else if (!m_enter_pressed) #endif // ENABLE_OBJECT_MANIPULATOR_FOCUS diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index c9a7cd330..291013fe9 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -141,6 +141,8 @@ bool ObjectSettings::update_settings_list() { Option option = optgroup->get_option(opt); option.opt.width = 12; + if (!option.opt.full_label.empty()) + option.opt.label = option.opt.full_label; if (is_extruders_cat) option.opt.max = wxGetApp().extruders_edited_cnt(); optgroup->append_single_option_line(option); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 2cac5e356..9f62fa0b8 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -859,6 +859,36 @@ void Preview::update_moves_slider() if (view.endpoints.last < view.endpoints.first) return; +#if ENABLE_PROCESS_G2_G3_LINES + assert(view.endpoints.first <= view.current.first && view.current.first <= view.endpoints.last); + assert(view.endpoints.first <= view.current.last && view.current.last <= view.endpoints.last); + + std::vector values; + values.reserve(view.endpoints.last - view.endpoints.first + 1); + std::vector alternate_values; + alternate_values.reserve(view.endpoints.last - view.endpoints.first + 1); + unsigned int last_gcode_id = view.gcode_ids[view.endpoints.first]; + for (unsigned int i = view.endpoints.first; i <= view.endpoints.last; ++i) { + if (i > view.endpoints.first) { + // skip consecutive moves with same gcode id (resulting from processing G2 and G3 lines) + if (last_gcode_id == view.gcode_ids[i]) { + values.back() = static_cast(i + 1); + alternate_values.back() = static_cast(view.gcode_ids[i]); + continue; + } + else + last_gcode_id = view.gcode_ids[i]; + } + + values.emplace_back(static_cast(i + 1)); + alternate_values.emplace_back(static_cast(view.gcode_ids[i])); + } + + m_moves_slider->SetSliderValues(values); + m_moves_slider->SetSliderAlternateValues(alternate_values); + m_moves_slider->SetMaxValue(int(values.size()) - 1); + m_moves_slider->SetSelectionSpan(values.front() - 1 - view.endpoints.first, values.back() - 1 - view.endpoints.first); +#else std::vector values(view.endpoints.last - view.endpoints.first + 1); std::vector alternate_values(view.endpoints.last - view.endpoints.first + 1); unsigned int count = 0; @@ -873,6 +903,7 @@ void Preview::update_moves_slider() m_moves_slider->SetSliderAlternateValues(alternate_values); m_moves_slider->SetMaxValue(view.endpoints.last - view.endpoints.first); m_moves_slider->SetSelectionSpan(view.current.first - view.endpoints.first, view.current.last - view.endpoints.first); +#endif // ENABLE_PROCESS_G2_G3_LINES } void Preview::enable_moves_slider(bool enable) @@ -966,6 +997,11 @@ void Preview::load_print_as_fff(bool keep_z_range) Refresh(); zs = m_canvas->get_volumes_print_zs(true); } + else { + m_left_sizer->Hide(m_bottom_toolbar_panel); + m_left_sizer->Layout(); + Refresh(); + } if (!zs.empty() && !m_keep_current_preview_type) { unsigned int number_extruders = wxGetApp().is_editor() ? @@ -1040,7 +1076,6 @@ void Preview::load_print_as_sla() if (IsShown()) { m_canvas->load_sla_preview(); m_left_sizer->Hide(m_bottom_toolbar_panel); - m_left_sizer->Hide(m_bottom_toolbar_panel); m_left_sizer->Layout(); Refresh(); diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp index d9c32e829..97f8edde3 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -126,6 +126,9 @@ public: ColorChanges, PausePrints, CustomGCodes, +#if ENABLE_SHOW_TOOLPATHS_COG + CenterOfGravity, +#endif // ENABLE_SHOW_TOOLPATHS_COG Shells, ToolMarker, #if !ENABLE_PREVIEW_LAYOUT diff --git a/src/slic3r/GUI/GalleryDialog.cpp b/src/slic3r/GUI/GalleryDialog.cpp index 1191e5c2e..975b807dc 100644 --- a/src/slic3r/GUI/GalleryDialog.cpp +++ b/src/slic3r/GUI/GalleryDialog.cpp @@ -274,9 +274,13 @@ static void generate_thumbnail_from_model(const std::string& filename) GLVolumeCollection volumes; volumes.volumes.push_back(new GLVolume()); - GLVolume* volume = volumes.volumes[0]; + GLVolume* volume = volumes.volumes.back(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + volume->model.init_from(model.mesh()); +#else volume->indexed_vertex_array.load_mesh(model.mesh()); volume->indexed_vertex_array.finalize_geometry(true); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL volume->set_instance_transformation(model.objects[0]->instances[0]->get_transformation()); volume->set_volume_transformation(model.objects[0]->volumes[0]->get_transformation()); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp index e0e018a13..aacecb6ef 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp @@ -4,6 +4,10 @@ #include #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/GUI_ObjectManipulation.hpp" +#if ENABLE_GL_SHADERS_ATTRIBUTES +#include "slic3r/GUI/Plater.hpp" +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // TODO: Display tooltips quicker on Linux @@ -31,34 +35,52 @@ float GLGizmoBase::Grabber::get_dragging_half_size(float size) const void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, bool picking) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + GLShaderProgram* shader = wxGetApp().get_current_shader(); + if (shader == nullptr) + return; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + if (!m_cube.is_initialized()) { // This cannot be done in constructor, OpenGL is not yet // initialized at that point (on Linux at least). indexed_triangle_set its = its_make_cube(1., 1., 1.); - its_translate(its, Vec3f(-0.5, -0.5, -0.5)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL + its_translate(its, -0.5f * Vec3f::Ones()); +#if ENABLE_LEGACY_OPENGL_REMOVAL m_cube.init_from(its); #else m_cube.init_from(its, BoundingBoxf3{ { -0.5, -0.5, -0.5 }, { 0.5, 0.5, 0.5 } }); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } const float fullsize = 2.0f * (dragging ? get_dragging_half_size(size) : get_half_size(size)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_cube.set_color(render_color); #else m_cube.set_color(-1, render_color); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d view_model_matrix = camera.get_view_matrix() * matrix * Geometry::assemble_transform(center, angles, fullsize * Vec3d::Ones()); + const Transform3d& projection_matrix = camera.get_projection_matrix(); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("projection_matrix", projection_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glPushMatrix()); glsafe(::glTranslated(center.x(), center.y(), center.z())); glsafe(::glRotated(Geometry::rad2deg(angles.z()), 0.0, 0.0, 1.0)); glsafe(::glRotated(Geometry::rad2deg(angles.y()), 0.0, 1.0, 0.0)); glsafe(::glRotated(Geometry::rad2deg(angles.x()), 1.0, 0.0, 0.0)); glsafe(::glScaled(fullsize, fullsize, fullsize)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_cube.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) @@ -74,63 +96,19 @@ GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, const std::string& icon_filename, u , m_first_input_window_render(true) , m_dirty(false) { - m_base_color = DEFAULT_BASE_COLOR; - m_drag_color = DEFAULT_DRAG_COLOR; - m_highlight_color = DEFAULT_HIGHLIGHT_COLOR; } void GLGizmoBase::set_hover_id(int id) { - if (m_grabbers.empty() || id < (int)m_grabbers.size()) { - m_hover_id = id; - on_set_hover_id(); - } -} + // do not change hover id during dragging + assert(!m_dragging); -void GLGizmoBase::enable_grabber(unsigned int id) -{ - if (id < m_grabbers.size()) - m_grabbers[id].enabled = true; - - on_enable_grabber(id); -} - -void GLGizmoBase::disable_grabber(unsigned int id) -{ - if (id < m_grabbers.size()) - m_grabbers[id].enabled = false; - - on_disable_grabber(id); -} - -void GLGizmoBase::start_dragging() -{ - m_dragging = true; - - for (int i = 0; i < (int)m_grabbers.size(); ++i) - { - m_grabbers[i].dragging = (m_hover_id == i); - } - - on_start_dragging(); -} - -void GLGizmoBase::stop_dragging() -{ - m_dragging = false; - - for (int i = 0; i < (int)m_grabbers.size(); ++i) - { - m_grabbers[i].dragging = false; - } - - on_stop_dragging(); -} - -void GLGizmoBase::update(const UpdateData& data) -{ - if (m_hover_id != -1) - on_update(data); + // allow empty grabbers when not using grabbers but use hover_id - flatten, rotate + if (!m_grabbers.empty() && id >= (int) m_grabbers.size()) + return; + + m_hover_id = id; + on_set_hover_id(); } bool GLGizmoBase::update_items_state() @@ -138,7 +116,7 @@ bool GLGizmoBase::update_items_state() bool res = m_dirty; m_dirty = false; return res; -}; +} ColorRGBA GLGizmoBase::picking_color_component(unsigned int id) const { @@ -170,11 +148,11 @@ void GLGizmoBase::render_grabbers(float size) const void GLGizmoBase::render_grabbers_for_picking(const BoundingBoxf3& box) const { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL const float mean_size = float((box.size().x() + box.size().y() + box.size().z()) / 3.0); for (unsigned int i = 0; i < (unsigned int)m_grabbers.size(); ++i) { @@ -183,10 +161,84 @@ void GLGizmoBase::render_grabbers_for_picking(const BoundingBoxf3& box) const m_grabbers[i].render_for_picking(mean_size); } } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +} + +// help function to process grabbers +// call start_dragging, stop_dragging, on_dragging +bool GLGizmoBase::use_grabbers(const wxMouseEvent &mouse_event) { + bool is_dragging_finished = false; + if (mouse_event.Moving()) { + // it should not happen but for sure + assert(!m_dragging); + if (m_dragging) is_dragging_finished = true; + else return false; + } + + if (mouse_event.LeftDown()) { + Selection &selection = m_parent.get_selection(); + if (!selection.is_empty() && m_hover_id != -1 && + (m_grabbers.empty() || m_hover_id < static_cast(m_grabbers.size()))) { + selection.setup_cache(); + + m_dragging = true; + for (auto &grabber : m_grabbers) grabber.dragging = false; + if (!m_grabbers.empty() && m_hover_id < int(m_grabbers.size())) + m_grabbers[m_hover_id].dragging = true; + + // prevent change of hover_id during dragging + m_parent.set_mouse_as_dragging(); + on_start_dragging(); + + // Let the plater know that the dragging started + m_parent.post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_STARTED)); + m_parent.set_as_dirty(); + return true; + } + } else if (m_dragging) { + // when mouse cursor leave window than finish actual dragging operation + bool is_leaving = mouse_event.Leaving(); + if (mouse_event.Dragging()) { + m_parent.set_mouse_as_dragging(); + Point mouse_coord(mouse_event.GetX(), mouse_event.GetY()); + auto ray = m_parent.mouse_ray(mouse_coord); + UpdateData data(ray, mouse_coord); + + on_dragging(data); + + wxGetApp().obj_manipul()->set_dirty(); + m_parent.set_as_dirty(); + return true; + } else if (mouse_event.LeftUp() || is_leaving || is_dragging_finished) { + for (auto &grabber : m_grabbers) grabber.dragging = false; + m_dragging = false; + + // NOTE: This should be part of GLCanvas3D + // Reset hover_id when leave window + if (is_leaving) m_parent.mouse_up_cleanup(); + + on_stop_dragging(); + + // There is prediction that after draggign, data are changed + // Data are updated twice also by canvas3D::reload_scene. + // Should be fixed. + m_parent.get_gizmos_manager().update_data(); + + wxGetApp().obj_manipul()->set_dirty(); + + // Let the plater know that the dragging finished, so a delayed + // refresh of the scene with the background processing data should + // be performed. + m_parent.post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED)); + // updates camera target constraints + m_parent.refresh_camera_scene_box(); + return true; + } + } + return false; } std::string GLGizmoBase::format(float value, unsigned int decimals) const diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp index 99050a252..145320462 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp @@ -10,6 +10,7 @@ #include class wxWindow; +class wxMouseEvent; namespace Slic3r { @@ -29,7 +30,6 @@ class ImGuiWrapper; class GLCanvas3D; enum class CommonGizmosDataID; class CommonGizmosDataPool; -class Selection; class GLGizmoBase { @@ -49,6 +49,9 @@ protected: bool dragging{ false }; Vec3d center{ Vec3d::Zero() }; Vec3d angles{ Vec3d::Zero() }; +#if ENABLE_GL_SHADERS_ATTRIBUTES + Transform3d matrix{ Transform3d::Identity() }; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES ColorRGBA color{ ColorRGBA::WHITE() }; Grabber() = default; @@ -85,28 +88,22 @@ public: protected: GLCanvas3D& m_parent; - - int m_group_id; + int m_group_id; // TODO: remove only for rotate EState m_state; int m_shortcut_key; std::string m_icon_filename; unsigned int m_sprite_id; int m_hover_id; bool m_dragging; - ColorRGBA m_base_color; - ColorRGBA m_drag_color; - ColorRGBA m_highlight_color; mutable std::vector m_grabbers; ImGuiWrapper* m_imgui; bool m_first_input_window_render; - mutable std::string m_tooltip; CommonGizmosDataPool* m_c; - public: GLGizmoBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); - virtual ~GLGizmoBase() {} + virtual ~GLGizmoBase() = default; bool init() { return on_init(); } @@ -115,9 +112,6 @@ public: std::string get_name(bool include_shortcut = true) const; - int get_group_id() const { return m_group_id; } - void set_group_id(int id) { m_group_id = id; } - EState get_state() const { return m_state; } void set_state(EState state) { m_state = state; on_set_state(); } @@ -139,27 +133,33 @@ public: int get_hover_id() const { return m_hover_id; } void set_hover_id(int id); - void set_highlight_color(const ColorRGBA& color) { m_highlight_color = color; } - - void enable_grabber(unsigned int id); - void disable_grabber(unsigned int id); - - void start_dragging(); - void stop_dragging(); - bool is_dragging() const { return m_dragging; } - void update(const UpdateData& data); - // returns True when Gizmo changed its state bool update_items_state(); - void render() { m_tooltip.clear(); on_render(); } + void render() { on_render(); } void render_for_picking() { on_render_for_picking(); } void render_input_window(float x, float y, float bottom_limit); + /// + /// Mouse tooltip text + /// + /// Text to be visible in mouse tooltip virtual std::string get_tooltip() const { return ""; } + /// + /// Is called when data (Selection) is changed + /// + virtual void data_changed(){}; + + /// + /// Implement when want to process mouse events in gizmo + /// Click, Right click, move, drag, ... + /// + /// Keep information about mouse click + /// Return True when use the information and don't want to propagate it otherwise False. + virtual bool on_mouse(const wxMouseEvent &mouse_event) { return false; } protected: virtual bool on_init() = 0; virtual void on_load(cereal::BinaryInputArchive& ar) {} @@ -172,9 +172,12 @@ protected: virtual CommonGizmosDataID on_get_requirements() const { return CommonGizmosDataID(0); } virtual void on_enable_grabber(unsigned int id) {} virtual void on_disable_grabber(unsigned int id) {} + + // called inside use_grabbers virtual void on_start_dragging() {} virtual void on_stop_dragging() {} - virtual void on_update(const UpdateData& data) {} + virtual void on_dragging(const UpdateData& data) {} + virtual void on_render() = 0; virtual void on_render_for_picking() = 0; virtual void on_render_input_window(float x, float y, float bottom_limit) {} @@ -191,6 +194,15 @@ protected: // Mark gizmo as dirty to Re-Render when idle() void set_dirty(); + + /// + /// function which + /// Set up m_dragging and call functions + /// on_start_dragging / on_dragging / on_stop_dragging + /// + /// Keep information about mouse click + /// same as on_mouse + bool use_grabbers(const wxMouseEvent &mouse_event); private: // Flag for dirty visible state of Gizmo // When True then need new rendering diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index ab29e9026..9a87d5a45 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -38,6 +38,11 @@ std::string GLGizmoCut::get_tooltip() const return (m_hover_id == 0 || m_grabbers[0].dragging) ? "Z: " + format(cut_z, 2) : ""; } +bool GLGizmoCut::on_mouse(const wxMouseEvent &mouse_event) +{ + return use_grabbers(mouse_event); +} + bool GLGizmoCut::on_init() { m_grabbers.emplace_back(); @@ -53,7 +58,7 @@ std::string GLGizmoCut::on_get_name() const void GLGizmoCut::on_set_state() { // Reset m_cut_z on gizmo activation - if (get_state() == On) + if (m_state == On) m_cut_z = bounding_box().center().z(); } @@ -76,10 +81,10 @@ void GLGizmoCut::on_start_dragging() m_drag_center.z() = m_cut_z; } -void GLGizmoCut::on_update(const UpdateData& data) +void GLGizmoCut::on_dragging(const UpdateData &data) { - if (m_hover_id != -1) - set_cut_z(m_start_z + calc_projection(data.mouse_ray)); + assert(m_hover_id != -1); + set_cut_z(m_start_z + calc_projection(data.mouse_ray)); } void GLGizmoCut::on_render() @@ -101,22 +106,26 @@ void GLGizmoCut::on_render() glsafe(::glEnable(GL_BLEND)); glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); + const Vec3d diff = plane_center - m_old_center; + // Z changed when move with cut plane + // X and Y changed when move with cutted object + bool is_changed = std::abs(diff.x()) > EPSILON || + std::abs(diff.y()) > EPSILON || + std::abs(diff.z()) > EPSILON; + m_old_center = plane_center; - const bool z_changed = std::abs(plane_center.z() - m_old_z) > EPSILON; - m_old_z = plane_center.z(); - - if (!m_plane.is_initialized() || z_changed) { + if (!m_plane.is_initialized() || is_changed) { m_plane.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; + init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3 }; init_data.color = { 0.8f, 0.8f, 0.8f, 0.5f }; - init_data.vertices.reserve(4 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(6 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.reserve_vertices(4); + init_data.reserve_indices(6); // vertices init_data.add_vertex(Vec3f(min_x, min_y, plane_center.z())); @@ -125,12 +134,18 @@ void GLGizmoCut::on_render() init_data.add_vertex(Vec3f(min_x, max_y, plane_center.z())); // indices - init_data.add_ushort_triangle(0, 1, 2); - init_data.add_ushort_triangle(2, 3, 0); + init_data.add_triangle(0, 1, 2); + init_data.add_triangle(2, 3, 0); m_plane.init_from(std::move(init_data)); } +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + m_plane.render(); #else // Draw the cutting plane @@ -141,7 +156,7 @@ void GLGizmoCut::on_render() ::glVertex3f(max_x, max_y, plane_center.z()); ::glVertex3f(min_x, max_y, plane_center.z()); glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glEnable(GL_CULL_FACE)); glsafe(::glDisable(GL_BLEND)); @@ -153,22 +168,22 @@ void GLGizmoCut::on_render() glsafe(::glClear(GL_DEPTH_BUFFER_BIT)); glsafe(::glLineWidth(m_hover_id != -1 ? 2.0f : 1.5f)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL - if (!m_grabber_connection.is_initialized() || z_changed) { +#if ENABLE_LEGACY_OPENGL_REMOVAL + if (!m_grabber_connection.is_initialized() || is_changed) { m_grabber_connection.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; init_data.color = ColorRGBA::YELLOW(); - init_data.vertices.reserve(2 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(2 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.reserve_vertices(2); + init_data.reserve_indices(2); // vertices init_data.add_vertex((Vec3f)plane_center.cast()); init_data.add_vertex((Vec3f)m_grabbers[0].center.cast()); // indices - init_data.add_ushort_line(0, 1); + init_data.add_line(0, 1); m_grabber_connection.init_from(std::move(init_data)); } @@ -187,7 +202,7 @@ void GLGizmoCut::on_render() glsafe(::glEnd()); GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (shader != nullptr) { shader->start_using(); shader->set_uniform("emission_factor", 0.1f); @@ -198,20 +213,28 @@ void GLGizmoCut::on_render() shader->stop_using(); } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()* Geometry::assemble_transform(m_cut_contours.shift)); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#else glsafe(::glPushMatrix()); glsafe(::glTranslated(m_cut_contours.shift.x(), m_cut_contours.shift.y(), m_cut_contours.shift.z())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glLineWidth(2.0f)); m_cut_contours.contours.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } void GLGizmoCut::on_render_for_picking() @@ -329,6 +352,8 @@ BoundingBoxf3 GLGizmoCut::bounding_box() const BoundingBoxf3 ret; const Selection& selection = m_parent.get_selection(); const Selection::IndicesList& idxs = selection.get_volume_idxs(); + return selection.get_bounding_box(); + for (unsigned int i : idxs) { const GLVolume* volume = selection.get_volume(i); if (!volume->is_modifier) @@ -367,14 +392,16 @@ void GLGizmoCut::update_contours() MeshSlicingParams slicing_params; slicing_params.trafo = first_glvolume->get_instance_transformation().get_matrix(); + slicing_params.trafo.pretranslate(Vec3d(0., 0., first_glvolume->get_sla_shift_z())); + const Polygons polys = slice_mesh(m_cut_contours.mesh.its, m_cut_z, slicing_params); if (!polys.empty()) { m_cut_contours.contours.init_from(polys, static_cast(m_cut_z)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_cut_contours.contours.set_color(ColorRGBA::WHITE()); #else m_cut_contours.contours.set_color(-1, { 1.0f, 1.0f, 1.0f, 1.0f }); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } else if (box.center() != m_cut_contours.position) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp index ccf8732cf..d81b53e5f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp @@ -8,6 +8,7 @@ namespace Slic3r { namespace GUI { +class Selection; class GLGizmoCut : public GLGizmoBase { @@ -22,11 +23,11 @@ class GLGizmoCut : public GLGizmoBase bool m_keep_upper{ true }; bool m_keep_lower{ true }; bool m_rotate_lower{ false }; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLModel m_plane; GLModel m_grabber_connection; - float m_old_z{ 0.0f }; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL + Vec3d m_old_center; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL struct CutContours { @@ -50,6 +51,13 @@ public: std::string get_tooltip() const override; + /// + /// Drag of plane + /// + /// Keep information about mouse click + /// Return True when use the information otherwise False. + bool on_mouse(const wxMouseEvent &mouse_event) override; + protected: virtual bool on_init() override; virtual void on_load(cereal::BinaryInputArchive& ar) override { ar(m_cut_z, m_keep_upper, m_keep_lower, m_rotate_lower); } @@ -58,7 +66,7 @@ protected: virtual void on_set_state() override; virtual bool on_is_activable() const override; virtual void on_start_dragging() override; - virtual void on_update(const UpdateData& data) override; + virtual void on_dragging(const UpdateData& data) override; virtual void on_render() override; virtual void on_render_for_picking() override; virtual void on_render_input_window(float x, float y, float bottom_limit) override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp index fd32c68fc..aa291f623 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp @@ -1,6 +1,13 @@ // Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoFlatten.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" +#if ENABLE_LEGACY_OPENGL_REMOVAL +#include "slic3r/GUI/GUI_App.hpp" +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES +#include "slic3r/GUI/Plater.hpp" +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + #include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" #include "libslic3r/Geometry/ConvexHull.hpp" @@ -18,9 +25,52 @@ static const Slic3r::ColorRGBA DEFAULT_HOVER_PLANE_COLOR = { 0.9f, 0.9f, 0.9f, 0 GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) : GLGizmoBase(parent, icon_filename, sprite_id) - , m_normal(Vec3d::Zero()) - , m_starting_center(Vec3d::Zero()) +{} + +bool GLGizmoFlatten::on_mouse(const wxMouseEvent &mouse_event) { + if (mouse_event.Moving()) { + // only for sure + m_mouse_left_down = false; + return false; + } + if (mouse_event.LeftDown()) { + if (m_hover_id != -1) { + m_mouse_left_down = true; + Selection &selection = m_parent.get_selection(); + if (selection.is_single_full_instance()) { + // Rotate the object so the normal points downward: + selection.flattening_rotate(m_planes[m_hover_id].normal); + m_parent.do_rotate(L("Gizmo-Place on Face")); + } + return true; + } + + // fix: prevent restart gizmo when reselect object + // take responsibility for left up + if (m_parent.get_first_hover_volume_idx() >= 0) m_mouse_left_down = true; + + } else if (mouse_event.LeftUp()) { + if (m_mouse_left_down) { + // responsible for mouse left up after selecting plane + m_mouse_left_down = false; + return true; + } + } else if (mouse_event.Leaving()) { + m_mouse_left_down = false; + } + return false; +} + +void GLGizmoFlatten::data_changed() +{ + const Selection & selection = m_parent.get_selection(); + const ModelObject *model_object = nullptr; + if (selection.is_single_full_instance() || + selection.is_from_single_object() ) { + model_object = selection.get_model()->objects[selection.get_object_idx()]; + } + set_flattening_data(model_object); } bool GLGizmoFlatten::on_init() @@ -50,19 +100,18 @@ bool GLGizmoFlatten::on_is_activable() const return m_parent.get_selection().is_single_full_instance(); } -void GLGizmoFlatten::on_start_dragging() -{ - if (m_hover_id != -1) { - assert(m_planes_valid); - m_normal = m_planes[m_hover_id].normal; - m_starting_center = m_parent.get_selection().get_bounding_box().center(); - } -} - void GLGizmoFlatten::on_render() { const Selection& selection = m_parent.get_selection(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLShaderProgram* shader = wxGetApp().get_shader("flat"); + if (shader == nullptr) + return; + + shader->start_using(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + glsafe(::glClear(GL_DEPTH_BUFFER_BIT)); glsafe(::glEnable(GL_DEPTH_TEST)); @@ -70,50 +119,96 @@ void GLGizmoFlatten::on_render() if (selection.is_single_full_instance()) { const Transform3d& m = selection.get_volume(*selection.get_volume_idxs().begin())->get_instance_transformation().get_matrix(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d view_model_matrix = camera.get_view_matrix() * + Geometry::assemble_transform(selection.get_volume(*selection.get_volume_idxs().begin())->get_sla_shift_z() * Vec3d::UnitZ()) * m; + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#else glsafe(::glPushMatrix()); glsafe(::glTranslatef(0.f, 0.f, selection.get_volume(*selection.get_volume_idxs().begin())->get_sla_shift_z())); glsafe(::glMultMatrixd(m.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (this->is_plane_update_necessary()) update_planes(); for (int i = 0; i < (int)m_planes.size(); ++i) { +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_planes[i].vbo.set_color(i == m_hover_id ? DEFAULT_HOVER_PLANE_COLOR : DEFAULT_PLANE_COLOR); + m_planes[i].vbo.render(); +#else glsafe(::glColor4fv(i == m_hover_id ? DEFAULT_HOVER_PLANE_COLOR.data() : DEFAULT_PLANE_COLOR.data())); if (m_planes[i].vbo.has_VBOs()) m_planes[i].vbo.render(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } glsafe(::glEnable(GL_CULL_FACE)); glsafe(::glDisable(GL_BLEND)); + +#if ENABLE_LEGACY_OPENGL_REMOVAL + shader->stop_using(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } void GLGizmoFlatten::on_render_for_picking() { const Selection& selection = m_parent.get_selection(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLShaderProgram* shader = wxGetApp().get_shader("flat"); + if (shader == nullptr) + return; + + shader->start_using(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + glsafe(::glDisable(GL_DEPTH_TEST)); glsafe(::glDisable(GL_BLEND)); if (selection.is_single_full_instance() && !wxGetKeyState(WXK_CONTROL)) { const Transform3d& m = selection.get_volume(*selection.get_volume_idxs().begin())->get_instance_transformation().get_matrix(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d view_model_matrix = camera.get_view_matrix() * + Geometry::assemble_transform(selection.get_volume(*selection.get_volume_idxs().begin())->get_sla_shift_z() * Vec3d::UnitZ()) * m; + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#else glsafe(::glPushMatrix()); glsafe(::glTranslatef(0.f, 0.f, selection.get_volume(*selection.get_volume_idxs().begin())->get_sla_shift_z())); glsafe(::glMultMatrixd(m.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (this->is_plane_update_necessary()) update_planes(); for (int i = 0; i < (int)m_planes.size(); ++i) { +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_planes[i].vbo.set_color(picking_color_component(i)); +#else glsafe(::glColor4fv(picking_color_component(i).data())); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_planes[i].vbo.render(); } +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } glsafe(::glEnable(GL_CULL_FACE)); + +#if ENABLE_LEGACY_OPENGL_REMOVAL + shader->stop_using(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } void GLGizmoFlatten::set_flattening_data(const ModelObject* model_object) { - m_starting_center = Vec3d::Zero(); if (model_object != m_old_model_object) { m_planes.clear(); m_planes_valid = false; @@ -324,12 +419,25 @@ void GLGizmoFlatten::update_planes() // And finally create respective VBOs. The polygon is convex with // the vertices in order, so triangulation is trivial. for (auto& plane : m_planes) { +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLModel::Geometry init_data; + init_data.format = { GLModel::Geometry::EPrimitiveType::TriangleFan, GLModel::Geometry::EVertexLayout::P3N3 }; + init_data.reserve_vertices(plane.vertices.size()); + init_data.reserve_indices(plane.vertices.size()); + // vertices + indices + for (size_t i = 0; i < plane.vertices.size(); ++i) { + init_data.add_vertex((Vec3f)plane.vertices[i].cast(), (Vec3f)plane.normal.cast()); + init_data.add_index((unsigned int)i); + } + plane.vbo.init_from(std::move(init_data)); +#else plane.vbo.reserve(plane.vertices.size()); for (const auto& vert : plane.vertices) plane.vbo.push_geometry(vert, plane.normal); for (size_t i=1; i vertices; // should be in fact local in update_planes() +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLModel vbo; +#else GLIndexedVertexArray vbo; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL Vec3d normal; float area; }; @@ -34,8 +41,8 @@ private: Vec3d m_first_instance_mirror; std::vector m_planes; + bool m_mouse_left_down = false; // for detection left_up of this gizmo bool m_planes_valid = false; - mutable Vec3d m_starting_center; const ModelObject* m_old_model_object = nullptr; std::vector instances_matrices; @@ -46,17 +53,23 @@ public: GLGizmoFlatten(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); void set_flattening_data(const ModelObject* model_object); - Vec3d get_flattening_normal() const; + + /// + /// Apply rotation on select plane + /// + /// Keep information about mouse click + /// Return True when use the information otherwise False. + bool on_mouse(const wxMouseEvent &mouse_event) override; + void data_changed() override; protected: - virtual bool on_init() override; - virtual std::string on_get_name() const override; - virtual bool on_is_activable() const override; - virtual void on_start_dragging() override; - virtual void on_render() override; - virtual void on_render_for_picking() override; - virtual void on_set_state() override; - virtual CommonGizmosDataID on_get_requirements() const override; + bool on_init() override; + std::string on_get_name() const override; + bool on_is_activable() const override; + void on_render() override; + void on_render_for_picking() override; + void on_set_state() override; + CommonGizmosDataID on_get_requirements() const override; }; } // namespace GUI diff --git a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp index be52ebcb9..88b319f25 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp @@ -42,7 +42,7 @@ bool GLGizmoHollow::on_init() return true; } -void GLGizmoHollow::set_sla_support_data(ModelObject*, const Selection&) +void GLGizmoHollow::data_changed() { if (! m_c->selection_info()) return; @@ -103,11 +103,11 @@ void GLGizmoHollow::on_render_for_picking() void GLGizmoHollow::render_points(const Selection& selection, bool picking) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = picking ? wxGetApp().get_shader("flat") : wxGetApp().get_shader("gouraud_light"); if (shader == nullptr) return; - + shader->start_using(); ScopeGuard guard([shader]() { shader->stop_using(); }); #else @@ -115,23 +115,36 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking) if (shader) shader->start_using(); ScopeGuard guard([shader]() { if (shader) shader->stop_using(); }); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL const GLVolume* vol = selection.get_volume(*selection.get_volume_idxs().begin()); - const Transform3d& instance_scaling_matrix_inverse = vol->get_instance_transformation().get_matrix(true, true, false, true).inverse(); - const Transform3d& instance_matrix = vol->get_instance_transformation().get_matrix(); + Geometry::Transformation trafo = vol->get_instance_transformation() * vol->get_volume_transformation(); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d instance_scaling_matrix_inverse = vol->get_instance_transformation().get_matrix(true, true, false, true).inverse(); + const Transform3d instance_matrix = Geometry::assemble_transform(m_c->selection_info()->get_sla_shift() * Vec3d::UnitZ()) * trafo.get_matrix(); + + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d& view_matrix = camera.get_view_matrix(); + const Transform3d& projection_matrix = camera.get_projection_matrix(); + + shader->set_uniform("projection_matrix", projection_matrix); +#else + const Transform3d& instance_scaling_matrix_inverse = trafo.get_matrix(true, true, false, true).inverse(); + const Transform3d& instance_matrix = trafo.get_matrix(); glsafe(::glPushMatrix()); glsafe(::glTranslated(0.0, 0.0, m_c->selection_info()->get_sla_shift())); glsafe(::glMultMatrixd(instance_matrix.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES ColorRGBA render_color; const sla::DrainHoles& drain_holes = m_c->selection_info()->model_object()->sla_drain_holes; - size_t cache_size = drain_holes.size(); + const size_t cache_size = drain_holes.size(); for (size_t i = 0; i < cache_size; ++i) { const sla::DrainHole& drain_hole = drain_holes[i]; - const bool& point_selected = m_selected[i]; + const bool point_selected = m_selected[i]; if (is_mesh_point_clipped(drain_hole.pos.cast())) continue; @@ -151,16 +164,20 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking) render_color = point_selected ? ColorRGBA(1.0f, 0.3f, 0.3f, 0.5f) : ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f); } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_cylinder.set_color(render_color); #else const_cast(&m_cylinder)->set_color(-1, render_color); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // Inverse matrix of the instance scaling is applied so that the mark does not scale with the object. +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d hole_matrix = Geometry::assemble_transform(drain_hole.pos.cast()) * instance_scaling_matrix_inverse; +#else glsafe(::glPushMatrix()); glsafe(::glTranslatef(drain_hole.pos.x(), drain_hole.pos.y(), drain_hole.pos.z())); glsafe(::glMultMatrixd(instance_scaling_matrix_inverse.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (vol->is_left_handed()) glFrontFace(GL_CW); @@ -168,20 +185,31 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking) // Matrices set, we can render the point mark now. Eigen::Quaterniond q; q.setFromTwoVectors(Vec3d::UnitZ(), instance_scaling_matrix_inverse * (-drain_hole.normal).cast()); - Eigen::AngleAxisd aa(q); + const Eigen::AngleAxisd aa(q); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d view_model_matrix = view_matrix * instance_matrix * hole_matrix * Transform3d(aa.toRotationMatrix()) * + Geometry::assemble_transform(-drain_hole.height * Vec3d::UnitZ(), Vec3d::Zero(), Vec3d(drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength)); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis().x(), aa.axis().y(), aa.axis().z())); - glsafe(::glPushMatrix()); glsafe(::glTranslated(0., 0., -drain_hole.height)); glsafe(::glScaled(drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_cylinder.render(); - glsafe(::glPopMatrix()); if (vol->is_left_handed()) glFrontFace(GL_CCW); - glsafe(::glPopMatrix()); + +#if !ENABLE_GL_SHADERS_ATTRIBUTES + glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } - glsafe(::glPopMatrix()); +#if !ENABLE_GL_SHADERS_ATTRIBUTES + glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } bool GLGizmoHollow::is_mesh_point_clipped(const Vec3d& point) const @@ -192,7 +220,7 @@ bool GLGizmoHollow::is_mesh_point_clipped(const Vec3d& point) const auto sel_info = m_c->selection_info(); int active_inst = m_c->selection_info()->get_active_instance(); const ModelInstance* mi = sel_info->model_object()->instances[active_inst]; - const Transform3d& trafo = mi->get_transformation().get_matrix(); + const Transform3d& trafo = mi->get_transformation().get_matrix() * sel_info->model_object()->volumes.front()->get_matrix(); Vec3d transformed_point = trafo * point; transformed_point(2) += sel_info->get_sla_shift(); @@ -211,7 +239,7 @@ bool GLGizmoHollow::unproject_on_mesh(const Vec2d& mouse_pos, std::pairget_camera(); const Selection& selection = m_parent.get_selection(); const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); - Geometry::Transformation trafo = volume->get_instance_transformation(); + Geometry::Transformation trafo = volume->get_instance_transformation() * volume->get_volume_transformation(); trafo.set_offset(trafo.get_offset() + Vec3d(0., 0., m_c->selection_info()->get_sla_shift())); double clp_dist = m_c->object_clipper()->get_position(); @@ -263,7 +291,7 @@ bool GLGizmoHollow::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_pos if (action == SLAGizmoEventType::LeftDown && (shift_down || alt_down || control_down)) { if (m_hover_id == -1) { if (shift_down || alt_down) { - m_selection_rectangle.start_dragging(mouse_position, shift_down ? GLSelectionRectangle::Select : GLSelectionRectangle::Deselect); + m_selection_rectangle.start_dragging(mouse_position, shift_down ? GLSelectionRectangle::EState::Select : GLSelectionRectangle::EState::Deselect); } } else { @@ -329,7 +357,7 @@ bool GLGizmoHollow::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_pos trafo, wxGetApp().plater()->get_camera(), points_inside, m_c->object_clipper()->get_clipping_plane())) { - if (rectangle_status == GLSelectionRectangle::Deselect) + if (rectangle_status == GLSelectionRectangle::EState::Deselect) unselect_point(points_idxs[idx]); else select_point(points_idxs[idx]); @@ -417,20 +445,70 @@ void GLGizmoHollow::delete_selected_points() select_point(NoPoints); } -void GLGizmoHollow::on_update(const UpdateData& data) +bool GLGizmoHollow::on_mouse(const wxMouseEvent &mouse_event) { - sla::DrainHoles& drain_holes = m_c->selection_info()->model_object()->sla_drain_holes; + if (mouse_event.Moving()) return false; + if (use_grabbers(mouse_event)) return true; - if (m_hover_id != -1) { - std::pair pos_and_normal; - if (! unproject_on_mesh(data.mouse_pos.cast(), pos_and_normal)) - return; - drain_holes[m_hover_id].pos = pos_and_normal.first; - drain_holes[m_hover_id].normal = -pos_and_normal.second; + // wxCoord == int --> wx/types.h + Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); + Vec2d mouse_pos = mouse_coord.cast(); + + static bool pending_right_up = false; + if (mouse_event.LeftDown()) { + bool control_down = mouse_event.CmdDown(); + bool grabber_contains_mouse = (get_hover_id() != -1); + if ((!control_down || grabber_contains_mouse) && + gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), false)) + // the gizmo got the event and took some action, there is no need + // to do anything more + return true; + } else if (mouse_event.Dragging()) { + if (m_parent.get_move_volume_id() != -1) + // don't allow dragging objects with the Sla gizmo on + return true; + + bool control_down = mouse_event.CmdDown(); + if (control_down) { + // CTRL has been pressed while already dragging -> stop current action + if (mouse_event.LeftIsDown()) + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), true); + else if (mouse_event.RightIsDown()) { + pending_right_up = false; + } + } else if(gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), false)) { + // the gizmo got the event and took some action, no need to do + // anything more here + m_parent.set_as_dirty(); + return true; + } + } else if (mouse_event.LeftUp()) { + if (!m_parent.is_mouse_dragging()) { + bool control_down = mouse_event.CmdDown(); + // in case gizmo is selected, we just pass the LeftUp event + // and stop processing - neither object moving or selecting is + // suppressed in that case + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), control_down); + return true; + } + } else if (mouse_event.RightDown()) { + if (m_parent.get_selection().get_object_idx() != -1 && + gizmo_event(SLAGizmoEventType::RightDown, mouse_pos, false, false, false)) { + // we need to set the following right up as processed to avoid showing + // the context menu if the user release the mouse over the object + pending_right_up = true; + // event was taken care of by the SlaSupports gizmo + return true; + } + } else if (mouse_event.RightUp()) { + if (pending_right_up) { + pending_right_up = false; + return true; + } } + return false; } - void GLGizmoHollow::hollow_mesh(bool postpone_error_messages) { wxGetApp().CallAfter([this, postpone_error_messages]() { @@ -820,6 +898,17 @@ void GLGizmoHollow::on_stop_dragging() } +void GLGizmoHollow::on_dragging(const UpdateData &data) +{ + assert(m_hover_id != -1); + std::pair pos_and_normal; + if (!unproject_on_mesh(data.mouse_pos.cast(), pos_and_normal)) + return; + sla::DrainHoles &drain_holes = m_c->selection_info()->model_object()->sla_drain_holes; + drain_holes[m_hover_id].pos = pos_and_normal.first; + drain_holes[m_hover_id].normal = -pos_and_normal.second; +} + void GLGizmoHollow::on_load(cereal::BinaryInputArchive& ar) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoHollow.hpp b/src/slic3r/GUI/Gizmos/GLGizmoHollow.hpp index fa89e0feb..feab896cc 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoHollow.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoHollow.hpp @@ -19,7 +19,7 @@ class ConfigOptionDef; namespace GUI { enum class SLAGizmoEventType : unsigned char; - +class Selection; class GLGizmoHollow : public GLGizmoBase { private: @@ -29,16 +29,22 @@ private: public: GLGizmoHollow(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); virtual ~GLGizmoHollow() = default; - void set_sla_support_data(ModelObject* model_object, const Selection& selection); + void data_changed() override; bool gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down, bool alt_down, bool control_down); void delete_selected_points(); bool is_selection_rectangle_dragging() const { return m_selection_rectangle.is_dragging(); } - + + /// + /// Postpone to Grabber for move + /// Detect move of object by dragging + /// + /// Keep information about mouse click + /// Return True when use the information otherwise False. + bool on_mouse(const wxMouseEvent &mouse_event) override; private: bool on_init() override; - void on_update(const UpdateData& data) override; void on_render() override; void on_render_for_picking() override; @@ -94,6 +100,7 @@ protected: void on_set_hover_id() override; void on_start_dragging() override; void on_stop_dragging() override; + void on_dragging(const UpdateData &data) override; void on_render_input_window(float x, float y, float bottom_limit) override; virtual CommonGizmosDataID on_get_requirements() const override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 4c204d0d4..308100d7f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -146,10 +146,9 @@ void GLGizmoMmuSegmentation::render_painter_gizmo() glsafe(::glDisable(GL_BLEND)); } -void GLGizmoMmuSegmentation::set_painter_gizmo_data(const Selection &selection) +void GLGizmoMmuSegmentation::data_changed() { - GLGizmoPainterBase::set_painter_gizmo_data(selection); - + GLGizmoPainterBase::data_changed(); if (m_state != On || wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptFFF || wxGetApp().extruders_edited_cnt() <= 1) return; @@ -189,18 +188,32 @@ void GLGizmoMmuSegmentation::render_triangles(const Selection &selection) const const Transform3d trafo_matrix = mo->instances[selection.get_instance_idx()]->get_transformation().get_matrix() * mv->get_matrix(); - bool is_left_handed = trafo_matrix.matrix().determinant() < 0.; + const bool is_left_handed = trafo_matrix.matrix().determinant() < 0.0; if (is_left_handed) glsafe(::glFrontFace(GL_CW)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d matrix = camera.get_view_matrix() * trafo_matrix; + shader->set_uniform("view_model_matrix", matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + shader->set_uniform("normal_matrix", (Matrix3d)matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glPushMatrix()); glsafe(::glMultMatrixd(trafo_matrix.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES shader->set_uniform("volume_world_matrix", trafo_matrix); shader->set_uniform("volume_mirrored", is_left_handed); +#if ENABLE_GL_SHADERS_ATTRIBUTES + m_triangle_selectors[mesh_id]->render(m_imgui, trafo_matrix); +#else m_triangle_selectors[mesh_id]->render(m_imgui); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES if (is_left_handed) glsafe(::glFrontFace(GL_CCW)); } @@ -569,7 +582,11 @@ ColorRGBA GLGizmoMmuSegmentation::get_cursor_sphere_right_button_color() const return color; } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void TriangleSelectorMmGui::render(ImGuiWrapper* imgui, const Transform3d& matrix) +#else void TriangleSelectorMmGui::render(ImGuiWrapper *imgui) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { if (m_update_render_data) update_render_data(); @@ -578,8 +595,15 @@ void TriangleSelectorMmGui::render(ImGuiWrapper *imgui) if (!shader) return; assert(shader->get_name() == "mm_gouraud"); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d view_model_matrix = camera.get_view_matrix() * matrix; + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES - for (size_t color_idx = 0; color_idx < m_gizmo_scene.triangle_indices.size(); ++color_idx) + for (size_t color_idx = 0; color_idx < m_gizmo_scene.triangle_indices.size(); ++color_idx) { if (m_gizmo_scene.has_VBOs(color_idx)) { if (color_idx > m_colors.size()) // Seed fill VBO shader->set_uniform("uniform_color", TriangleSelectorGUI::get_seed_fill_color(color_idx == (m_colors.size() + 1) ? m_default_volume_color : m_colors[color_idx - (m_colors.size() + 1) - 1])); @@ -588,7 +612,15 @@ void TriangleSelectorMmGui::render(ImGuiWrapper *imgui) m_gizmo_scene.render(color_idx); } + } +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_paint_contour(matrix); +#else + render_paint_contour(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#else if (m_paint_contour.has_VBO()) { ScopeGuard guard_mm_gouraud([shader]() { shader->start_using(); }); shader->stop_using(); @@ -602,6 +634,7 @@ void TriangleSelectorMmGui::render(ImGuiWrapper *imgui) contour_shader->stop_using(); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_update_render_data = false; } @@ -636,6 +669,9 @@ void TriangleSelectorMmGui::update_render_data() m_gizmo_scene.finalize_triangle_indices(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + update_paint_contour(); +#else m_paint_contour.release_geometry(); std::vector contour_edges = this->get_seed_fill_contour(); m_paint_contour.contour_vertices.reserve(contour_edges.size() * 6); @@ -654,6 +690,7 @@ void TriangleSelectorMmGui::update_render_data() m_paint_contour.contour_indices_size = m_paint_contour.contour_indices.size(); m_paint_contour.finalize_geometry(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } wxString GLGizmoMmuSegmentation::handle_snapshot_action_name(bool shift_down, GLGizmoPainterBase::Button button_down) const @@ -687,19 +724,41 @@ void GLMmSegmentationGizmo3DScene::render(size_t triangle_indices_idx) const assert(this->vertices_VBO_id != 0); assert(this->triangle_indices_VBO_ids[triangle_indices_idx] != 0); - glsafe(::glBindBuffer(GL_ARRAY_BUFFER, this->vertices_VBO_id)); - glsafe(::glVertexPointer(3, GL_FLOAT, 3 * sizeof(float), (const void*)(0 * sizeof(float)))); +#if ENABLE_GL_SHADERS_ATTRIBUTES + GLShaderProgram* shader = wxGetApp().get_current_shader(); + if (shader == nullptr) + return; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, this->vertices_VBO_id)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const GLint position_id = shader->get_attrib_location("v_position"); + if (position_id != -1) { + glsafe(::glVertexAttribPointer(position_id, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (GLvoid*)0)); + glsafe(::glEnableVertexAttribArray(position_id)); + } + + // Render using the Vertex Buffer Objects. + if (this->triangle_indices_VBO_ids[triangle_indices_idx] != 0 && + this->triangle_indices_sizes[triangle_indices_idx] > 0) { +#else + glsafe(::glVertexPointer(3, GL_FLOAT, 3 * sizeof(float), (const void*)(0 * sizeof(float)))); glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); // Render using the Vertex Buffer Objects. if (this->triangle_indices_sizes[triangle_indices_idx] > 0) { +#endif // ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this->triangle_indices_VBO_ids[triangle_indices_idx])); glsafe(::glDrawElements(GL_TRIANGLES, GLsizei(this->triangle_indices_sizes[triangle_indices_idx]), GL_UNSIGNED_INT, nullptr)); - glsafe(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); } +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (position_id != -1) + glsafe(::glDisableVertexAttribArray(position_id)); +#else glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp index c294fafcf..5d2397337 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp @@ -66,9 +66,13 @@ public: : TriangleSelectorGUI(mesh), m_colors(colors), m_default_volume_color(default_volume_color), m_gizmo_scene(2 * (colors.size() + 1)) {} ~TriangleSelectorMmGui() override = default; +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render(ImGuiWrapper* imgui, const Transform3d& matrix) override; +#else // Render current selection. Transformation matrices are supposed // to be already set. void render(ImGuiWrapper* imgui) override; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES private: void update_render_data(); @@ -87,7 +91,7 @@ public: void render_painter_gizmo() override; - void set_painter_gizmo_data(const Selection& selection) override; + void data_changed() override; void render_triangles(const Selection& selection) const override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp index fbbcb3256..a798122ec 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp @@ -2,6 +2,9 @@ #include "GLGizmoMove.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#if ENABLE_GL_SHADERS_ATTRIBUTES +#include "slic3r/GUI/Plater.hpp" +#endif // ENABLE_GL_SHADERS_ATTRIBUTES #include @@ -32,6 +35,16 @@ std::string GLGizmoMove3D::get_tooltip() const return ""; } +bool GLGizmoMove3D::on_mouse(const wxMouseEvent &mouse_event) { + return use_grabbers(mouse_event); +} + +void GLGizmoMove3D::data_changed() { + const Selection &selection = m_parent.get_selection(); + bool is_wipe_tower = selection.is_wipe_tower(); + m_grabbers[2].enabled = !is_wipe_tower; +} + bool GLGizmoMove3D::on_init() { for (int i = 0; i < 3; ++i) { @@ -55,22 +68,23 @@ bool GLGizmoMove3D::on_is_activable() const void GLGizmoMove3D::on_start_dragging() { - if (m_hover_id != -1) { - m_displacement = Vec3d::Zero(); - const BoundingBoxf3& box = m_parent.get_selection().get_bounding_box(); - m_starting_drag_position = m_grabbers[m_hover_id].center; - m_starting_box_center = box.center(); - m_starting_box_bottom_center = box.center(); - m_starting_box_bottom_center(2) = box.min(2); - } + assert(m_hover_id != -1); + + m_displacement = Vec3d::Zero(); + const BoundingBoxf3& box = m_parent.get_selection().get_bounding_box(); + m_starting_drag_position = m_grabbers[m_hover_id].center; + m_starting_box_center = box.center(); + m_starting_box_bottom_center = box.center(); + m_starting_box_bottom_center(2) = box.min(2); } void GLGizmoMove3D::on_stop_dragging() { + m_parent.do_move(L("Gizmo-Move")); m_displacement = Vec3d::Zero(); } -void GLGizmoMove3D::on_update(const UpdateData& data) +void GLGizmoMove3D::on_dragging(const UpdateData& data) { if (m_hover_id == 0) m_displacement.x() = calc_projection(data); @@ -78,6 +92,9 @@ void GLGizmoMove3D::on_update(const UpdateData& data) m_displacement.y() = calc_projection(data); else if (m_hover_id == 2) m_displacement.z() = calc_projection(data); + + Selection &selection = m_parent.get_selection(); + selection.translate(m_displacement); } void GLGizmoMove3D::on_render() @@ -107,7 +124,7 @@ void GLGizmoMove3D::on_render() glsafe(::glLineWidth((m_hover_id != -1) ? 2.0f : 1.5f)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL auto render_grabber_connection = [this, ¢er](unsigned int id) { if (m_grabbers[id].enabled) { if (!m_grabber_connections[id].model.is_initialized() || !m_grabber_connections[id].old_center.isApprox(center)) { @@ -115,17 +132,17 @@ void GLGizmoMove3D::on_render() m_grabber_connections[id].model.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; init_data.color = AXES_COLOR[id]; - init_data.vertices.reserve(2 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(2 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.reserve_vertices(2); + init_data.reserve_indices(2); // vertices init_data.add_vertex((Vec3f)center.cast()); init_data.add_vertex((Vec3f)m_grabbers[id].center.cast()); // indices - init_data.add_ushort_line(0, 1); + init_data.add_line(0, 1); m_grabber_connections[id].model.init_from(std::move(init_data)); } @@ -133,18 +150,24 @@ void GLGizmoMove3D::on_render() m_grabber_connections[id].model.render(); } }; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (m_hover_id == -1) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // draw axes for (unsigned int i = 0; i < 3; ++i) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL render_grabber_connection(i); #else if (m_grabbers[i].enabled) { @@ -154,13 +177,13 @@ void GLGizmoMove3D::on_render() ::glVertex3dv(m_grabbers[i].center.data()); glsafe(::glEnd()); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // draw grabbers render_grabbers(box); @@ -171,10 +194,17 @@ void GLGizmoMove3D::on_render() } else { // draw axis -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + render_grabber_connection(m_hover_id); shader->stop_using(); } @@ -188,12 +218,12 @@ void GLGizmoMove3D::on_render() glsafe(::glEnd()); GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (shader != nullptr) { shader->start_using(); shader->set_uniform("emission_factor", 0.1f); // draw grabber - float mean_size = (float)((box.size().x() + box.size().y() + box.size().z()) / 3.0); + const float mean_size = (float)((box.size().x() + box.size().y() + box.size().z()) / 3.0); m_grabbers[m_hover_id].render(true, mean_size); shader->stop_using(); } @@ -240,18 +270,18 @@ double GLGizmoMove3D::calc_projection(const UpdateData& data) const void GLGizmoMove3D::render_grabber_extension(Axis axis, const BoundingBoxf3& box, bool picking) { - float mean_size = float((box.size().x() + box.size().y() + box.size().z()) / 3.0); - double size = m_dragging ? double(m_grabbers[axis].get_dragging_half_size(mean_size)) : double(m_grabbers[axis].get_half_size(mean_size)); + const float mean_size = float((box.size().x() + box.size().y() + box.size().z()) / 3.0); + const double size = m_dragging ? double(m_grabbers[axis].get_dragging_half_size(mean_size)) : double(m_grabbers[axis].get_half_size(mean_size)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader(picking ? "flat" : "gouraud_light"); #else GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (shader == nullptr) return; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_cone.set_color((!picking && m_hover_id != -1) ? complementary(m_grabbers[axis].color) : m_grabbers[axis].color); shader->start_using(); shader->set_uniform("emission_factor", 0.1f); @@ -261,8 +291,21 @@ void GLGizmoMove3D::render_grabber_extension(Axis axis, const BoundingBoxf3& box shader->start_using(); shader->set_uniform("emission_factor", 0.1f); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + Transform3d view_model_matrix = camera.get_view_matrix() * Geometry::assemble_transform(m_grabbers[axis].center); + if (axis == X) + view_model_matrix = view_model_matrix * Geometry::assemble_transform(Vec3d::Zero(), 0.5 * PI * Vec3d::UnitY()); + else if (axis == Y) + view_model_matrix = view_model_matrix * Geometry::assemble_transform(Vec3d::Zero(), -0.5 * PI * Vec3d::UnitX()); + view_model_matrix = view_model_matrix * Geometry::assemble_transform(2.0 * size * Vec3d::UnitZ(), Vec3d::Zero(), Vec3d(0.75 * size, 0.75 * size, 3.0 * size)); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glPushMatrix()); glsafe(::glTranslated(m_grabbers[axis].center.x(), m_grabbers[axis].center.y(), m_grabbers[axis].center.z())); if (axis == X) @@ -272,12 +315,15 @@ void GLGizmoMove3D::render_grabber_extension(Axis axis, const BoundingBoxf3& box glsafe(::glTranslated(0.0, 0.0, 2.0 * size)); glsafe(::glScaled(0.75 * size, 0.75 * size, 3.0 * size)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_cone.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL if (! picking) -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp index 2a75df866..92729c199 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp @@ -18,14 +18,14 @@ class GLGizmoMove3D : public GLGizmoBase Vec3d m_starting_box_bottom_center{ Vec3d::Zero() }; GLModel m_cone; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL struct GrabberConnection { GLModel model; Vec3d old_center{ Vec3d::Zero() }; }; std::array m_grabber_connections; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL public: GLGizmoMove3D(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); @@ -34,19 +34,28 @@ public: double get_snap_step(double step) const { return m_snap_step; } void set_snap_step(double step) { m_snap_step = step; } - const Vec3d& get_displacement() const { return m_displacement; } - std::string get_tooltip() const override; + /// + /// Postpone to Grabber for move + /// + /// Keep information about mouse click + /// Return True when use the information otherwise False. + bool on_mouse(const wxMouseEvent &mouse_event) override; + + /// + /// Detect reduction of move for wipetover on selection change + /// + void data_changed() override; protected: - virtual bool on_init() override; - virtual std::string on_get_name() const override; - virtual bool on_is_activable() const override; - virtual void on_start_dragging() override; - virtual void on_stop_dragging() override; - virtual void on_update(const UpdateData& data) override; - virtual void on_render() override; - virtual void on_render_for_picking() override; + bool on_init() override; + std::string on_get_name() const override; + bool on_is_activable() const override; + void on_start_dragging() override; + void on_stop_dragging() override; + void on_dragging(const UpdateData& data) override; + void on_render() override; + void on_render_for_picking() override; private: double calc_projection(const UpdateData& data) const; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index 4c76767bd..01dc59514 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -18,7 +18,11 @@ namespace Slic3r::GUI { - std::shared_ptr GLGizmoPainterBase::s_sphere = nullptr; +#if ENABLE_LEGACY_OPENGL_REMOVAL +std::shared_ptr GLGizmoPainterBase::s_sphere = nullptr; +#else +std::shared_ptr GLGizmoPainterBase::s_sphere = nullptr; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL GLGizmoPainterBase::GLGizmoPainterBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) : GLGizmoBase(parent, icon_filename, sprite_id) @@ -27,17 +31,22 @@ GLGizmoPainterBase::GLGizmoPainterBase(GLCanvas3D& parent, const std::string& ic GLGizmoPainterBase::~GLGizmoPainterBase() { +#if ENABLE_LEGACY_OPENGL_REMOVAL + if (s_sphere != nullptr) + s_sphere.reset(); +#else if (s_sphere != nullptr && s_sphere->has_VBOs()) s_sphere->release_geometry(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -void GLGizmoPainterBase::set_painter_gizmo_data(const Selection& selection) +void GLGizmoPainterBase::data_changed() { if (m_state != On) return; const ModelObject* mo = m_c->selection_info() ? m_c->selection_info()->model_object() : nullptr; - + const Selection & selection = m_parent.get_selection(); if (mo && selection.is_from_single_instance() && (m_schedule_update || mo->id() != m_old_mo_id || mo->volumes.size() != m_old_volumes_size)) { @@ -96,8 +105,16 @@ void GLGizmoPainterBase::render_triangles(const Selection& selection) const if (is_left_handed) glsafe(::glFrontFace(GL_CW)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d matrix = camera.get_view_matrix() * trafo_matrix; + shader->set_uniform("view_model_matrix", matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + shader->set_uniform("normal_matrix", (Matrix3d)matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glPushMatrix()); glsafe(::glMultMatrixd(trafo_matrix.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES // For printers with multiple extruders, it is necessary to pass trafo_matrix // to the shader input variable print_box.volume_world_matrix before @@ -105,9 +122,13 @@ void GLGizmoPainterBase::render_triangles(const Selection& selection) const // wrong transformation matrix is used for "Clipping of view". shader->set_uniform("volume_world_matrix", trafo_matrix); +#if ENABLE_GL_SHADERS_ATTRIBUTES + m_triangle_selectors[mesh_id]->render(m_imgui, trafo_matrix); +#else m_triangle_selectors[mesh_id]->render(m_imgui); glsafe(::glPopMatrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (is_left_handed) glsafe(::glFrontFace(GL_CCW)); } @@ -142,11 +163,25 @@ void GLGizmoPainterBase::render_cursor() void GLGizmoPainterBase::render_cursor_circle() { +#if !ENABLE_GL_SHADERS_ATTRIBUTES const Camera &camera = wxGetApp().plater()->get_camera(); const float zoom = float(camera.get_zoom()); const float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES - const Size cnv_size = m_parent.get_canvas_size(); + const Size cnv_size = m_parent.get_canvas_size(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const float cnv_width = float(cnv_size.get_width()); + const float cnv_height = float(cnv_size.get_height()); + if (cnv_width == 0.0f || cnv_height == 0.0f) + return; + + const float cnv_inv_width = 1.0f / cnv_width; + const float cnv_inv_height = 1.0f / cnv_height; + + const Vec2d center = m_parent.get_local_mouse_position(); + const float radius = m_cursor_radius * float(wxGetApp().plater()->get_camera().get_zoom()); +#else const float cnv_half_width = 0.5f * float(cnv_size.get_width()); const float cnv_half_height = 0.5f * float(cnv_size.get_height()); if (cnv_half_width == 0.0f || cnv_half_height == 0.0f) @@ -154,14 +189,16 @@ void GLGizmoPainterBase::render_cursor_circle() const Vec2d mouse_pos(m_parent.get_local_mouse_position().x(), m_parent.get_local_mouse_position().y()); Vec2d center(mouse_pos.x() - cnv_half_width, cnv_half_height - mouse_pos.y()); center = center * inv_zoom; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glLineWidth(1.5f)); -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL static const std::array color = { 0.f, 1.f, 0.3f }; glsafe(::glColor3fv(color.data())); -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glDisable(GL_DEPTH_TEST)); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushMatrix()); glsafe(::glLoadIdentity()); // ensure that the circle is renderered inside the frustrum @@ -169,30 +206,41 @@ void GLGizmoPainterBase::render_cursor_circle() // ensure that the overlay fits the frustrum near z plane const double gui_scale = camera.get_gui_scale(); glsafe(::glScaled(gui_scale, gui_scale, 1.0)); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushAttrib(GL_ENABLE_BIT)); glsafe(::glLineStipple(4, 0xAAAA)); glsafe(::glEnable(GL_LINE_STIPPLE)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (!m_circle.is_initialized() || !m_old_center.isApprox(center) || std::abs(m_old_cursor_radius - radius) > EPSILON) { + m_old_cursor_radius = radius; +#else if (!m_circle.is_initialized() || !m_old_center.isApprox(center) || std::abs(m_old_cursor_radius - m_cursor_radius) > EPSILON) { - m_old_center = center; m_old_cursor_radius = m_cursor_radius; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + m_old_center = center; m_circle.reset(); GLModel::Geometry init_data; static const unsigned int StepsCount = 32; static const float StepSize = 2.0f * float(PI) / float(StepsCount); - init_data.format = { GLModel::Geometry::EPrimitiveType::LineLoop, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; + init_data.format = { GLModel::Geometry::EPrimitiveType::LineLoop, GLModel::Geometry::EVertexLayout::P2 }; init_data.color = { 0.0f, 1.0f, 0.3f, 1.0f }; - init_data.vertices.reserve(StepsCount * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(StepsCount * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.reserve_vertices(StepsCount); + init_data.reserve_indices(StepsCount); // vertices + indices - for (unsigned short i = 0; i < StepsCount; ++i) { - const float angle = float(i * StepSize); - init_data.add_vertex(Vec3f(center.x() + ::cos(angle) * m_cursor_radius, center.y() + ::sin(angle) * m_cursor_radius, 0.0f)); - init_data.add_ushort_index(i); + for (unsigned int i = 0; i < StepsCount; ++i) { + const float angle = float(i) * StepSize; +#if ENABLE_GL_SHADERS_ATTRIBUTES + init_data.add_vertex(Vec2f(2.0f * ((center.x() + ::cos(angle) * radius) * cnv_inv_width - 0.5f), + -2.0f * ((center.y() + ::sin(angle) * radius) * cnv_inv_height - 0.5f))); +#else + init_data.add_vertex(Vec2f(center.x() + ::cos(angle) * m_cursor_radius, center.y() + ::sin(angle) * m_cursor_radius)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + init_data.add_index(i); } m_circle.init_from(std::move(init_data)); @@ -201,6 +249,10 @@ void GLGizmoPainterBase::render_cursor_circle() GLShaderProgram* shader = GUI::wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + shader->set_uniform("view_model_matrix", Transform3d::Identity()); + shader->set_uniform("projection_matrix", Transform3d::Identity()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_circle.render(); shader->stop_using(); } @@ -209,10 +261,12 @@ void GLGizmoPainterBase::render_cursor_circle() for (double angle=0; angle<2*M_PI; angle+=M_PI/20.) ::glVertex2f(GLfloat(center.x()+m_cursor_radius*cos(angle)), GLfloat(center.y()+m_cursor_radius*sin(angle))); glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glPopAttrib()); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glEnable(GL_DEPTH_TEST)); } @@ -220,20 +274,31 @@ void GLGizmoPainterBase::render_cursor_circle() void GLGizmoPainterBase::render_cursor_sphere(const Transform3d& trafo) const { if (s_sphere == nullptr) { +#if ENABLE_LEGACY_OPENGL_REMOVAL + s_sphere = std::make_shared(); + s_sphere->init_from(its_make_sphere(1.0, double(PI) / 12.0)); +#else s_sphere = std::make_shared(); s_sphere->load_its_flat_shading(its_make_sphere(1.0, double(PI) / 12.0)); s_sphere->finalize_geometry(true); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } + GLShaderProgram* shader = wxGetApp().get_shader("flat"); + if (shader == nullptr) + return; + const Transform3d complete_scaling_matrix_inverse = Geometry::Transformation(trafo).get_matrix(true, true, false, true).inverse(); const bool is_left_handed = Geometry::Transformation(trafo).is_left_handed(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushMatrix()); glsafe(::glMultMatrixd(trafo.data())); // Inverse matrix of the instance scaling is applied so that the mark does not scale with the object. - glsafe(::glTranslatef(m_rr.hit(0), m_rr.hit(1), m_rr.hit(2))); + glsafe(::glTranslatef(m_rr.hit.x(), m_rr.hit.y(), m_rr.hit.z())); glsafe(::glMultMatrixd(complete_scaling_matrix_inverse.data())); glsafe(::glScaled(m_cursor_radius, m_cursor_radius, m_cursor_radius)); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES if (is_left_handed) glFrontFace(GL_CW); @@ -243,15 +308,38 @@ void GLGizmoPainterBase::render_cursor_sphere(const Transform3d& trafo) const render_color = this->get_cursor_sphere_left_button_color(); else if (m_button_down == Button::Right) render_color = this->get_cursor_sphere_right_button_color(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + shader->start_using(); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + Transform3d view_model_matrix = camera.get_view_matrix() * trafo * + Geometry::assemble_transform(m_rr.hit.cast()) * complete_scaling_matrix_inverse * + Geometry::assemble_transform(Vec3d::Zero(), Vec3d::Zero(), m_cursor_radius * Vec3d::Ones()); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + + assert(s_sphere != nullptr); + s_sphere->set_color(render_color); +#else glsafe(::glColor4fv(render_color.data())); assert(s_sphere != nullptr); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL s_sphere->render(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + shader->stop_using(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + if (is_left_handed) glFrontFace(GL_CCW); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } @@ -612,7 +700,72 @@ bool GLGizmoPainterBase::gizmo_event(SLAGizmoEventType action, const Vec2d& mous return false; } +bool GLGizmoPainterBase::on_mouse(const wxMouseEvent &mouse_event) +{ + // wxCoord == int --> wx/types.h + Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); + Vec2d mouse_pos = mouse_coord.cast(); + if (mouse_event.Moving()) { + gizmo_event(SLAGizmoEventType::Moving, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), false); + return false; + } + + // when control is down we allow scene pan and rotation even when clicking + // over some object + bool control_down = mouse_event.CmdDown(); + bool grabber_contains_mouse = (get_hover_id() != -1); + + const Selection &selection = m_parent.get_selection(); + int selected_object_idx = selection.get_object_idx(); + if (mouse_event.LeftDown()) { + if ((!control_down || grabber_contains_mouse) && + gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), false)) + // the gizmo got the event and took some action, there is no need + // to do anything more + return true; + } else if (mouse_event.RightDown()){ + if (!control_down && selected_object_idx != -1 && + gizmo_event(SLAGizmoEventType::RightDown, mouse_pos, false, false, false)) + // event was taken care of + return true; + } else if (mouse_event.Dragging()) { + if (m_parent.get_move_volume_id() != -1) + // don't allow dragging objects with the Sla gizmo on + return true; + if (!control_down && gizmo_event(SLAGizmoEventType::Dragging, + mouse_pos, mouse_event.ShiftDown(), + mouse_event.AltDown(), false)) { + // the gizmo got the event and took some action, no need to do + // anything more here + m_parent.set_as_dirty(); + return true; + } + if(control_down && (mouse_event.LeftIsDown() || mouse_event.RightIsDown())) + { + // CTRL has been pressed while already dragging -> stop current action + if (mouse_event.LeftIsDown()) + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), true); + else if (mouse_event.RightIsDown()) + gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), true); + return false; + } + } else if (mouse_event.LeftUp()) { + if (!m_parent.is_mouse_dragging()) { + // in case SLA/FDM gizmo is selected, we just pass the LeftUp + // event and stop processing - neither object moving or selecting + // is suppressed in that case + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), control_down); + return true; + } + } else if (mouse_event.RightUp()) { + if (!m_parent.is_mouse_dragging()) { + gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), control_down); + return true; + } + } + return false; +} void GLGizmoPainterBase::update_raycast_cache(const Vec2d& mouse_position, const Camera& camera, @@ -745,7 +898,11 @@ ColorRGBA TriangleSelectorGUI::get_seed_fill_color(const ColorRGBA& base_color) return saturate(base_color, 0.75f); } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void TriangleSelectorGUI::render(ImGuiWrapper* imgui, const Transform3d& matrix) +#else void TriangleSelectorGUI::render(ImGuiWrapper* imgui) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { static const ColorRGBA enforcers_color = { 0.47f, 0.47f, 1.0f, 1.0f }; static const ColorRGBA blockers_color = { 1.0f, 0.44f, 0.44f, 1.0f }; @@ -758,18 +915,35 @@ void TriangleSelectorGUI::render(ImGuiWrapper* imgui) auto* shader = wxGetApp().get_current_shader(); if (! shader) return; + assert(shader->get_name() == "gouraud"); + ScopeGuard guard([shader]() { if (shader) shader->set_uniform("offset_depth_buffer", false);}); shader->set_uniform("offset_depth_buffer", true); for (auto iva : {std::make_pair(&m_iva_enforcers, enforcers_color), std::make_pair(&m_iva_blockers, blockers_color)}) { +#if ENABLE_LEGACY_OPENGL_REMOVAL + iva.first->set_color(iva.second); + iva.first->render(); +#else if (iva.first->has_VBOs()) { shader->set_uniform("uniform_color", iva.second); iva.first->render(); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } - for (auto &iva : m_iva_seed_fills) +#if ENABLE_LEGACY_OPENGL_REMOVAL + for (auto& iva : m_iva_seed_fills) { + size_t color_idx = &iva - &m_iva_seed_fills.front(); + const ColorRGBA& color = TriangleSelectorGUI::get_seed_fill_color(color_idx == 1 ? enforcers_color : + color_idx == 2 ? blockers_color : + GLVolume::NEUTRAL_COLOR); + iva.set_color(color); + iva.render(); + } +#else + for (auto& iva : m_iva_seed_fills) if (iva.has_VBOs()) { size_t color_idx = &iva - &m_iva_seed_fills.front(); const ColorRGBA& color = TriangleSelectorGUI::get_seed_fill_color(color_idx == 1 ? enforcers_color : @@ -778,7 +952,15 @@ void TriangleSelectorGUI::render(ImGuiWrapper* imgui) shader->set_uniform("uniform_color", color); iva.render(); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_paint_contour(matrix); +#else + render_paint_contour(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#else if (m_paint_contour.has_VBO()) { ScopeGuard guard_gouraud([shader]() { shader->start_using(); }); shader->stop_using(); @@ -792,13 +974,14 @@ void TriangleSelectorGUI::render(ImGuiWrapper* imgui) contour_shader->stop_using(); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL #ifdef PRUSASLICER_TRIANGLE_SELECTOR_DEBUG if (imgui) render_debug(imgui); else assert(false); // If you want debug output, pass ptr to ImGuiWrapper. -#endif +#endif // PRUSASLICER_TRIANGLE_SELECTOR_DEBUG } void TriangleSelectorGUI::update_render_data() @@ -807,20 +990,44 @@ void TriangleSelectorGUI::update_render_data() int blc_cnt = 0; std::vector seed_fill_cnt(m_iva_seed_fills.size(), 0); +#if ENABLE_LEGACY_OPENGL_REMOVAL + for (auto* iva : { &m_iva_enforcers, &m_iva_blockers }) { + iva->reset(); + } + + for (auto& iva : m_iva_seed_fills) { + iva.reset(); + } + + GLModel::Geometry iva_enforcers_data; + iva_enforcers_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + GLModel::Geometry iva_blockers_data; + iva_blockers_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + std::array iva_seed_fills_data; + for (auto& data : iva_seed_fills_data) + data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; +#else for (auto *iva : {&m_iva_enforcers, &m_iva_blockers}) iva->release_geometry(); for (auto &iva : m_iva_seed_fills) iva.release_geometry(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL for (const Triangle &tr : m_triangles) { if (!tr.valid() || tr.is_split() || (tr.get_state() == EnforcerBlockerType::NONE && !tr.is_selected_by_seed_fill())) continue; int tr_state = int(tr.get_state()); +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLModel::Geometry &iva = tr.is_selected_by_seed_fill() ? iva_seed_fills_data[tr_state] : + tr.get_state() == EnforcerBlockerType::ENFORCER ? iva_enforcers_data : + iva_blockers_data; +#else GLIndexedVertexArray &iva = tr.is_selected_by_seed_fill() ? m_iva_seed_fills[tr_state] : tr.get_state() == EnforcerBlockerType::ENFORCER ? m_iva_enforcers : m_iva_blockers; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL int &cnt = tr.is_selected_by_seed_fill() ? seed_fill_cnt[tr_state] : tr.get_state() == EnforcerBlockerType::ENFORCER ? enf_cnt : blc_cnt; @@ -830,13 +1037,32 @@ void TriangleSelectorGUI::update_render_data() //FIXME the normal may likely be pulled from m_triangle_selectors, but it may not be worth the effort // or the current implementation may be more cache friendly. const Vec3f n = (v1 - v0).cross(v2 - v1).normalized(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + iva.add_vertex(v0, n); + iva.add_vertex(v1, n); + iva.add_vertex(v2, n); + iva.add_triangle((unsigned int)cnt, (unsigned int)cnt + 1, (unsigned int)cnt + 2); +#else iva.push_geometry(v0, n); iva.push_geometry(v1, n); iva.push_geometry(v2, n); iva.push_triangle(cnt, cnt + 1, cnt + 2); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL cnt += 3; } +#if ENABLE_LEGACY_OPENGL_REMOVAL + if (!iva_enforcers_data.is_empty()) + m_iva_enforcers.init_from(std::move(iva_enforcers_data)); + if (!iva_blockers_data.is_empty()) + m_iva_blockers.init_from(std::move(iva_blockers_data)); + for (size_t i = 0; i < m_iva_seed_fills.size(); ++i) { + if (!iva_seed_fills_data[i].is_empty()) + m_iva_seed_fills[i].init_from(std::move(iva_seed_fills_data[i])); + } + + update_paint_contour(); +#else for (auto *iva : {&m_iva_enforcers, &m_iva_blockers}) iva->finalize_geometry(true); @@ -861,8 +1087,10 @@ void TriangleSelectorGUI::update_render_data() m_paint_contour.contour_indices_size = m_paint_contour.contour_indices.size(); m_paint_contour.finalize_geometry(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } +#if !ENABLE_LEGACY_OPENGL_REMOVAL void GLPaintContour::render() const { assert(this->m_contour_VBO_id != 0); @@ -920,6 +1148,7 @@ void GLPaintContour::release_geometry() } this->clear(); } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL #ifdef PRUSASLICER_TRIANGLE_SELECTOR_DEBUG void TriangleSelectorGUI::render_debug(ImGuiWrapper* imgui) @@ -956,45 +1185,117 @@ void TriangleSelectorGUI::render_debug(ImGuiWrapper* imgui) INVALID }; +#if ENABLE_LEGACY_OPENGL_REMOVAL + for (auto& va : m_varrays) + va.reset(); +#else for (auto& va : m_varrays) va.release_geometry(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL std::array cnts; ::glScalef(1.01f, 1.01f, 1.01f); +#if ENABLE_LEGACY_OPENGL_REMOVAL + std::array varrays_data; + for (auto& data : varrays_data) + data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3, GLModel::Geometry::EIndexType::UINT }; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + for (int tr_id=0; tr_idadd_vertex(m_vertices[tr.verts_idxs[i]].v, Vec3f(0.0f, 0.0f, 1.0f)); + } + va->add_uint_triangle((unsigned int)*cnt, (unsigned int)*cnt + 1, (unsigned int)*cnt + 2); +#else + for (int i = 0; i < 3; ++i) va->push_geometry(double(m_vertices[tr.verts_idxs[i]].v[0]), double(m_vertices[tr.verts_idxs[i]].v[1]), double(m_vertices[tr.verts_idxs[i]].v[2]), 0., 0., 1.); va->push_triangle(*cnt, - *cnt+1, - *cnt+2); + *cnt + 1, + *cnt + 2); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL *cnt += 3; } +#if ENABLE_LEGACY_OPENGL_REMOVAL + for (int i = 0; i < 3; ++i) { + if (!varrays_data[i].is_empty()) + m_varrays[i].init_from(std::move(varrays_data[i])); + } +#else +// for (auto* iva : { &m_iva_enforcers, &m_iva_blockers }) +// iva->finalize_geometry(true); +// +// for (auto& iva : m_iva_seed_fills) +// iva.finalize_geometry(true); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLShaderProgram* curr_shader = wxGetApp().get_current_shader(); + if (curr_shader != nullptr) + curr_shader->stop_using(); + + GLShaderProgram* shader = wxGetApp().get_shader("flat"); + if (shader != nullptr) { + shader->start_using(); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + ::glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); for (vtype i : {ORIGINAL, SPLIT, INVALID}) { +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLModel& va = m_varrays[i]; + switch (i) { + case ORIGINAL: va.set_color({ 0.0f, 0.0f, 1.0f, 1.0f }); break; + case SPLIT: va.set_color({ 1.0f, 0.0f, 0.0f, 1.0f }); break; + case INVALID: va.set_color({ 1.0f, 1.0f, 0.0f, 1.0f }); break; + } + va.render(); +#else GLIndexedVertexArray& va = m_varrays[i]; va.finalize_geometry(true); if (va.has_VBOs()) { @@ -1005,11 +1306,77 @@ void TriangleSelectorGUI::render_debug(ImGuiWrapper* imgui) } va.render(); } +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } ::glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); + +#if ENABLE_LEGACY_OPENGL_REMOVAL + shader->stop_using(); + } + + if (curr_shader != nullptr) + curr_shader->start_using(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#endif +#endif // PRUSASLICER_TRIANGLE_SELECTOR_DEBUG +#if ENABLE_LEGACY_OPENGL_REMOVAL +void TriangleSelectorGUI::update_paint_contour() +{ + m_paint_contour.reset(); + GLModel::Geometry init_data; + const std::vector contour_edges = this->get_seed_fill_contour(); + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(2 * contour_edges.size()); + init_data.reserve_indices(2 * contour_edges.size()); +#if ENABLE_GL_SHADERS_ATTRIBUTES + init_data.color = ColorRGBA::WHITE(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +// + // vertices + indices + unsigned int vertices_count = 0; + for (const Vec2i& edge : contour_edges) { + init_data.add_vertex(m_vertices[edge(0)].v); + init_data.add_vertex(m_vertices[edge(1)].v); + vertices_count += 2; + init_data.add_line(vertices_count - 2, vertices_count - 1); + } + + if (!init_data.is_empty()) + m_paint_contour.init_from(std::move(init_data)); +} + +#if ENABLE_GL_SHADERS_ATTRIBUTES +void TriangleSelectorGUI::render_paint_contour(const Transform3d& matrix) +#else +void TriangleSelectorGUI::render_paint_contour() +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +{ + auto* curr_shader = wxGetApp().get_current_shader(); + if (curr_shader != nullptr) + curr_shader->stop_using(); + + auto* contour_shader = wxGetApp().get_shader("mm_contour"); + if (contour_shader != nullptr) { + contour_shader->start_using(); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + contour_shader->set_uniform("view_model_matrix", camera.get_view_matrix() * matrix); + contour_shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + + glsafe(::glDepthFunc(GL_LEQUAL)); + m_paint_contour.render(); + glsafe(::glDepthFunc(GL_LESS)); + + contour_shader->stop_using(); + } + + if (curr_shader != nullptr) + curr_shader->start_using(); +} +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp index 079f3f08e..64f531793 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -3,7 +3,11 @@ #include "GLGizmoBase.hpp" +#if ENABLE_LEGACY_OPENGL_REMOVAL +#include "slic3r/GUI/GLModel.hpp" +#else #include "slic3r/GUI/3DScene.hpp" +#endif // ENABLE_LEGACY_OPENGL_REMOVAL #include "libslic3r/ObjectID.hpp" #include "libslic3r/TriangleSelector.hpp" @@ -21,6 +25,7 @@ enum class SLAGizmoEventType : unsigned char; class ClippingPlane; struct Camera; class GLGizmoMmuSegmentation; +class Selection; enum class PainterGizmoType { FDM_SUPPORTS, @@ -28,6 +33,7 @@ enum class PainterGizmoType { MMU_SEGMENTATION }; +#if !ENABLE_LEGACY_OPENGL_REMOVAL class GLPaintContour { public: @@ -63,6 +69,7 @@ public: GLuint m_contour_VBO_id{0}; GLuint m_contour_EBO_id{0}; }; +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL class TriangleSelectorGUI : public TriangleSelector { public: @@ -70,18 +77,23 @@ public: : TriangleSelector(mesh) {} virtual ~TriangleSelectorGUI() = default; +#if ENABLE_GL_SHADERS_ATTRIBUTES + virtual void render(ImGuiWrapper* imgui, const Transform3d& matrix); + void render(const Transform3d& matrix) { this->render(nullptr, matrix); } +#else // Render current selection. Transformation matrices are supposed // to be already set. virtual void render(ImGuiWrapper *imgui); void render() { this->render(nullptr); } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES - void request_update_render_data() { m_update_render_data = true; }; + void request_update_render_data() { m_update_render_data = true; } #ifdef PRUSASLICER_TRIANGLE_SELECTOR_DEBUG void render_debug(ImGuiWrapper* imgui); bool m_show_triangles{false}; bool m_show_invalid{false}; -#endif +#endif // PRUSASLICER_TRIANGLE_SELECTOR_DEBUG protected: bool m_update_render_data = false; @@ -91,13 +103,33 @@ protected: private: void update_render_data(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLModel m_iva_enforcers; + GLModel m_iva_blockers; + std::array m_iva_seed_fills; +#ifdef PRUSASLICER_TRIANGLE_SELECTOR_DEBUG + std::array m_varrays; +#endif // PRUSASLICER_TRIANGLE_SELECTOR_DEBUG +#else GLIndexedVertexArray m_iva_enforcers; GLIndexedVertexArray m_iva_blockers; std::array m_iva_seed_fills; std::array m_varrays; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL protected: +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLModel m_paint_contour; + + void update_paint_contour(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render_paint_contour(const Transform3d& matrix); +#else + void render_paint_contour(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#else GLPaintContour m_paint_contour; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL }; @@ -113,8 +145,8 @@ private: void on_render_for_picking() override {} public: GLGizmoPainterBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); - virtual ~GLGizmoPainterBase() override; - virtual void set_painter_gizmo_data(const Selection& selection); + ~GLGizmoPainterBase() override; + void data_changed() override; virtual bool gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down, bool alt_down, bool control_down); // Following function renders the triangles and cursor. Having this separated @@ -127,6 +159,15 @@ public: virtual const float get_cursor_radius_max() const { return CursorRadiusMax; } virtual const float get_cursor_radius_step() const { return CursorRadiusStep; } + /// + /// Implement when want to process mouse events in gizmo + /// Click, Right click, move, drag, ... + /// + /// Keep information about mouse click + /// Return True when use the information and don't want to + /// propagate it otherwise False. + bool on_mouse(const wxMouseEvent &mouse_event) override; + protected: virtual void render_triangles(const Selection& selection) const; void render_cursor(); @@ -171,11 +212,11 @@ protected: bool m_paint_on_overhangs_only = false; float m_highlight_by_angle_threshold_deg = 0.f; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLModel m_circle; Vec2d m_old_center{ Vec2d::Zero() }; float m_old_cursor_radius{ 0.0f }; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL static constexpr float SmartFillAngleMin = 0.0f; static constexpr float SmartFillAngleMax = 90.f; @@ -209,7 +250,11 @@ private: const Camera& camera, const std::vector& trafo_matrices) const; +#if ENABLE_LEGACY_OPENGL_REMOVAL + static std::shared_ptr s_sphere; +#else static std::shared_ptr s_sphere; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL bool m_internal_stack_active = false; bool m_schedule_update = false; @@ -231,9 +276,6 @@ private: protected: void on_set_state() override; - void on_start_dragging() override {} - void on_stop_dragging() override {} - virtual void on_opening() = 0; virtual void on_shutdown() = 0; virtual PainterGizmoType get_painter_type() const = 0; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp index 9bedc86cc..6bec8be50 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp @@ -28,7 +28,23 @@ const float GLGizmoRotate::GrabberOffset = 0.15f; // in percent of radius GLGizmoRotate::GLGizmoRotate(GLCanvas3D& parent, GLGizmoRotate::Axis axis) : GLGizmoBase(parent, "", -1) , m_axis(axis) -{} + , m_angle(0.0) + , m_center(0.0, 0.0, 0.0) + , m_radius(0.0f) + , m_snap_coarse_in_radius(0.0f) + , m_snap_coarse_out_radius(0.0f) + , m_snap_fine_in_radius(0.0f) + , m_snap_fine_out_radius(0.0f) + , m_drag_color(DEFAULT_DRAG_COLOR) + , m_highlight_color(DEFAULT_HIGHLIGHT_COLOR) +{ + m_group_id = static_cast(axis); +} + +void GLGizmoRotate::set_highlight_color(const ColorRGBA &color) +{ + m_highlight_color = color; +} void GLGizmoRotate::set_angle(double angle) { @@ -50,6 +66,28 @@ std::string GLGizmoRotate::get_tooltip() const return (m_hover_id == 0 || m_grabbers.front().dragging) ? axis + ": " + format(float(Geometry::rad2deg(m_angle)), 4) : ""; } +bool GLGizmoRotate::on_mouse(const wxMouseEvent &mouse_event) +{ + return use_grabbers(mouse_event); +} + +void GLGizmoRotate::dragging(const UpdateData &data) { on_dragging(data); } + +void GLGizmoRotate::start_dragging() +{ + m_grabbers[0].dragging = true; + on_start_dragging(); +} + +void GLGizmoRotate::stop_dragging() +{ + m_grabbers[0].dragging = false; + on_stop_dragging(); +} + +void GLGizmoRotate::enable_grabber() { m_grabbers[0].enabled = true; } +void GLGizmoRotate::disable_grabber() { m_grabbers[0].enabled = false; } + bool GLGizmoRotate::on_init() { m_grabbers.push_back(Grabber()); @@ -67,7 +105,7 @@ void GLGizmoRotate::on_start_dragging() m_snap_fine_out_radius = m_snap_fine_in_radius + m_radius * ScaleLongTooth; } -void GLGizmoRotate::on_update(const UpdateData& data) +void GLGizmoRotate::on_dragging(const UpdateData &data) { const Vec2d mouse_pos = to_2d(mouse_position_in_local_plane(data.mouse_ray, m_parent.get_selection())); @@ -125,24 +163,34 @@ void GLGizmoRotate::on_render() glsafe(::glEnable(GL_DEPTH_TEST)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + m_grabbers.front().matrix = local_transform(selection); +#else glsafe(::glPushMatrix()); transform_to_local(selection); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glLineWidth((m_hover_id != -1) ? 2.0f : 1.5f)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); - const float radius = Offset + m_parent.get_selection().get_bounding_box().radius(); - const bool radius_changed = std::abs(m_old_radius - radius) > EPSILON; - m_old_radius = radius; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d view_model_matrix = camera.get_view_matrix() * m_grabbers.front().matrix; + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + + const bool radius_changed = std::abs(m_old_radius - m_radius) > EPSILON; + m_old_radius = m_radius; ColorRGBA color((m_hover_id != -1) ? m_drag_color : m_highlight_color); render_circle(color, radius_changed); if (m_hover_id != -1) { - const bool hover_radius_changed = std::abs(m_old_hover_radius - radius) > EPSILON; - m_old_hover_radius = radius; + const bool hover_radius_changed = std::abs(m_old_hover_radius - m_radius) > EPSILON; + m_old_hover_radius = m_radius; render_scale(color, hover_radius_changed); render_snap_radii(color, hover_radius_changed); @@ -168,12 +216,14 @@ void GLGizmoRotate::on_render() if (m_hover_id != -1) render_angle(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL render_grabber(box); render_grabber_extension(box, false); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } void GLGizmoRotate::on_render_for_picking() @@ -182,15 +232,20 @@ void GLGizmoRotate::on_render_for_picking() glsafe(::glDisable(GL_DEPTH_TEST)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + m_grabbers.front().matrix = local_transform(selection); +#else glsafe(::glPushMatrix()); - transform_to_local(selection); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES const BoundingBoxf3& box = selection.get_bounding_box(); render_grabbers_for_picking(box); render_grabber_extension(box, true); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } void GLGizmoRotate3D::on_render_input_window(float x, float y, float bottom_limit) @@ -223,26 +278,26 @@ void GLGizmoRotate3D::load_rotoptimize_state() } } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void GLGizmoRotate::render_circle(const ColorRGBA& color, bool radius_changed) #else void GLGizmoRotate::render_circle() const -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL if (!m_circle.is_initialized() || radius_changed) { m_circle.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::LineLoop, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(ScaleStepsCount * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(ScaleStepsCount * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::LineLoop, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(ScaleStepsCount); + init_data.reserve_indices(ScaleStepsCount); // vertices + indices - for (unsigned short i = 0; i < ScaleStepsCount; ++i) { + for (unsigned int i = 0; i < ScaleStepsCount; ++i) { const float angle = float(i * ScaleStepRad); init_data.add_vertex(Vec3f(::cos(angle) * m_radius, ::sin(angle) * m_radius, 0.0f)); - init_data.add_ushort_index(i); + init_data.add_index(i); } m_circle.init_from(std::move(init_data)); @@ -260,29 +315,29 @@ void GLGizmoRotate::render_circle() const ::glVertex3f((GLfloat)x, (GLfloat)y, (GLfloat)z); } glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void GLGizmoRotate::render_scale(const ColorRGBA& color, bool radius_changed) #else void GLGizmoRotate::render_scale() const -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { const float out_radius_long = m_snap_fine_out_radius; const float out_radius_short = m_radius * (1.0f + 0.5f * ScaleLongTooth); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL if (!m_scale.is_initialized() || radius_changed) { m_scale.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(2 * ScaleStepsCount * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(2 * ScaleStepsCount * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(2 * ScaleStepsCount); + init_data.reserve_indices(2 * ScaleStepsCount); // vertices + indices - for (unsigned short i = 0; i < ScaleStepsCount; ++i) { + for (unsigned int i = 0; i < ScaleStepsCount; ++i) { const float angle = float(i * ScaleStepRad); const float cosa = ::cos(angle); const float sina = ::sin(angle); @@ -291,10 +346,12 @@ void GLGizmoRotate::render_scale() const const float out_x = (i % ScaleLongEvery == 0) ? cosa * out_radius_long : cosa * out_radius_short; const float out_y = (i % ScaleLongEvery == 0) ? sina * out_radius_long : sina * out_radius_short; + // vertices init_data.add_vertex(Vec3f(in_x, in_y, 0.0f)); init_data.add_vertex(Vec3f(out_x, out_y, 0.0f)); - init_data.add_ushort_index(i * 2); - init_data.add_ushort_index(i * 2 + 1); + + // indices + init_data.add_line(i * 2, i * 2 + 1); } m_scale.init_from(std::move(init_data)); @@ -318,30 +375,30 @@ void GLGizmoRotate::render_scale() const ::glVertex3f((GLfloat)out_x, (GLfloat)out_y, (GLfloat)out_z); } glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void GLGizmoRotate::render_snap_radii(const ColorRGBA& color, bool radius_changed) #else void GLGizmoRotate::render_snap_radii() const -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { const float step = 2.0f * float(PI) / float(SnapRegionsCount); const float in_radius = m_radius / 3.0f; const float out_radius = 2.0f * in_radius; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL if (!m_snap_radii.is_initialized() || radius_changed) { m_snap_radii.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(2 * ScaleStepsCount * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(2 * ScaleStepsCount * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(2 * ScaleStepsCount); + init_data.reserve_indices(2 * ScaleStepsCount); // vertices + indices - for (unsigned short i = 0; i < ScaleStepsCount; ++i) { + for (unsigned int i = 0; i < ScaleStepsCount; ++i) { const float angle = float(i * step); const float cosa = ::cos(angle); const float sina = ::sin(angle); @@ -350,10 +407,12 @@ void GLGizmoRotate::render_snap_radii() const const float out_x = cosa * out_radius; const float out_y = sina * out_radius; + // vertices init_data.add_vertex(Vec3f(in_x, in_y, 0.0f)); init_data.add_vertex(Vec3f(out_x, out_y, 0.0f)); - init_data.add_ushort_index(i * 2); - init_data.add_ushort_index(i * 2 + 1); + + // indices + init_data.add_line(i * 2, i * 2 + 1); } m_snap_radii.init_from(std::move(init_data)); @@ -377,26 +436,26 @@ void GLGizmoRotate::render_snap_radii() const ::glVertex3f((GLfloat)out_x, (GLfloat)out_y, (GLfloat)out_z); } glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void GLGizmoRotate::render_reference_radius(const ColorRGBA& color, bool radius_changed) { if (!m_reference_radius.is_initialized() || radius_changed) { m_reference_radius.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(2 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(2 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(2); + init_data.reserve_indices(2); // vertices init_data.add_vertex(Vec3f(0.0f, 0.0f, 0.0f)); init_data.add_vertex(Vec3f(m_radius * (1.0f + GrabberOffset), 0.0f, 0.0f)); // indices - init_data.add_ushort_line(0, 1); + init_data.add_line(0, 1); m_reference_radius.init_from(std::move(init_data)); } @@ -412,34 +471,38 @@ void GLGizmoRotate::render_reference_radius() const ::glVertex3f((GLfloat)(m_radius * (1.0f + GrabberOffset)), 0.0f, 0.0f); glsafe(::glEnd()); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void GLGizmoRotate::render_angle_arc(const ColorRGBA& color, bool radius_changed) #else void GLGizmoRotate::render_angle() const -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { const float step_angle = float(m_angle) / float(AngleResolution); const float ex_radius = m_radius * (1.0f + GrabberOffset); -#if ENABLE_GLBEGIN_GLEND_REMOVAL - if (!m_angle_arc.is_initialized() || radius_changed) { +#if ENABLE_LEGACY_OPENGL_REMOVAL + const bool angle_changed = std::abs(m_old_angle - m_angle) > EPSILON; + m_old_angle = m_angle; + + if (!m_angle_arc.is_initialized() || radius_changed || angle_changed) { m_angle_arc.reset(); + if (m_angle > 0.0f) { + GLModel::Geometry init_data; + init_data.format = { GLModel::Geometry::EPrimitiveType::LineStrip, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(1 + AngleResolution); + init_data.reserve_indices(1 + AngleResolution); - GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::LineStrip, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve((1 + AngleResolution) * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve((1 + AngleResolution) * GLModel::Geometry::index_stride_bytes(init_data.format)); + // vertices + indices + for (unsigned int i = 0; i <= AngleResolution; ++i) { + const float angle = float(i) * step_angle; + init_data.add_vertex(Vec3f(::cos(angle) * ex_radius, ::sin(angle) * ex_radius, 0.0f)); + init_data.add_index(i); + } - // vertices + indices - for (unsigned short i = 0; i <= AngleResolution; ++i) { - const float angle = float(i) * step_angle; - init_data.add_vertex(Vec3f(::cos(angle) * ex_radius, ::sin(angle) * ex_radius, 0.0f)); - init_data.add_ushort_index(i); + m_angle_arc.init_from(std::move(init_data)); } - - m_angle_arc.init_from(std::move(init_data)); } m_angle_arc.set_color(color); @@ -454,10 +517,10 @@ void GLGizmoRotate::render_angle() const ::glVertex3f((GLfloat)x, (GLfloat)y, (GLfloat)z); } glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void GLGizmoRotate::render_grabber_connection(const ColorRGBA& color, bool radius_changed) { if (!m_grabber_connection.model.is_initialized() || radius_changed || !m_grabber_connection.old_center.isApprox(m_grabbers.front().center)) { @@ -465,16 +528,16 @@ void GLGizmoRotate::render_grabber_connection(const ColorRGBA& color, bool radiu m_grabber_connection.old_center = m_grabbers.front().center; GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(2 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(2 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(2); + init_data.reserve_indices(2); // vertices init_data.add_vertex(Vec3f(0.0f, 0.0f, 0.0f)); init_data.add_vertex((Vec3f)m_grabbers.front().center.cast()); // indices - init_data.add_ushort_line(0, 1); + init_data.add_line(0, 1); m_grabber_connection.model.init_from(std::move(init_data)); } @@ -482,11 +545,11 @@ void GLGizmoRotate::render_grabber_connection(const ColorRGBA& color, bool radiu m_grabber_connection.model.set_color(color); m_grabber_connection.model.render(); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL void GLGizmoRotate::render_grabber(const BoundingBoxf3& box) { -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL const double grabber_radius = double(m_radius) * (1.0 + double(GrabberOffset)); m_grabbers[0].center = Vec3d(::cos(m_angle) * grabber_radius, ::sin(m_angle) * grabber_radius, 0.0); m_grabbers[0].angles.z() = m_angle; @@ -497,7 +560,7 @@ void GLGizmoRotate::render_grabber(const BoundingBoxf3& box) ::glVertex3f(0.0f, 0.0f, 0.0f); ::glVertex3dv(m_grabbers[0].center.data()); glsafe(::glEnd()); -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL m_grabbers.front().color = m_highlight_color; render_grabbers(box); @@ -508,7 +571,7 @@ void GLGizmoRotate::render_grabber_extension(const BoundingBoxf3& box, bool pick const float mean_size = float((box.size().x() + box.size().y() + box.size().z()) / 3.0); const double size = m_dragging ? double(m_grabbers.front().get_dragging_half_size(mean_size)) : double(m_grabbers.front().get_half_size(mean_size)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader(picking ? "flat" : "gouraud_light"); if (shader == nullptr) return; @@ -527,17 +590,38 @@ void GLGizmoRotate::render_grabber_extension(const BoundingBoxf3& box, bool pick shader->start_using(); shader->set_uniform("emission_factor", 0.1f); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL const Vec3d& center = m_grabbers.front().center; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d& view_matrix = camera.get_view_matrix(); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + + Transform3d view_model_matrix = view_matrix * m_grabbers.front().matrix * + Geometry::assemble_transform(center, Vec3d(0.5 * PI, 0.0, m_angle)) * + Geometry::assemble_transform(2.0 * size * Vec3d::UnitZ(), Vec3d::Zero(), Vec3d(0.75 * size, 0.75 * size, 3.0 * size)); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glPushMatrix()); glsafe(::glTranslated(center.x(), center.y(), center.z())); glsafe(::glRotated(Geometry::rad2deg(m_angle), 0.0, 0.0, 1.0)); glsafe(::glRotated(90.0, 1.0, 0.0, 0.0)); glsafe(::glTranslated(0.0, 0.0, 2.0 * size)); glsafe(::glScaled(0.75 * size, 0.75 * size, 3.0 * size)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_cone.render(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + view_model_matrix = view_matrix * m_grabbers.front().matrix * + Geometry::assemble_transform(center, Vec3d(-0.5 * PI, 0.0, m_angle)) * + Geometry::assemble_transform(2.0 * size * Vec3d::UnitZ(), Vec3d::Zero(), Vec3d(0.75 * size, 0.75 * size, 3.0 * size)); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glPopMatrix()); glsafe(::glPushMatrix()); glsafe(::glTranslated(center.x(), center.y(), center.z())); @@ -545,15 +629,49 @@ void GLGizmoRotate::render_grabber_extension(const BoundingBoxf3& box, bool pick glsafe(::glRotated(-90.0, 1.0, 0.0, 0.0)); glsafe(::glTranslated(0.0, 0.0, 2.0 * size)); glsafe(::glScaled(0.75 * size, 0.75 * size, 3.0 * size)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_cone.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL if (! picking) -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); } +#if ENABLE_GL_SHADERS_ATTRIBUTES +Transform3d GLGizmoRotate::local_transform(const Selection& selection) const +{ + Transform3d ret; + + switch (m_axis) + { + case X: + { + ret = Geometry::assemble_transform(Vec3d::Zero(), Vec3d(0.0, 0.5 * PI, 0.0)) * Geometry::assemble_transform(Vec3d::Zero(), Vec3d(0.0, 0.0, -0.5 * PI)); + break; + } + case Y: + { + ret = Geometry::assemble_transform(Vec3d::Zero(), Vec3d(0.0, 0.0, -0.5 * PI)) * Geometry::assemble_transform(Vec3d::Zero(), Vec3d(0.0, -0.5 * PI, 0.0)); + break; + } + default: + case Z: + { + ret = Transform3d::Identity(); + break; + } + } + + if (selection.is_single_volume() || selection.is_single_modifier() || selection.requires_local_axes()) + ret = selection.get_volume(*selection.get_volume_idxs().begin())->get_instance_transformation().get_matrix(true, false, true, true) * ret; + + return Geometry::assemble_transform(m_center) * ret; +} +#else void GLGizmoRotate::transform_to_local(const Selection& selection) const { glsafe(::glTranslated(m_center.x(), m_center.y(), m_center.z())); @@ -585,6 +703,7 @@ void GLGizmoRotate::transform_to_local(const Selection& selection) const } } } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES Vec3d GLGizmoRotate::mouse_position_in_local_plane(const Linef3& mouse_ray, const Selection& selection) const { @@ -624,25 +743,50 @@ Vec3d GLGizmoRotate::mouse_position_in_local_plane(const Linef3& mouse_ray, cons GLGizmoRotate3D::GLGizmoRotate3D(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) : GLGizmoBase(parent, icon_filename, sprite_id) - , m_gizmos({ GLGizmoRotate(parent, GLGizmoRotate::X), GLGizmoRotate(parent, GLGizmoRotate::Y), GLGizmoRotate(parent, GLGizmoRotate::Z) }) -{ - for (unsigned int i = 0; i < 3; ++i) { - m_gizmos[i].set_group_id(i); - } + , m_gizmos({ + GLGizmoRotate(parent, GLGizmoRotate::X), + GLGizmoRotate(parent, GLGizmoRotate::Y), + GLGizmoRotate(parent, GLGizmoRotate::Z) }) +{} - load_rotoptimize_state(); +bool GLGizmoRotate3D::on_mouse(const wxMouseEvent &mouse_event) +{ + if (mouse_event.Dragging() && m_dragging) { + // Apply new temporary rotations + TransformationType transformation_type( + TransformationType::World_Relative_Joint); + if (mouse_event.AltDown()) transformation_type.set_independent(); + m_parent.get_selection().rotate(get_rotation(), transformation_type); + } + return use_grabbers(mouse_event); +} + +void GLGizmoRotate3D::data_changed() { + const Selection &selection = m_parent.get_selection(); + bool is_wipe_tower = selection.is_wipe_tower(); + if (is_wipe_tower) { + DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + float wipe_tower_rotation_angle = + dynamic_cast( + config.option("wipe_tower_rotation_angle")) + ->value; + set_rotation(Vec3d(0., 0., (M_PI / 180.) * wipe_tower_rotation_angle)); + m_gizmos[0].disable_grabber(); + m_gizmos[1].disable_grabber(); + } else { + set_rotation(Vec3d::Zero()); + m_gizmos[0].enable_grabber(); + m_gizmos[1].enable_grabber(); + } } bool GLGizmoRotate3D::on_init() { - for (GLGizmoRotate& g : m_gizmos) { - if (!g.init()) - return false; - } + for (GLGizmoRotate& g : m_gizmos) + if (!g.init()) return false; - for (unsigned int i = 0; i < 3; ++i) { + for (unsigned int i = 0; i < 3; ++i) m_gizmos[i].set_highlight_color(AXES_COLOR[i]); - } m_shortcut_key = WXK_CONTROL_R; @@ -661,14 +805,21 @@ bool GLGizmoRotate3D::on_is_activable() const void GLGizmoRotate3D::on_start_dragging() { - if (0 <= m_hover_id && m_hover_id < 3) - m_gizmos[m_hover_id].start_dragging(); + assert(0 <= m_hover_id && m_hover_id < 3); + m_gizmos[m_hover_id].start_dragging(); } void GLGizmoRotate3D::on_stop_dragging() { - if (0 <= m_hover_id && m_hover_id < 3) - m_gizmos[m_hover_id].stop_dragging(); + assert(0 <= m_hover_id && m_hover_id < 3); + m_parent.do_rotate(L("Gizmo-Rotate")); + m_gizmos[m_hover_id].stop_dragging(); +} + +void GLGizmoRotate3D::on_dragging(const UpdateData &data) +{ + assert(0 <= m_hover_id && m_hover_id < 3); + m_gizmos[m_hover_id].dragging(data); } void GLGizmoRotate3D::on_render() diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp index bb33e0f73..b58fde1ee 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp @@ -5,7 +5,7 @@ namespace Slic3r { namespace GUI { - +class Selection; class GLGizmoRotate : public GLGizmoBase { static const float Offset; @@ -20,9 +20,9 @@ class GLGizmoRotate : public GLGizmoBase public: enum Axis : unsigned char { - X, - Y, - Z + X=0, + Y=1, + Z=2 }; private: @@ -36,7 +36,7 @@ private: float m_snap_fine_out_radius{ 0.0f }; GLModel m_cone; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLModel m_circle; GLModel m_scale; GLModel m_snap_radii; @@ -50,8 +50,11 @@ private: GrabberConnection m_grabber_connection; float m_old_radius{ 0.0f }; float m_old_hover_radius{ 0.0f }; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL + float m_old_angle{ 0.0f }; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + ColorRGBA m_drag_color; + ColorRGBA m_highlight_color; public: GLGizmoRotate(GLCanvas3D& parent, Axis axis); virtual ~GLGizmoRotate() = default; @@ -61,16 +64,32 @@ public: std::string get_tooltip() const override; + void start_dragging(); + void stop_dragging(); + + void enable_grabber(); + void disable_grabber(); + + void set_highlight_color(const ColorRGBA &color); + + /// + /// Postpone to Grabber for move + /// Detect move of object by dragging + /// + /// Keep information about mouse click + /// Return True when use the information otherwise False. + bool on_mouse(const wxMouseEvent &mouse_event) override; + void dragging(const UpdateData &data); protected: bool on_init() override; std::string on_get_name() const override { return ""; } void on_start_dragging() override; - void on_update(const UpdateData& data) override; + void on_dragging(const UpdateData &data) override; void on_render() override; void on_render_for_picking() override; private: -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void render_circle(const ColorRGBA& color, bool radius_changed); void render_scale(const ColorRGBA& color, bool radius_changed); void render_snap_radii(const ColorRGBA& color, bool radius_changed); @@ -83,11 +102,16 @@ private: void render_snap_radii() const; void render_reference_radius() const; void render_angle() const; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL void render_grabber(const BoundingBoxf3& box); void render_grabber_extension(const BoundingBoxf3& box, bool picking); +#if ENABLE_GL_SHADERS_ATTRIBUTES + Transform3d local_transform(const Selection& selection) const; +#else void transform_to_local(const Selection& selection) const; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + // returns the intersection of the mouse ray with the plane perpendicular to the gizmo axis, in local coordinate Vec3d mouse_position_in_local_plane(const Linef3& mouse_ray, const Selection& selection) const; }; @@ -111,6 +135,14 @@ public: return tooltip; } + /// + /// Postpone to Rotation + /// + /// Keep information about mouse click + /// Return True when use the information otherwise False. + bool on_mouse(const wxMouseEvent &mouse_event) override; + + void data_changed() override; protected: bool on_init() override; std::string on_get_name() const override; @@ -124,20 +156,17 @@ protected: } void on_enable_grabber(unsigned int id) override { if (id < 3) - m_gizmos[id].enable_grabber(0); + m_gizmos[id].enable_grabber(); } void on_disable_grabber(unsigned int id) override { if (id < 3) - m_gizmos[id].disable_grabber(0); + m_gizmos[id].disable_grabber(); } bool on_is_activable() const override; void on_start_dragging() override; void on_stop_dragging() override; - void on_update(const UpdateData& data) override { - for (GLGizmoRotate& g : m_gizmos) { - g.update(data); - } - } + void on_dragging(const UpdateData &data) override; + void on_render() override; void on_render_for_picking() override { for (GLGizmoRotate& g : m_gizmos) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp index 7d0e3ec34..26c9251b4 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp @@ -2,6 +2,9 @@ #include "GLGizmoScale.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#if ENABLE_GL_SHADERS_ATTRIBUTES +#include "slic3r/GUI/Plater.hpp" +#endif // ENABLE_GL_SHADERS_ATTRIBUTES #include @@ -14,9 +17,15 @@ namespace GUI { const float GLGizmoScale3D::Offset = 5.0f; GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) -: GLGizmoBase(parent, icon_filename, sprite_id) + : GLGizmoBase(parent, icon_filename, sprite_id) + , m_scale(Vec3d::Ones()) + , m_offset(Vec3d::Zero()) + , m_snap_step(0.05) + , m_base_color(DEFAULT_BASE_COLOR) + , m_drag_color(DEFAULT_DRAG_COLOR) + , m_highlight_color(DEFAULT_HIGHLIGHT_COLOR) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_grabber_connections[0].grabber_indices = { 0, 1 }; m_grabber_connections[1].grabber_indices = { 2, 3 }; m_grabber_connections[2].grabber_indices = { 4, 5 }; @@ -24,7 +33,7 @@ GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent, const std::string& icon_filen m_grabber_connections[4].grabber_indices = { 7, 8 }; m_grabber_connections[5].grabber_indices = { 8, 9 }; m_grabber_connections[6].grabber_indices = { 9, 6 }; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } std::string GLGizmoScale3D::get_tooltip() const @@ -58,6 +67,46 @@ std::string GLGizmoScale3D::get_tooltip() const return ""; } +bool GLGizmoScale3D::on_mouse(const wxMouseEvent &mouse_event) +{ + if (mouse_event.Dragging()) { + if (m_dragging) { + // Apply new temporary scale factors + TransformationType transformation_type(TransformationType::Local_Absolute_Joint); + if (mouse_event.AltDown()) transformation_type.set_independent(); + + Selection &selection = m_parent.get_selection(); + selection.scale(get_scale(), transformation_type); + if (mouse_event.CmdDown()) selection.translate(m_offset, true); + } + } + return use_grabbers(mouse_event); +} + +void GLGizmoScale3D::data_changed() +{ + const Selection &selection = m_parent.get_selection(); + bool enable_scale_xyz = selection.is_single_full_instance() || + selection.is_single_volume() || + selection.is_single_modifier(); + for (unsigned int i = 0; i < 6; ++i) + m_grabbers[i].enabled = enable_scale_xyz; + + if (enable_scale_xyz) { + // all volumes in the selection belongs to the same instance, any of + // them contains the needed data, so we take the first + const GLVolume *volume = selection.get_volume(*selection.get_volume_idxs().begin()); + if (selection.is_single_full_instance()) { + set_scale(volume->get_instance_scaling_factor()); + } else if (selection.is_single_volume() || + selection.is_single_modifier()) { + set_scale(volume->get_volume_scaling_factor()); + } + } else { + set_scale(Vec3d::Ones()); + } +} + bool GLGizmoScale3D::on_init() { for (int i = 0; i < 10; ++i) { @@ -92,22 +141,25 @@ bool GLGizmoScale3D::on_is_activable() const void GLGizmoScale3D::on_start_dragging() { - if (m_hover_id != -1) { - m_starting.drag_position = m_grabbers[m_hover_id].center; - m_starting.ctrl_down = wxGetKeyState(WXK_CONTROL); - m_starting.box = (m_starting.ctrl_down && (m_hover_id < 6)) ? m_box : m_parent.get_selection().get_bounding_box(); + assert(m_hover_id != -1); + m_starting.drag_position = m_grabbers[m_hover_id].center; + m_starting.ctrl_down = wxGetKeyState(WXK_CONTROL); + m_starting.box = (m_starting.ctrl_down && (m_hover_id < 6)) ? m_box : m_parent.get_selection().get_bounding_box(); - const Vec3d& center = m_starting.box.center(); - m_starting.pivots[0] = m_transform * Vec3d(m_starting.box.max.x(), center.y(), center.z()); - m_starting.pivots[1] = m_transform * Vec3d(m_starting.box.min.x(), center.y(), center.z()); - m_starting.pivots[2] = m_transform * Vec3d(center.x(), m_starting.box.max.y(), center.z()); - m_starting.pivots[3] = m_transform * Vec3d(center.x(), m_starting.box.min.y(), center.z()); - m_starting.pivots[4] = m_transform * Vec3d(center.x(), center.y(), m_starting.box.max.z()); - m_starting.pivots[5] = m_transform * Vec3d(center.x(), center.y(), m_starting.box.min.z()); - } + const Vec3d& center = m_starting.box.center(); + m_starting.pivots[0] = m_transform * Vec3d(m_starting.box.max.x(), center.y(), center.z()); + m_starting.pivots[1] = m_transform * Vec3d(m_starting.box.min.x(), center.y(), center.z()); + m_starting.pivots[2] = m_transform * Vec3d(center.x(), m_starting.box.max.y(), center.z()); + m_starting.pivots[3] = m_transform * Vec3d(center.x(), m_starting.box.min.y(), center.z()); + m_starting.pivots[4] = m_transform * Vec3d(center.x(), center.y(), m_starting.box.max.z()); + m_starting.pivots[5] = m_transform * Vec3d(center.x(), center.y(), m_starting.box.min.z()); } -void GLGizmoScale3D::on_update(const UpdateData& data) +void GLGizmoScale3D::on_stop_dragging() { + m_parent.do_scale(L("Gizmo-Scale")); +} + +void GLGizmoScale3D::on_dragging(const UpdateData& data) { if (m_hover_id == 0 || m_hover_id == 1) do_scale_along_axis(X, data); @@ -166,11 +218,11 @@ void GLGizmoScale3D::on_render() m_box = selection.get_bounding_box(); const Vec3d& center = m_box.center(); - Vec3d offset_x = offsets_transform * Vec3d((double)Offset, 0.0, 0.0); - Vec3d offset_y = offsets_transform * Vec3d(0.0, (double)Offset, 0.0); - Vec3d offset_z = offsets_transform * Vec3d(0.0, 0.0, (double)Offset); + const Vec3d offset_x = offsets_transform * Vec3d((double)Offset, 0.0, 0.0); + const Vec3d offset_y = offsets_transform * Vec3d(0.0, (double)Offset, 0.0); + const Vec3d offset_z = offsets_transform * Vec3d(0.0, 0.0, (double)Offset); - bool ctrl_down = (m_dragging && m_starting.ctrl_down) || (!m_dragging && wxGetKeyState(WXK_CONTROL)); + const bool ctrl_down = (m_dragging && m_starting.ctrl_down) || (!m_dragging && wxGetKeyState(WXK_CONTROL)); // x axis m_grabbers[0].center = m_transform * Vec3d(m_box.min.x(), center.y(), center.z()) - offset_x; @@ -208,14 +260,19 @@ void GLGizmoScale3D::on_render() const BoundingBoxf3& selection_box = selection.get_bounding_box(); - float grabber_mean_size = (float)((selection_box.size().x() + selection_box.size().y() + selection_box.size().z()) / 3.0); + const float grabber_mean_size = (float)((selection_box.size().x() + selection_box.size().y() + selection_box.size().z()) / 3.0); if (m_hover_id == -1) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // draw connections GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (m_grabbers[0].enabled && m_grabbers[1].enabled) render_grabbers_connection(0, 1, m_grabbers[0].color); if (m_grabbers[2].enabled && m_grabbers[3].enabled) @@ -247,17 +304,22 @@ void GLGizmoScale3D::on_render() render_grabbers_connection(7, 8); render_grabbers_connection(8, 9); render_grabbers_connection(9, 6); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL // draw grabbers render_grabbers(grabber_mean_size); } else if (m_hover_id == 0 || m_hover_id == 1) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // draw connections GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES render_grabbers_connection(0, 1, m_grabbers[0].color); shader->stop_using(); } @@ -271,7 +333,7 @@ void GLGizmoScale3D::on_render() // draw grabbers GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (shader != nullptr) { shader->start_using(); shader->set_uniform("emission_factor", 0.1f); @@ -281,11 +343,16 @@ void GLGizmoScale3D::on_render() } } else if (m_hover_id == 2 || m_hover_id == 3) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // draw connections GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES render_grabbers_connection(2, 3, m_grabbers[2].color); shader->stop_using(); } @@ -299,7 +366,7 @@ void GLGizmoScale3D::on_render() // draw grabbers GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (shader != nullptr) { shader->start_using(); shader->set_uniform("emission_factor", 0.1f); @@ -309,11 +376,16 @@ void GLGizmoScale3D::on_render() } } else if (m_hover_id == 4 || m_hover_id == 5) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // draw connections GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES render_grabbers_connection(4, 5, m_grabbers[4].color); shader->stop_using(); } @@ -327,7 +399,7 @@ void GLGizmoScale3D::on_render() // draw grabbers GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (shader != nullptr) { shader->start_using(); shader->set_uniform("emission_factor", 0.1f); @@ -337,11 +409,16 @@ void GLGizmoScale3D::on_render() } } else if (m_hover_id >= 6) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // draw connections GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader != nullptr) { shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES render_grabbers_connection(6, 7, m_drag_color); render_grabbers_connection(7, 8, m_drag_color); render_grabbers_connection(8, 9, m_drag_color); @@ -361,7 +438,7 @@ void GLGizmoScale3D::on_render() // draw grabbers GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL if (shader != nullptr) { shader->start_using(); shader->set_uniform("emission_factor", 0.1f); @@ -379,7 +456,7 @@ void GLGizmoScale3D::on_render_for_picking() render_grabbers_for_picking(m_parent.get_selection().get_bounding_box()); } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void GLGizmoScale3D::render_grabbers_connection(unsigned int id_1, unsigned int id_2, const ColorRGBA& color) { auto grabber_connection = [this](unsigned int id_1, unsigned int id_2) { @@ -402,16 +479,16 @@ void GLGizmoScale3D::render_grabbers_connection(unsigned int id_1, unsigned int m_grabber_connections[id].model.reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(2 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(2 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(2); + init_data.reserve_indices(2); // vertices init_data.add_vertex((Vec3f)m_grabbers[id_1].center.cast()); init_data.add_vertex((Vec3f)m_grabbers[id_2].center.cast()); // indices - init_data.add_ushort_line(0, 1); + init_data.add_line(0, 1); m_grabber_connections[id].model.init_from(std::move(init_data)); } @@ -430,7 +507,7 @@ void GLGizmoScale3D::render_grabbers_connection(unsigned int id_1, unsigned int glsafe(::glEnd()); } } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL void GLGizmoScale3D::do_scale_along_axis(Axis axis, const UpdateData& data) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp index 79388abba..f4efe052a 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp @@ -33,7 +33,7 @@ class GLGizmoScale3D : public GLGizmoBase double m_snap_step{ 0.05 }; StartingData m_starting; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL struct GrabberConnection { GLModel model; @@ -42,8 +42,11 @@ class GLGizmoScale3D : public GLGizmoBase Vec3d old_v2{ Vec3d::Zero() }; }; std::array m_grabber_connections; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + ColorRGBA m_base_color; + ColorRGBA m_drag_color; + ColorRGBA m_highlight_color; public: GLGizmoScale3D(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); @@ -53,25 +56,32 @@ public: const Vec3d& get_scale() const { return m_scale; } void set_scale(const Vec3d& scale) { m_starting.scale = scale; m_scale = scale; } - const Vec3d& get_offset() const { return m_offset; } - std::string get_tooltip() const override; + /// + /// Postpone to Grabber for scale + /// + /// Keep information about mouse click + /// Return True when use the information otherwise False. + bool on_mouse(const wxMouseEvent &mouse_event) override; + + void data_changed() override; protected: virtual bool on_init() override; virtual std::string on_get_name() const override; virtual bool on_is_activable() const override; virtual void on_start_dragging() override; - virtual void on_update(const UpdateData& data) override; + virtual void on_stop_dragging() override; + virtual void on_dragging(const UpdateData& data) override; virtual void on_render() override; virtual void on_render_for_picking() override; private: -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void render_grabbers_connection(unsigned int id_1, unsigned int id_2, const ColorRGBA& color); #else void render_grabbers_connection(unsigned int id_1, unsigned int id_2) const; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL void do_scale_along_axis(Axis axis, const UpdateData& data); void do_scale_uniform(const UpdateData& data); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp index 1b4c751d4..bce1123e0 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp @@ -651,7 +651,7 @@ void GLGizmoSimplify::init_model() } assert(volume != nullptr); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL // set actual triangle count m_triangle_count += volume->mesh().its.indices.size(); #else @@ -659,17 +659,17 @@ void GLGizmoSimplify::init_model() // set actual triangle count m_triangle_count += its.indices.size(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL assert(m_glmodels.find(id) == m_glmodels.end()); GLModel &glmodel = m_glmodels[id]; // create new glmodel -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL glmodel.init_from(volume->mesh()); glmodel.set_color(selected_volume->color); #else glmodel.init_from(its); glmodel.set_color(-1,selected_volume->color); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_parent.toggle_model_objects_visibility(false, info->model_object(), info->get_active_instance(), @@ -698,11 +698,11 @@ void GLGizmoSimplify::update_model(const State::Data &data) // when not reset it keeps old shape glmodel.reset(); glmodel.init_from(its); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL glmodel.set_color(color); #else glmodel.set_color(-1, color); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_triangle_count += its.indices.size(); } @@ -737,27 +737,46 @@ void GLGizmoSimplify::on_render() GLModel &glmodel = it->second; const Transform3d trafo_matrix = selected_volume->world_matrix(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushMatrix()); glsafe(::glMultMatrixd(trafo_matrix.data())); - - auto *gouraud_shader = wxGetApp().get_shader("gouraud_light"); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES + auto* gouraud_shader = wxGetApp().get_shader("gouraud_light"); glsafe(::glPushAttrib(GL_DEPTH_TEST)); glsafe(::glEnable(GL_DEPTH_TEST)); gouraud_shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d view_model_matrix = camera.get_view_matrix() * trafo_matrix; + gouraud_shader->set_uniform("view_model_matrix", view_model_matrix); + gouraud_shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + gouraud_shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES glmodel.render(); gouraud_shader->stop_using(); if (m_show_wireframe) { auto *contour_shader = wxGetApp().get_shader("mm_contour"); contour_shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + contour_shader->set_uniform("view_model_matrix", view_model_matrix); + contour_shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + const ColorRGBA color = glmodel.get_color(); + glmodel.set_color(ColorRGBA::WHITE()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glLineWidth(1.0f)); glsafe(::glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)); glmodel.render(); glsafe(::glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + glmodel.set_color(color); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES contour_shader->stop_using(); } glsafe(::glPopAttrib()); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index 3406c58a2..7c61673b4 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -28,9 +28,7 @@ namespace GUI { GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) : GLGizmoBase(parent, icon_filename, sprite_id) -{ -} - +{} bool GLGizmoSlaSupports::on_init() { @@ -48,11 +46,15 @@ bool GLGizmoSlaSupports::on_init() m_desc["manual_editing"] = _L("Manual editing"); m_desc["clipping_of_view"] = _L("Clipping of view")+ ": "; m_desc["reset_direction"] = _L("Reset direction"); + + m_cone.init_from(its_make_cone(1., 1., 2 * PI / 24)); + m_cylinder.init_from(its_make_cylinder(1., 1., 2 * PI / 24.)); + m_sphere.init_from(its_make_sphere(1., (2 * M_PI) / 24.)); return true; } -void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const Selection& selection) +void GLGizmoSlaSupports::data_changed() { if (! m_c->selection_info()) return; @@ -118,15 +120,23 @@ void GLGizmoSlaSupports::on_render_for_picking() void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) { - size_t cache_size = m_editing_mode ? m_editing_cache.size() : m_normal_cache.size(); + const size_t cache_size = m_editing_mode ? m_editing_cache.size() : m_normal_cache.size(); - bool has_points = (cache_size != 0); - bool has_holes = (! m_c->hollowed_mesh()->get_hollowed_mesh() + const bool has_points = (cache_size != 0); + const bool has_holes = (! m_c->hollowed_mesh()->get_hollowed_mesh() && ! m_c->selection_info()->model_object()->sla_drain_holes.empty()); if (! has_points && ! has_holes) return; +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLShaderProgram* shader = wxGetApp().get_shader(picking ? "flat" : "gouraud_light"); + if (shader == nullptr) + return; + + shader->start_using(); + ScopeGuard guard([shader]() { shader->stop_using(); }); +#else GLShaderProgram* shader = picking ? nullptr : wxGetApp().get_shader("gouraud_light"); if (shader != nullptr) shader->start_using(); @@ -134,20 +144,30 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) if (shader != nullptr) shader->stop_using(); }); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL const GLVolume* vol = selection.get_volume(*selection.get_volume_idxs().begin()); - const Transform3d& instance_scaling_matrix_inverse = vol->get_instance_transformation().get_matrix(true, true, false, true).inverse(); - const Transform3d& instance_matrix = vol->get_instance_transformation().get_matrix(); - float z_shift = m_c->selection_info()->get_sla_shift(); + Geometry::Transformation transformation(vol->get_instance_transformation().get_matrix() * vol->get_volume_transformation().get_matrix()); + const Transform3d& instance_scaling_matrix_inverse = transformation.get_matrix(true, true, false, true).inverse(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d instance_matrix = Geometry::assemble_transform(m_c->selection_info()->get_sla_shift() * Vec3d::UnitZ()) * transformation.get_matrix(); + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d& view_matrix = camera.get_view_matrix(); + const Transform3d& projection_matrix = camera.get_projection_matrix(); + shader->set_uniform("projection_matrix", projection_matrix); +#else + const Transform3d& instance_matrix = transformation.get_matrix(); + const float z_shift = m_c->selection_info()->get_sla_shift(); glsafe(::glPushMatrix()); glsafe(::glTranslated(0.0, 0.0, z_shift)); glsafe(::glMultMatrixd(instance_matrix.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES ColorRGBA render_color; for (size_t i = 0; i < cache_size; ++i) { const sla::SupportPoint& support_point = m_editing_mode ? m_editing_cache[i].support_point : m_normal_cache[i]; - const bool& point_selected = m_editing_mode ? m_editing_cache[i].selected : false; + const bool point_selected = m_editing_mode ? m_editing_cache[i].selected : false; if (is_mesh_point_clipped(support_point.pos.cast())) continue; @@ -174,20 +194,25 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) } } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_cone.set_color(render_color); m_sphere.set_color(render_color); + if (!picking) #else m_cone.set_color(-1, render_color); m_sphere.set_color(-1, render_color); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL if (shader && !picking) +#endif // ENABLE_LEGACY_OPENGL_REMOVAL shader->set_uniform("emission_factor", 0.5f); // Inverse matrix of the instance scaling is applied so that the mark does not scale with the object. +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d support_matrix = Geometry::assemble_transform(support_point.pos.cast()) * instance_scaling_matrix_inverse; +#else glsafe(::glPushMatrix()); - glsafe(::glTranslatef(support_point.pos(0), support_point.pos(1), support_point.pos(2))); + glsafe(::glTranslatef(support_point.pos.x(), support_point.pos.y(), support_point.pos.z())); glsafe(::glMultMatrixd(instance_scaling_matrix_inverse.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (vol->is_left_handed()) glFrontFace(GL_CW); @@ -200,76 +225,108 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) m_c->raycaster()->raycaster()->get_closest_point(m_editing_cache[i].support_point.pos, &m_editing_cache[i].normal); Eigen::Quaterniond q; - q.setFromTwoVectors(Vec3d{0., 0., 1.}, instance_scaling_matrix_inverse * m_editing_cache[i].normal.cast()); - Eigen::AngleAxisd aa(q); - glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis()(0), aa.axis()(1), aa.axis()(2))); - + q.setFromTwoVectors(Vec3d::UnitZ(), instance_scaling_matrix_inverse * m_editing_cache[i].normal.cast()); + const Eigen::AngleAxisd aa(q); const double cone_radius = 0.25; // mm const double cone_height = 0.75; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d view_model_matrix = view_matrix * instance_matrix * support_matrix * Transform3d(aa.toRotationMatrix()) * + Geometry::assemble_transform((cone_height + support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ(), + Vec3d(PI, 0.0, 0.0), Vec3d(cone_radius, cone_radius, cone_height)); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glPushMatrix()); + glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis().x(), aa.axis().y(), aa.axis().z())); glsafe(::glTranslatef(0.f, 0.f, cone_height + support_point.head_front_radius * RenderPointScale)); - glsafe(::glPushMatrix()); glsafe(::glRotated(180., 1., 0., 0.)); glsafe(::glScaled(cone_radius, cone_radius, cone_height)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_cone.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); - glsafe(::glTranslatef(0.f, 0.f, cone_height)); - glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } + const double radius = (double)support_point.head_front_radius * RenderPointScale; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d view_model_matrix = view_matrix * instance_matrix * support_matrix * + Geometry::assemble_transform(Vec3d::Zero(), Vec3d::Zero(), radius * Vec3d::Ones()); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glPushMatrix()); - double radius = (double)support_point.head_front_radius * RenderPointScale; glsafe(::glScaled(radius, radius, radius)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_sphere.render(); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES if (vol->is_left_handed()) glFrontFace(GL_CCW); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } // Now render the drain holes: if (has_holes && ! picking) { render_color = { 0.7f, 0.7f, 0.7f, 0.7f }; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL m_cylinder.set_color(render_color); #else m_cylinder.set_color(-1, render_color); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL - if (shader) - shader->set_uniform("emission_factor", 0.5f); + if (shader != nullptr) +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + shader->set_uniform("emission_factor", 0.5f); for (const sla::DrainHole& drain_hole : m_c->selection_info()->model_object()->sla_drain_holes) { if (is_mesh_point_clipped(drain_hole.pos.cast())) continue; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d hole_matrix = Geometry::assemble_transform(drain_hole.pos.cast()) * instance_scaling_matrix_inverse; +#else // Inverse matrix of the instance scaling is applied so that the mark does not scale with the object. glsafe(::glPushMatrix()); - glsafe(::glTranslatef(drain_hole.pos(0), drain_hole.pos(1), drain_hole.pos(2))); + glsafe(::glTranslatef(drain_hole.pos.x(), drain_hole.pos.y(), drain_hole.pos.z())); glsafe(::glMultMatrixd(instance_scaling_matrix_inverse.data())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (vol->is_left_handed()) glFrontFace(GL_CW); // Matrices set, we can render the point mark now. - Eigen::Quaterniond q; - q.setFromTwoVectors(Vec3d{0., 0., 1.}, instance_scaling_matrix_inverse * (-drain_hole.normal).cast()); - Eigen::AngleAxisd aa(q); - glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis()(0), aa.axis()(1), aa.axis()(2))); - glsafe(::glPushMatrix()); + q.setFromTwoVectors(Vec3d::UnitZ(), instance_scaling_matrix_inverse * (-drain_hole.normal).cast()); + const Eigen::AngleAxisd aa(q); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d view_model_matrix = view_matrix * instance_matrix * hole_matrix * Transform3d(aa.toRotationMatrix()) * + Geometry::assemble_transform(-drain_hole.height * Vec3d::UnitZ(), Vec3d::Zero(), Vec3d(drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength)); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else + glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis().x(), aa.axis().y(), aa.axis().z())); glsafe(::glTranslated(0., 0., -drain_hole.height)); glsafe(::glScaled(drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_cylinder.render(); - glsafe(::glPopMatrix()); if (vol->is_left_handed()) glFrontFace(GL_CCW); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } } +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } @@ -282,7 +339,7 @@ bool GLGizmoSlaSupports::is_mesh_point_clipped(const Vec3d& point) const auto sel_info = m_c->selection_info(); int active_inst = m_c->selection_info()->get_active_instance(); const ModelInstance* mi = sel_info->model_object()->instances[active_inst]; - const Transform3d& trafo = mi->get_transformation().get_matrix(); + const Transform3d& trafo = mi->get_transformation().get_matrix() * sel_info->model_object()->volumes.front()->get_matrix(); Vec3d transformed_point = trafo * point; transformed_point(2) += sel_info->get_sla_shift(); @@ -301,7 +358,7 @@ bool GLGizmoSlaSupports::unproject_on_mesh(const Vec2d& mouse_pos, std::pairget_camera(); const Selection& selection = m_parent.get_selection(); const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); - Geometry::Transformation trafo = volume->get_instance_transformation(); + Geometry::Transformation trafo = volume->get_instance_transformation() * volume->get_volume_transformation(); trafo.set_offset(trafo.get_offset() + Vec3d(0., 0., m_c->selection_info()->get_sla_shift())); double clp_dist = m_c->object_clipper()->get_position(); @@ -357,7 +414,7 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous if (action == SLAGizmoEventType::LeftDown && (shift_down || alt_down || control_down)) { if (m_hover_id == -1) { if (shift_down || alt_down) { - m_selection_rectangle.start_dragging(mouse_position, shift_down ? GLSelectionRectangle::Select : GLSelectionRectangle::Deselect); + m_selection_rectangle.start_dragging(mouse_position, shift_down ? GLSelectionRectangle::EState::Select : GLSelectionRectangle::EState::Deselect); } } else { @@ -428,7 +485,7 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous { if (idx >= orig_pts_num) // this is a cone-base, get index of point it belongs to idx -= orig_pts_num; - if (rectangle_status == GLSelectionRectangle::Deselect) + if (rectangle_status == GLSelectionRectangle::EState::Deselect) unselect_point(points_idxs[idx]); else select_point(points_idxs[idx]); @@ -543,22 +600,6 @@ void GLGizmoSlaSupports::delete_selected_points(bool force) select_point(NoPoints); } -void GLGizmoSlaSupports::on_update(const UpdateData& data) -{ - if (! m_editing_mode) - return; - else { - if (m_hover_id != -1 && (! m_editing_cache[m_hover_id].support_point.is_new_island || !m_lock_unique_islands)) { - std::pair pos_and_normal; - if (! unproject_on_mesh(data.mouse_pos.cast(), pos_and_normal)) - return; - m_editing_cache[m_hover_id].support_point.pos = pos_and_normal.first; - m_editing_cache[m_hover_id].support_point.is_new_island = false; - m_editing_cache[m_hover_id].normal = pos_and_normal.second; - } - } -} - std::vector GLGizmoSlaSupports::get_config_options(const std::vector& keys) const { std::vector out; @@ -975,7 +1016,21 @@ void GLGizmoSlaSupports::on_stop_dragging() m_point_before_drag = CacheEntry(); } +void GLGizmoSlaSupports::on_dragging(const UpdateData &data) +{ + assert(m_hover_id != -1); + if (!m_editing_mode) return; + if (m_editing_cache[m_hover_id].support_point.is_new_island && m_lock_unique_islands) + return; + + std::pair pos_and_normal; + if (!unproject_on_mesh(data.mouse_pos.cast(), pos_and_normal)) + return; + m_editing_cache[m_hover_id].support_point.pos = pos_and_normal.first; + m_editing_cache[m_hover_id].support_point.is_new_island = false; + m_editing_cache[m_hover_id].normal = pos_and_normal.second; +} void GLGizmoSlaSupports::on_load(cereal::BinaryInputArchive& ar) { @@ -1112,6 +1167,61 @@ void GLGizmoSlaSupports::reslice_SLA_supports(bool postpone_error_messages) cons }); } +bool GLGizmoSlaSupports::on_mouse(const wxMouseEvent &mouse_event){ + if (mouse_event.Moving()) return false; + if (use_grabbers(mouse_event)) return true; + + // wxCoord == int --> wx/types.h + Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); + Vec2d mouse_pos = mouse_coord.cast(); + + static bool pending_right_up = false; + if (mouse_event.LeftDown()) { + bool grabber_contains_mouse = (get_hover_id() != -1); + bool control_down = mouse_event.CmdDown(); + if ((!control_down || grabber_contains_mouse) && + gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), false)) + return true; + } else if (mouse_event.Dragging()) { + bool control_down = mouse_event.CmdDown(); + if (m_parent.get_move_volume_id() != -1) { + // don't allow dragging objects with the Sla gizmo on + return true; + } else if (!control_down && + gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), false)) { + // the gizmo got the event and took some action, no need to do + // anything more here + m_parent.set_as_dirty(); + return true; + } else if (control_down && (mouse_event.LeftIsDown() || mouse_event.RightIsDown())){ + // CTRL has been pressed while already dragging -> stop current action + if (mouse_event.LeftIsDown()) + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), true); + else if (mouse_event.RightIsDown()) + pending_right_up = false; + } + } else if (mouse_event.LeftUp() && !m_parent.is_mouse_dragging()) { + // in case SLA/FDM gizmo is selected, we just pass the LeftUp event + // and stop processing - neither object moving or selecting is + // suppressed in that case + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), mouse_event.CmdDown()); + return true; + }else if (mouse_event.RightDown()){ + if (m_parent.get_selection().get_object_idx() != -1 && + gizmo_event(SLAGizmoEventType::RightDown, mouse_pos, false, false, false)) { + // we need to set the following right up as processed to avoid showing + // the context menu if the user release the mouse over the object + pending_right_up = true; + // event was taken care of by the SlaSupports gizmo + return true; + } + } else if (pending_right_up && mouse_event.RightUp()) { + pending_right_up = false; + return true; + } + return false; +} + void GLGizmoSlaSupports::get_data_from_backend() { if (! has_backend_supports()) @@ -1123,7 +1233,7 @@ void GLGizmoSlaSupports::get_data_from_backend() if (po->model_object()->id() == mo->id()) { m_normal_cache.clear(); const std::vector& points = po->get_support_points(); - auto mat = po->trafo().inverse().cast(); + auto mat = (po->trafo() * po->model_object()->volumes.front()->get_transformation().get_matrix()).inverse().cast(); for (unsigned int i=0; i + /// Process mouse event + /// + /// Keep information about mouse click + /// Return True when use the information otherwise False. + bool on_mouse(const wxMouseEvent &mouse_event) override; private: bool on_init() override; - void on_update(const UpdateData& data) override; void on_render() override; void on_render_for_picking() override; @@ -107,7 +112,6 @@ private: std::vector get_config_options(const std::vector& keys) const; bool is_mesh_point_clipped(const Vec3d& point) const; - bool is_point_in_hole(const Vec3f& pt) const; //void find_intersecting_facets(const igl::AABB* aabb, const Vec3f& normal, double offset, std::vector& out) const; // Methods that do the model_object and editing cache synchronization, @@ -130,13 +134,13 @@ private: protected: void on_set_state() override; void on_set_hover_id() override - { if (! m_editing_mode || (int)m_editing_cache.size() <= m_hover_id) m_hover_id = -1; } void on_start_dragging() override; void on_stop_dragging() override; + void on_dragging(const UpdateData &data) override; void on_render_input_window(float x, float y, float bottom_limit) override; std::string on_get_name() const override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp index cc53f267c..f1156f937 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp @@ -209,21 +209,32 @@ void InstancesHider::render_cut() const ClippingPlane clp = *get_pool()->object_clipper()->get_clipping_plane(); clp.set_normal(-clp.get_normal()); clipper->set_limiting_plane(clp); - } else + } + else clipper->set_limiting_plane(ClippingPlane::ClipsNothing()); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES +#if !ENABLE_LEGACY_OPENGL_REMOVAL if (mv->is_model_part()) glsafe(::glColor3f(0.8f, 0.3f, 0.0f)); else { const ColorRGBA color = color_from_model_volume(*mv); glsafe(::glColor4fv(color.data())); } +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glPushAttrib(GL_DEPTH_TEST)); glsafe(::glDisable(GL_DEPTH_TEST)); +#if ENABLE_LEGACY_OPENGL_REMOVAL + clipper->render_cut(mv->is_model_part() ? ColorRGBA(0.8f, 0.3f, 0.0f, 1.0f) : color_from_model_volume(*mv)); +#else clipper->render_cut(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glPopAttrib()); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES ++clipper_id; } @@ -240,7 +251,7 @@ void HollowedMesh::on_update() const GLCanvas3D* canvas = get_pool()->get_canvas(); const PrintObjects& print_objects = canvas->sla_print()->objects(); - const SLAPrintObject* print_object = m_print_object_idx != -1 + const SLAPrintObject* print_object = (m_print_object_idx >= 0 && m_print_object_idx < int(print_objects.size())) ? print_objects[m_print_object_idx] : nullptr; @@ -265,7 +276,7 @@ void HollowedMesh::on_update() const TriangleMesh& backend_mesh = print_object->get_mesh_to_slice(); if (! backend_mesh.empty()) { m_hollowed_mesh_transformed.reset(new TriangleMesh(backend_mesh)); - Transform3d trafo_inv = canvas->sla_print()->sla_trafo(*mo).inverse(); + Transform3d trafo_inv = (canvas->sla_print()->sla_trafo(*mo) * print_object->model_object()->volumes.front()->get_transformation().get_matrix()).inverse(); m_hollowed_mesh_transformed->transform(trafo_inv); m_drainholes = print_object->model_object()->sla_drain_holes; m_old_hollowing_timestamp = timestamp; @@ -404,11 +415,11 @@ void ObjectClipper::render_cut() const return; const SelectionInfo* sel_info = get_pool()->selection_info(); const ModelObject* mo = sel_info->model_object(); - Geometry::Transformation inst_trafo = mo->instances[sel_info->get_active_instance()]->get_transformation(); + const Geometry::Transformation inst_trafo = mo->instances[sel_info->get_active_instance()]->get_transformation(); size_t clipper_id = 0; for (const ModelVolume* mv : mo->volumes) { - Geometry::Transformation vol_trafo = mv->get_transformation(); + const Geometry::Transformation vol_trafo = mv->get_transformation(); Geometry::Transformation trafo = inst_trafo * vol_trafo; trafo.set_offset(trafo.get_offset() + Vec3d(0., 0., sel_info->get_sla_shift())); @@ -416,10 +427,18 @@ void ObjectClipper::render_cut() const clipper->set_plane(*m_clp); clipper->set_transformation(trafo); clipper->set_limiting_plane(ClippingPlane(Vec3d::UnitZ(), -SINKING_Z_THRESHOLD)); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_LEGACY_OPENGL_REMOVAL + clipper->render_cut({ 1.0f, 0.37f, 0.0f, 1.0f }); +#else glsafe(::glColor3f(1.0f, 0.37f, 0.0f)); clipper->render_cut(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES ++clipper_id; } @@ -455,7 +474,7 @@ void SupportsClipper::on_update() const GLCanvas3D* canvas = get_pool()->get_canvas(); const PrintObjects& print_objects = canvas->sla_print()->objects(); - const SLAPrintObject* print_object = m_print_object_idx != -1 + const SLAPrintObject* print_object = (m_print_object_idx >= 0 && m_print_object_idx < int(print_objects.size())) ? print_objects[m_print_object_idx] : nullptr; @@ -510,7 +529,7 @@ void SupportsClipper::render_cut() const const SelectionInfo* sel_info = get_pool()->selection_info(); const ModelObject* mo = sel_info->model_object(); - Geometry::Transformation inst_trafo = mo->instances[sel_info->get_active_instance()]->get_transformation(); + const Geometry::Transformation inst_trafo = mo->instances[sel_info->get_active_instance()]->get_transformation(); //Geometry::Transformation vol_trafo = mo->volumes.front()->get_transformation(); Geometry::Transformation trafo = inst_trafo;// * vol_trafo; trafo.set_offset(trafo.get_offset() + Vec3d(0., 0., sel_info->get_sla_shift())); @@ -529,10 +548,18 @@ void SupportsClipper::render_cut() const m_clipper->set_plane(*ocl->get_clipping_plane()); m_clipper->set_transformation(supports_trafo); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPushMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_clipper->render_cut({ 1.0f, 0.f, 0.37f, 1.0f }); +#else glsafe(::glColor3f(1.0f, 0.f, 0.37f)); m_clipper->render_cut(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 55cbb0c30..21b55ea69 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -38,6 +38,7 @@ GLGizmosManager::GLGizmosManager(GLCanvas3D& parent) , m_enabled(false) , m_icons_texture_dirty(true) , m_current(Undefined) + , m_hover(Undefined) , m_tooltip("") , m_serializing(false) { @@ -46,33 +47,34 @@ GLGizmosManager::GLGizmosManager(GLCanvas3D& parent) std::vector GLGizmosManager::get_selectable_idxs() const { std::vector out; + out.reserve(m_gizmos.size()); for (size_t i=0; iis_selectable()) out.push_back(i); return out; } -size_t GLGizmosManager::get_gizmo_idx_from_mouse(const Vec2d& mouse_pos) const +GLGizmosManager::EType GLGizmosManager::get_gizmo_from_mouse(const Vec2d &mouse_pos) const { - if (! m_enabled) - return Undefined; + if (!m_enabled) return Undefined; - float cnv_h = (float)m_parent.get_canvas_size().get_height(); - float height = get_scaled_total_height(); + float cnv_h = (float) m_parent.get_canvas_size().get_height(); + float height = get_scaled_total_height(); float icons_size = m_layout.scaled_icons_size(); - float border = m_layout.scaled_border(); - float stride_y = m_layout.scaled_stride_y(); - float top_y = 0.5f * (cnv_h - height) + border; + float border = m_layout.scaled_border(); + float stride_y = m_layout.scaled_stride_y(); + float top_y = 0.5f * (cnv_h - height) + border; // is mouse horizontally in the area? - if ((border <= (float)mouse_pos(0) && ((float)mouse_pos(0) <= border + icons_size))) { + if ((border <= (float) mouse_pos(0) && + ((float) mouse_pos(0) <= border + icons_size))) { // which icon is it on? - size_t from_top = (size_t)((float)mouse_pos(1) - top_y) / stride_y; + size_t from_top = (size_t) ((float) mouse_pos(1) - top_y) / stride_y; // is it really on the icon or already past the border? - if ((float)mouse_pos(1) <= top_y + from_top * stride_y + icons_size) { + if ((float) mouse_pos(1) <= top_y + from_top * stride_y + icons_size) { std::vector selectable = get_selectable_idxs(); - if (from_top < selectable.size()) - return selectable[from_top]; + if (from_top < selectable.size()) + return static_cast(selectable[from_top]); } } return Undefined; @@ -122,7 +124,17 @@ bool GLGizmosManager::init() return true; } -bool GLGizmosManager::init_arrow(const BackgroundTexture::Metadata& arrow_texture) +#if ENABLE_GL_SHADERS_ATTRIBUTES +bool GLGizmosManager::init_arrow(const std::string& filename) +{ + if (m_arrow_texture.get_id() != 0) + return true; + + const std::string path = resources_dir() + "/icons/"; + return (!filename.empty()) ? m_arrow_texture.load_from_svg_file(path + filename, false, false, false, 512) : false; +} +#else +bool GLGizmosManager::init_arrow(const BackgroundTexture::Metadata & arrow_texture) { if (m_arrow_texture.texture.get_id() != 0) return true; @@ -137,6 +149,7 @@ bool GLGizmosManager::init_arrow(const BackgroundTexture::Metadata& arrow_textur return res; } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES void GLGizmosManager::set_overlay_icon_size(float size) { @@ -161,9 +174,9 @@ void GLGizmosManager::refresh_on_off_state() if (m_serializing || m_current == Undefined || m_gizmos.empty()) return; - if (m_current != Undefined - && ! m_gizmos[m_current]->is_activable() && activate_gizmo(Undefined)) - update_data(); + // FS: Why update data after Undefined gizmo activation? + if (!m_gizmos[m_current]->is_activable() && activate_gizmo(Undefined)) + update_data(); } void GLGizmosManager::reset_all_states() @@ -177,9 +190,13 @@ void GLGizmosManager::reset_all_states() bool GLGizmosManager::open_gizmo(EType type) { - int idx = int(type); - if (m_gizmos[idx]->is_activable() - && activate_gizmo(m_current == idx ? Undefined : (EType)idx)) { + int idx = static_cast(type); + + // re-open same type cause closing + if (m_current == type) type = Undefined; + + if (m_gizmos[idx]->is_activable() && activate_gizmo(type)) { + // remove update data into gizmo itself update_data(); return true; } @@ -208,87 +225,14 @@ void GLGizmosManager::set_hover_id(int id) m_gizmos[m_current]->set_hover_id(id); } -void GLGizmosManager::enable_grabber(EType type, unsigned int id, bool enable) -{ - if (!m_enabled || type == Undefined || m_gizmos.empty()) - return; - - if (enable) - m_gizmos[type]->enable_grabber(id); - else - m_gizmos[type]->disable_grabber(id); -} - -void GLGizmosManager::update(const Linef3& mouse_ray, const Point& mouse_pos) -{ - if (!m_enabled) - return; - - GLGizmoBase* curr = get_current(); - if (curr != nullptr) - curr->update(GLGizmoBase::UpdateData(mouse_ray, mouse_pos)); -} - void GLGizmosManager::update_data() { - if (!m_enabled) - return; - - const Selection& selection = m_parent.get_selection(); - - bool is_wipe_tower = selection.is_wipe_tower(); - enable_grabber(Move, 2, !is_wipe_tower); - enable_grabber(Rotate, 0, !is_wipe_tower); - enable_grabber(Rotate, 1, !is_wipe_tower); - - bool enable_scale_xyz = selection.is_single_full_instance() || selection.is_single_volume() || selection.is_single_modifier(); - for (unsigned int i = 0; i < 6; ++i) - { - enable_grabber(Scale, i, enable_scale_xyz); - } - + if (!m_enabled) return; if (m_common_gizmos_data) m_common_gizmos_data->update(get_current() ? get_current()->get_requirements() : CommonGizmosDataID(0)); - - if (selection.is_single_full_instance()) - { - // all volumes in the selection belongs to the same instance, any of them contains the needed data, so we take the first - const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); - set_scale(volume->get_instance_scaling_factor()); - set_rotation(Vec3d::Zero()); - ModelObject* model_object = selection.get_model()->objects[selection.get_object_idx()]; - set_flattening_data(model_object); - set_sla_support_data(model_object); - set_painter_gizmo_data(); - } - else if (selection.is_single_volume() || selection.is_single_modifier()) - { - const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); - set_scale(volume->get_volume_scaling_factor()); - set_rotation(Vec3d::Zero()); - set_flattening_data(nullptr); - set_sla_support_data(nullptr); - set_painter_gizmo_data(); - } - else if (is_wipe_tower) - { - DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; - set_scale(Vec3d::Ones()); - set_rotation(Vec3d(0., 0., (M_PI/180.) * dynamic_cast(config.option("wipe_tower_rotation_angle"))->value)); - set_flattening_data(nullptr); - set_sla_support_data(nullptr); - set_painter_gizmo_data(); - } - else - { - set_scale(Vec3d::Ones()); - set_rotation(Vec3d::Zero()); - set_flattening_data(selection.is_from_single_object() ? selection.get_model()->objects[selection.get_object_idx()] : nullptr); - set_sla_support_data(selection.is_from_single_instance() ? selection.get_model()->objects[selection.get_object_idx()] : nullptr); - set_painter_gizmo_data(); - } + if (m_current != Undefined) m_gizmos[m_current]->data_changed(); } bool GLGizmosManager::is_running() const @@ -328,107 +272,6 @@ bool GLGizmosManager::is_dragging() const return m_gizmos[m_current]->is_dragging(); } -void GLGizmosManager::start_dragging() -{ - if (! m_enabled || m_current == Undefined) - return; - m_gizmos[m_current]->start_dragging(); -} - -void GLGizmosManager::stop_dragging() -{ - if (! m_enabled || m_current == Undefined) - return; - - m_gizmos[m_current]->stop_dragging(); -} - -Vec3d GLGizmosManager::get_displacement() const -{ - if (!m_enabled) - return Vec3d::Zero(); - - return dynamic_cast(m_gizmos[Move].get())->get_displacement(); -} - -Vec3d GLGizmosManager::get_scale() const -{ - if (!m_enabled) - return Vec3d::Ones(); - - return dynamic_cast(m_gizmos[Scale].get())->get_scale(); -} - -void GLGizmosManager::set_scale(const Vec3d& scale) -{ - if (!m_enabled || m_gizmos.empty()) - return; - - dynamic_cast(m_gizmos[Scale].get())->set_scale(scale); -} - -Vec3d GLGizmosManager::get_scale_offset() const -{ - if (!m_enabled || m_gizmos.empty()) - return Vec3d::Zero(); - - return dynamic_cast(m_gizmos[Scale].get())->get_offset(); -} - -Vec3d GLGizmosManager::get_rotation() const -{ - if (!m_enabled || m_gizmos.empty()) - return Vec3d::Zero(); - - return dynamic_cast(m_gizmos[Rotate].get())->get_rotation(); -} - -void GLGizmosManager::set_rotation(const Vec3d& rotation) -{ - if (!m_enabled || m_gizmos.empty()) - return; - dynamic_cast(m_gizmos[Rotate].get())->set_rotation(rotation); -} - -Vec3d GLGizmosManager::get_flattening_normal() const -{ - if (!m_enabled || m_gizmos.empty()) - return Vec3d::Zero(); - - return dynamic_cast(m_gizmos[Flatten].get())->get_flattening_normal(); -} - -void GLGizmosManager::set_flattening_data(const ModelObject* model_object) -{ - if (!m_enabled || m_gizmos.empty()) - return; - - dynamic_cast(m_gizmos[Flatten].get())->set_flattening_data(model_object); -} - -void GLGizmosManager::set_sla_support_data(ModelObject* model_object) -{ - if (! m_enabled - || m_gizmos.empty() - || wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA) - return; - - auto* gizmo_hollow = dynamic_cast(m_gizmos[Hollow].get()); - auto* gizmo_supports = dynamic_cast(m_gizmos[SlaSupports].get()); - gizmo_hollow->set_sla_support_data(model_object, m_parent.get_selection()); - gizmo_supports->set_sla_support_data(model_object, m_parent.get_selection()); -} - -void GLGizmosManager::set_painter_gizmo_data() -{ - if (!m_enabled || m_gizmos.empty()) - return; - - dynamic_cast(m_gizmos[FdmSupports].get())->set_painter_gizmo_data(m_parent.get_selection()); - dynamic_cast(m_gizmos[Seam].get())->set_painter_gizmo_data(m_parent.get_selection()); - dynamic_cast(m_gizmos[MmuSegmentation].get())->set_painter_gizmo_data(m_parent.get_selection()); -} - // Returns true if the gizmo used the event to do something, false otherwise. bool GLGizmosManager::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down, bool alt_down, bool control_down) { @@ -497,7 +340,7 @@ void GLGizmosManager::render_current_gizmo_for_picking_pass() const m_gizmos[m_current]->render_for_picking(); } -void GLGizmosManager::render_overlay() const +void GLGizmosManager::render_overlay() { if (!m_enabled) return; @@ -517,7 +360,7 @@ std::string GLGizmosManager::get_tooltip() const return (curr != nullptr) ? curr->get_tooltip() : ""; } -bool GLGizmosManager::on_mouse_wheel(wxMouseEvent& evt) +bool GLGizmosManager::on_mouse_wheel(const wxMouseEvent &evt) { bool processed = false; @@ -530,227 +373,108 @@ bool GLGizmosManager::on_mouse_wheel(wxMouseEvent& evt) return processed; } -bool GLGizmosManager::on_mouse(wxMouseEvent& evt) -{ - // used to set a right up event as processed when needed - static bool pending_right_up = false; - - Point pos(evt.GetX(), evt.GetY()); - Vec2d mouse_pos((double)evt.GetX(), (double)evt.GetY()); - - Selection& selection = m_parent.get_selection(); - int selected_object_idx = selection.get_object_idx(); - bool processed = false; - - // when control is down we allow scene pan and rotation even when clicking over some object - bool control_down = evt.CmdDown(); - - // mouse anywhere - if (evt.Moving()) { - m_tooltip = update_hover_state(mouse_pos); - if (m_current == MmuSegmentation || m_current == FdmSupports) - gizmo_event(SLAGizmoEventType::Moving, mouse_pos, evt.ShiftDown(), evt.AltDown()); - } else if (evt.LeftUp()) { - if (m_mouse_capture.left) { - processed = true; - m_mouse_capture.left = false; +bool GLGizmosManager::gizmos_toolbar_on_mouse(const wxMouseEvent &mouse_event) { + assert(m_enabled); + // keep information about events to process + struct MouseCapture + { + bool left = false; + bool middle = false; + bool right = false; + bool exist_tooltip = false; + MouseCapture() = default; + bool any() const { return left || middle || right; } + void reset() { + left = false; + middle = false; + right = false; } - else if (is_dragging()) { - switch (m_current) { - case Move: { m_parent.do_move(L("Gizmo-Move")); break; } - case Scale: { m_parent.do_scale(L("Gizmo-Scale")); break; } - case Rotate: { m_parent.do_rotate(L("Gizmo-Rotate")); break; } - default: break; - } + }; + static MouseCapture mc; - stop_dragging(); - update_data(); + // wxCoord == int --> wx/types.h + Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); + Vec2d mouse_pos = mouse_coord.cast(); - wxGetApp().obj_manipul()->set_dirty(); - // Let the plater know that the dragging finished, so a delayed refresh - // of the scene with the background processing data should be performed. - m_parent.post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED)); - // updates camera target constraints - m_parent.refresh_camera_scene_box(); + EType gizmo = get_gizmo_from_mouse(mouse_pos); + bool selected_gizmo = gizmo != Undefined; - processed = true; - } -// else -// return false; - } - else if (evt.MiddleUp()) { - if (m_mouse_capture.middle) { - processed = true; - m_mouse_capture.middle = false; - } - else + // fast reaction on move mouse + if (mouse_event.Moving()) { + assert(!mc.any()); + if (selected_gizmo) { + mc.exist_tooltip = true; + update_hover_state(gizmo); + // at this moment is enebled to process mouse move under gizmo + // tools bar e.g. Do not interupt dragging. return false; + } else if (mc.exist_tooltip) { + // first move out of gizmo tool bar - unselect tooltip + mc.exist_tooltip = false; + update_hover_state(Undefined); + return false; + } + return false; } - else if (evt.RightUp()) { - if (pending_right_up) { - pending_right_up = false; + + if (selected_gizmo) { + // mouse is above toolbar + if (mouse_event.LeftDown() || mouse_event.LeftDClick()) { + mc.left = true; + open_gizmo(gizmo); + return true; + } else if (mouse_event.RightDown()) { + mc.right = true; + return true; + } else if (mouse_event.MiddleDown()) { + mc.middle = true; return true; } - if (m_mouse_capture.right) { - processed = true; - m_mouse_capture.right = false; - } -// else -// return false; - } - else if (evt.Dragging() && !is_dragging()) { - if (m_mouse_capture.any()) - // if the button down was done on this toolbar, prevent from dragging into the scene - processed = true; -// else -// return false; - } - else if (evt.Dragging() && is_dragging()) { - if (!m_parent.get_wxglcanvas()->HasCapture()) - m_parent.get_wxglcanvas()->CaptureMouse(); - - m_parent.set_mouse_as_dragging(); - update(m_parent.mouse_ray(pos), pos); - - switch (m_current) - { - case Move: - { - // Apply new temporary offset - selection.translate(get_displacement()); - wxGetApp().obj_manipul()->set_dirty(); - break; - } - case Scale: - { - // Apply new temporary scale factors - TransformationType transformation_type(TransformationType::Local_Absolute_Joint); - if (evt.AltDown()) - transformation_type.set_independent(); - selection.scale(get_scale(), transformation_type); - if (control_down) - selection.translate(get_scale_offset(), true); - wxGetApp().obj_manipul()->set_dirty(); - break; - } - case Rotate: - { - // Apply new temporary rotations - TransformationType transformation_type(TransformationType::World_Relative_Joint); - if (evt.AltDown()) - transformation_type.set_independent(); - selection.rotate(get_rotation(), transformation_type); - wxGetApp().obj_manipul()->set_dirty(); - break; - } - default: - break; - } - - m_parent.set_as_dirty(); - processed = true; } - if (get_gizmo_idx_from_mouse(mouse_pos) == Undefined) { - // mouse is outside the toolbar - m_tooltip.clear(); - - if (evt.LeftDown() && (!control_down || grabber_contains_mouse())) { - if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) - && gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, evt.ShiftDown(), evt.AltDown())) - // the gizmo got the event and took some action, there is no need to do anything more - processed = true; - else if (!selection.is_empty() && grabber_contains_mouse()) { - update_data(); - selection.start_dragging(); - start_dragging(); - - // Let the plater know that the dragging started - m_parent.post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_STARTED)); - - if (m_current == Flatten) { - // Rotate the object so the normal points downward: - m_parent.do_flatten(get_flattening_normal(), L("Gizmo-Place on Face")); - wxGetApp().obj_manipul()->set_dirty(); - } - - m_parent.set_as_dirty(); - processed = true; + if (mc.any()) { + // Check if exist release of event started above toolbar? + if (mouse_event.Dragging()) { + if (!selected_gizmo && mc.exist_tooltip) { + // dragging out of gizmo let tooltip disapear + mc.exist_tooltip = false; + update_hover_state(Undefined); } + // draging start on toolbar so no propagation into scene + return true; + } else if (mc.left && mouse_event.LeftUp()) { + mc.left = false; + return true; + } else if (mc.right && mouse_event.RightUp()) { + mc.right = false; + return true; + } else if (mc.middle && mouse_event.MiddleUp()) { + mc.middle = false; + return true; } - else if (evt.RightDown() && selected_object_idx != -1 && (m_current == SlaSupports || m_current == Hollow) - && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) { - // we need to set the following right up as processed to avoid showing the context menu if the user release the mouse over the object - pending_right_up = true; - // event was taken care of by the SlaSupports gizmo - processed = true; - } - else if (evt.RightDown() && !control_down && selected_object_idx != -1 && (m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) - && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) { - // event was taken care of by the FdmSupports / Seam / MMUPainting gizmo - processed = true; - } - else if (evt.Dragging() && m_parent.get_move_volume_id() != -1 - && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation)) - // don't allow dragging objects with the Sla gizmo on - processed = true; - else if (evt.Dragging() && !control_down && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) - && gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, evt.ShiftDown(), evt.AltDown())) { - // the gizmo got the event and took some action, no need to do anything more here - m_parent.set_as_dirty(); - processed = true; - } - else if (evt.Dragging() && control_down && (evt.LeftIsDown() || evt.RightIsDown())) { - // CTRL has been pressed while already dragging -> stop current action - if (evt.LeftIsDown()) - gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), true); - else if (evt.RightIsDown()) - gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), true); - } - else if (evt.LeftUp() && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) && !m_parent.is_mouse_dragging()) { - // in case SLA/FDM gizmo is selected, we just pass the LeftUp event and stop processing - neither - // object moving or selecting is suppressed in that case - gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down); - processed = true; - } - else if (evt.LeftUp() && m_current == Flatten && m_gizmos[m_current]->get_hover_id() != -1) { - // to avoid to loose the selection when user clicks an the white faces of a different object while the Flatten gizmo is active - selection.stop_dragging(); - wxGetApp().obj_manipul()->set_dirty(); - processed = true; - } - else if (evt.RightUp() && (m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) && !m_parent.is_mouse_dragging()) { - gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down); - processed = true; - } - else if (evt.LeftUp()) { - selection.stop_dragging(); - wxGetApp().obj_manipul()->set_dirty(); - } - } - else { - // mouse inside toolbar - if (evt.LeftDown() || evt.LeftDClick()) { - m_mouse_capture.left = true; - m_mouse_capture.parent = &m_parent; - processed = true; - if (!selection.is_empty()) { - update_on_off_state(mouse_pos); - update_data(); - m_parent.set_as_dirty(); - } - } - else if (evt.MiddleDown()) { - m_mouse_capture.middle = true; - m_mouse_capture.parent = &m_parent; - } - else if (evt.RightDown()) { - m_mouse_capture.right = true; - m_mouse_capture.parent = &m_parent; - } + + // event out of window is not porocessed + // left down on gizmo -> keep down -> move out of window -> release left + if (mouse_event.Leaving()) mc.reset(); } + return false; +} - return processed; +bool GLGizmosManager::on_mouse(const wxMouseEvent &mouse_event) +{ + if (!m_enabled) return false; + + // tool bar wants to use event? + if (gizmos_toolbar_on_mouse(mouse_event)) return true; + + // current gizmo wants to use event? + if (m_current != Undefined && + // check if gizmo override method could be slower than simple call virtual function + // &m_gizmos[m_current]->on_mouse != &GLGizmoBase::on_mouse && + m_gizmos[m_current]->on_mouse(mouse_event)) + return true; + + return false; } bool GLGizmosManager::on_char(wxKeyEvent& evt) @@ -952,6 +676,60 @@ void GLGizmosManager::update_after_undo_redo(const UndoRedo::Snapshot& snapshot) dynamic_cast(m_gizmos[SlaSupports].get())->reslice_SLA_supports(true); } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLGizmosManager::render_background(float left, float top, float right, float bottom, float border_w, float border_h) const +{ + const unsigned int tex_id = m_background_texture.texture.get_id(); + const float tex_width = float(m_background_texture.texture.get_width()); + const float tex_height = float(m_background_texture.texture.get_height()); + if (tex_id != 0 && tex_width > 0 && tex_height > 0) { + const float inv_tex_width = (tex_width != 0.0f) ? 1.0f / tex_width : 0.0f; + const float inv_tex_height = (tex_height != 0.0f) ? 1.0f / tex_height : 0.0f; + + const float internal_left = left + border_w; + const float internal_right = right - border_w; + const float internal_top = top - border_h; + const float internal_bottom = bottom + border_h; + + // float left_uv = 0.0f; + const float right_uv = 1.0f; + const float top_uv = 1.0f; + const float bottom_uv = 0.0f; + + const float internal_left_uv = float(m_background_texture.metadata.left) * inv_tex_width; + const float internal_right_uv = 1.0f - float(m_background_texture.metadata.right) * inv_tex_width; + const float internal_top_uv = 1.0f - float(m_background_texture.metadata.top) * inv_tex_height; + const float internal_bottom_uv = float(m_background_texture.metadata.bottom) * inv_tex_height; + + // top-left corner + GLTexture::render_sub_texture(tex_id, left, internal_left, internal_top, top, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + + // top edge + GLTexture::render_sub_texture(tex_id, internal_left, internal_right, internal_top, top, { { internal_left_uv, internal_top_uv }, { internal_right_uv, internal_top_uv }, { internal_right_uv, top_uv }, { internal_left_uv, top_uv } }); + + // top-right corner + GLTexture::render_sub_texture(tex_id, internal_right, right, internal_top, top, { { internal_right_uv, internal_top_uv }, { right_uv, internal_top_uv }, { right_uv, top_uv }, { internal_right_uv, top_uv } }); + + // center-left edge + GLTexture::render_sub_texture(tex_id, left, internal_left, internal_bottom, internal_top, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + + // center + GLTexture::render_sub_texture(tex_id, internal_left, internal_right, internal_bottom, internal_top, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + + // center-right edge + GLTexture::render_sub_texture(tex_id, internal_right, right, internal_bottom, internal_top, { { internal_right_uv, internal_bottom_uv }, { right_uv, internal_bottom_uv }, { right_uv, internal_top_uv }, { internal_right_uv, internal_top_uv } }); + + // bottom-left corner + GLTexture::render_sub_texture(tex_id, left, internal_left, bottom, internal_bottom, { { internal_left_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_right_uv, internal_top_uv }, { internal_left_uv, internal_top_uv } }); + + // bottom edge + GLTexture::render_sub_texture(tex_id, internal_left, internal_right, bottom, internal_bottom, { { internal_left_uv, bottom_uv }, { internal_right_uv, bottom_uv }, { internal_right_uv, internal_bottom_uv }, { internal_left_uv, internal_bottom_uv } }); + + // bottom-right corner + GLTexture::render_sub_texture(tex_id, internal_right, right, bottom, internal_bottom, { { internal_right_uv, bottom_uv }, { right_uv, bottom_uv }, { right_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv } }); + } +} +#else void GLGizmosManager::render_background(float left, float top, float right, float bottom, float border) const { const unsigned int tex_id = m_background_texture.texture.get_id(); @@ -1004,7 +782,56 @@ void GLGizmosManager::render_background(float left, float top, float right, floa GLTexture::render_sub_texture(tex_id, internal_right, right, bottom, internal_bottom, { { internal_right_uv, bottom_uv }, { right_uv, bottom_uv }, { right_uv, internal_bottom_uv }, { internal_right_uv, internal_bottom_uv } }); } } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLGizmosManager::render_arrow(const GLCanvas3D& parent, EType highlighted_type) const +{ + const std::vector selectable_idxs = get_selectable_idxs(); + if (selectable_idxs.empty()) + return; + + const Size cnv_size = m_parent.get_canvas_size(); + const float cnv_w = (float)cnv_size.get_width(); + const float cnv_h = (float)cnv_size.get_height(); + + if (cnv_w == 0 || cnv_h == 0) + return; + + const float inv_cnv_w = 1.0f / cnv_w; + const float inv_cnv_h = 1.0f / cnv_h; + + const float top_x = -1.0f; + float top_y = get_scaled_total_height() * inv_cnv_h; + + const float icons_size_x = 2.0f * m_layout.scaled_icons_size() * inv_cnv_w; + const float icons_size_y = 2.0f * m_layout.scaled_icons_size() * inv_cnv_h; + const float stride_y = 2.0f * m_layout.scaled_stride_y() * inv_cnv_h; + + for (size_t idx : selectable_idxs) { + if (idx == highlighted_type) { + const int tex_width = m_arrow_texture.get_width(); + const int tex_height = m_arrow_texture.get_height(); + const unsigned int tex_id = m_arrow_texture.get_id(); + + const float arrow_size_x = 2.0f * m_layout.scale * float(tex_height) * inv_cnv_w; + const float arrow_size_y = 2.0f * m_layout.scale * float(tex_width) * inv_cnv_h; + + const float left_uv = 0.0f; + const float right_uv = 1.0f; + const float top_uv = 1.0f; + const float bottom_uv = 0.0f; + + const float left = top_x + icons_size_x + 6.0f * m_layout.scaled_border() * inv_cnv_w; + const float right = left + arrow_size_x * icons_size_y / arrow_size_y; + + GLTexture::render_sub_texture(tex_id, left, right, top_y, top_y + icons_size_y, { { left_uv, bottom_uv }, { left_uv, top_uv }, { right_uv, top_uv }, { right_uv, bottom_uv } }); + break; + } + top_y -= stride_y; + } +} +#else void GLGizmosManager::render_arrow(const GLCanvas3D& parent, EType highlighted_type) const { std::vector selectable_idxs = get_selectable_idxs(); @@ -1043,21 +870,95 @@ void GLGizmosManager::render_arrow(const GLCanvas3D& parent, EType highlighted_t zoomed_top_y -= zoomed_stride_y; } } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_GL_SHADERS_ATTRIBUTES +void GLGizmosManager::do_render_overlay() const +{ + const std::vector selectable_idxs = get_selectable_idxs(); + if (selectable_idxs.empty()) + return; + + const Size cnv_size = m_parent.get_canvas_size(); + const float cnv_w = (float)cnv_size.get_width(); + const float cnv_h = (float)cnv_size.get_height(); + + if (cnv_w == 0 || cnv_h == 0) + return; + + const float inv_cnv_w = 1.0f / cnv_w; + const float inv_cnv_h = 1.0f / cnv_h; + + const float height = 2.0f * get_scaled_total_height() * inv_cnv_h; + const float width = 2.0f * get_scaled_total_width() * inv_cnv_w; + const float border_h = 2.0f * m_layout.scaled_border() * inv_cnv_h; + const float border_w = 2.0f * m_layout.scaled_border() * inv_cnv_w; + + float top_x = -1.0f; + float top_y = 0.5f * height; + + render_background(top_x, top_y, top_x + width, top_y - height, border_w, border_h); + + top_x += border_w; + top_y -= border_h; + + const float icons_size_x = 2.0f * m_layout.scaled_icons_size() * inv_cnv_w; + const float icons_size_y = 2.0f * m_layout.scaled_icons_size() * inv_cnv_h; + const float stride_y = 2.0f * m_layout.scaled_stride_y() * inv_cnv_h; + + const unsigned int icons_texture_id = m_icons_texture.get_id(); + const int tex_width = m_icons_texture.get_width(); + const int tex_height = m_icons_texture.get_height(); + + if (icons_texture_id == 0 || tex_width <= 1 || tex_height <= 1) + return; + + const float du = (float)(tex_width - 1) / (6.0f * (float)tex_width); // 6 is the number of possible states if the icons + const float dv = (float)(tex_height - 1) / (float)(m_gizmos.size() * tex_height); + + // tiles in the texture are spaced by 1 pixel + const float u_offset = 1.0f / (float)tex_width; + const float v_offset = 1.0f / (float)tex_height; + + float current_y = FLT_MAX; + for (size_t idx : selectable_idxs) { + GLGizmoBase* gizmo = m_gizmos[idx].get(); + const unsigned int sprite_id = gizmo->get_sprite_id(); + // higlighted state needs to be decided first so its highlighting in every other state + const int icon_idx = (m_highlight.first == idx ? (m_highlight.second ? 4 : 5) : (m_current == idx) ? 2 : ((m_hover == idx) ? 1 : (gizmo->is_activable() ? 0 : 3))); + + const float u_left = u_offset + icon_idx * du; + const float u_right = u_left + du - u_offset; + const float v_top = v_offset + sprite_id * dv; + const float v_bottom = v_top + dv - v_offset; + + GLTexture::render_sub_texture(icons_texture_id, top_x, top_x + icons_size_x, top_y - icons_size_y, top_y, { { u_left, v_bottom }, { u_right, v_bottom }, { u_right, v_top }, { u_left, v_top } }); + if (idx == m_current || current_y == FLT_MAX) { + // The FLT_MAX trick is here so that even non-selectable but activable + // gizmos are passed some meaningful value. + current_y = 0.5f * cnv_h - 0.5f * top_y * cnv_h; + } + top_y -= stride_y; + } + + if (m_current != Undefined) + m_gizmos[m_current]->render_input_window(get_scaled_total_width(), current_y, cnv_h - wxGetApp().plater()->get_view_toolbar().get_height()); +} +#else void GLGizmosManager::do_render_overlay() const { std::vector selectable_idxs = get_selectable_idxs(); if (selectable_idxs.empty()) return; - float cnv_w = (float)m_parent.get_canvas_size().get_width(); - float cnv_h = (float)m_parent.get_canvas_size().get_height(); - float zoom = (float)wxGetApp().plater()->get_camera().get_zoom(); - float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); + const float cnv_w = (float)m_parent.get_canvas_size().get_width(); + const float cnv_h = (float)m_parent.get_canvas_size().get_height(); + const float zoom = (float)wxGetApp().plater()->get_camera().get_zoom(); + const float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); - float height = get_scaled_total_height(); - float width = get_scaled_total_width(); - float zoomed_border = m_layout.scaled_border() * inv_zoom; + const float height = get_scaled_total_height(); + const float width = get_scaled_total_width(); + const float zoomed_border = m_layout.scaled_border() * inv_zoom; float zoomed_top_x = (-0.5f * cnv_w) * inv_zoom; float zoomed_top_y = (0.5f * height) * inv_zoom; @@ -1072,36 +973,35 @@ void GLGizmosManager::do_render_overlay() const zoomed_top_x += zoomed_border; zoomed_top_y -= zoomed_border; - float icons_size = m_layout.scaled_icons_size(); - float zoomed_icons_size = icons_size * inv_zoom; - float zoomed_stride_y = m_layout.scaled_stride_y() * inv_zoom; + const float icons_size = m_layout.scaled_icons_size(); + const float zoomed_icons_size = icons_size * inv_zoom; + const float zoomed_stride_y = m_layout.scaled_stride_y() * inv_zoom; - unsigned int icons_texture_id = m_icons_texture.get_id(); - int tex_width = m_icons_texture.get_width(); - int tex_height = m_icons_texture.get_height(); + const unsigned int icons_texture_id = m_icons_texture.get_id(); + const int tex_width = m_icons_texture.get_width(); + const int tex_height = m_icons_texture.get_height(); - if ((icons_texture_id == 0) || (tex_width <= 1) || (tex_height <= 1)) + if (icons_texture_id == 0 || tex_width <= 1 || tex_height <= 1) return; - float du = (float)(tex_width - 1) / (6.0f * (float)tex_width); // 6 is the number of possible states if the icons - float dv = (float)(tex_height - 1) / (float)(m_gizmos.size() * tex_height); + const float du = (float)(tex_width - 1) / (6.0f * (float)tex_width); // 6 is the number of possible states if the icons + const float dv = (float)(tex_height - 1) / (float)(m_gizmos.size() * tex_height); // tiles in the texture are spaced by 1 pixel - float u_offset = 1.0f / (float)tex_width; - float v_offset = 1.0f / (float)tex_height; + const float u_offset = 1.0f / (float)tex_width; + const float v_offset = 1.0f / (float)tex_height; - float current_y = FLT_MAX; - for (size_t idx : selectable_idxs) - { + float current_y = FLT_MAX; + for (size_t idx : selectable_idxs) { GLGizmoBase* gizmo = m_gizmos[idx].get(); - unsigned int sprite_id = gizmo->get_sprite_id(); + const unsigned int sprite_id = gizmo->get_sprite_id(); // higlighted state needs to be decided first so its highlighting in every other state - int icon_idx = (m_highlight.first == idx ? (m_highlight.second ? 4 : 5) : (m_current == idx) ? 2 : ((m_hover == idx) ? 1 : (gizmo->is_activable()? 0 : 3))); + const int icon_idx = (m_highlight.first == idx ? (m_highlight.second ? 4 : 5) : (m_current == idx) ? 2 : ((m_hover == idx) ? 1 : (gizmo->is_activable()? 0 : 3))); - float v_top = v_offset + sprite_id * dv; - float u_left = u_offset + icon_idx * du; - float v_bottom = v_top + dv - v_offset; - float u_right = u_left + du - u_offset; + const float u_left = u_offset + icon_idx * du; + const float u_right = u_left + du - u_offset; + const float v_top = v_offset + sprite_id * dv; + const float v_bottom = v_top + dv - v_offset; GLTexture::render_sub_texture(icons_texture_id, zoomed_top_x, zoomed_top_x + zoomed_icons_size, zoomed_top_y - zoomed_icons_size, zoomed_top_y, { { u_left, v_bottom }, { u_right, v_bottom }, { u_right, v_top }, { u_left, v_top } }); if (idx == m_current || current_y == FLT_MAX) { @@ -1113,10 +1013,11 @@ void GLGizmosManager::do_render_overlay() const } if (m_current != Undefined) { - float toolbar_top = cnv_h - wxGetApp().plater()->get_view_toolbar().get_height(); + const float toolbar_top = cnv_h - wxGetApp().plater()->get_view_toolbar().get_height(); m_gizmos[m_current]->render_input_window(width, current_y, toolbar_top); } } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES float GLGizmosManager::get_scaled_total_height() const { @@ -1146,14 +1047,12 @@ GLGizmosManager::EType GLGizmosManager::get_gizmo_from_name(const std::string& g return GLGizmosManager::EType::Undefined; } -bool GLGizmosManager::generate_icons_texture() const +bool GLGizmosManager::generate_icons_texture() { std::string path = resources_dir() + "/icons/"; std::vector filenames; - for (size_t idx=0; idxget_icon_filename(); if (!icon_filename.empty()) filenames.push_back(path + icon_filename); @@ -1180,68 +1079,68 @@ bool GLGizmosManager::generate_icons_texture() const return res; } -void GLGizmosManager::update_on_off_state(const Vec2d& mouse_pos) +void GLGizmosManager::update_hover_state(const EType &type) { - if (!m_enabled) + assert(m_enabled); + if (type == Undefined) { + m_hover = Undefined; + m_tooltip.clear(); return; - - size_t idx = get_gizmo_idx_from_mouse(mouse_pos); - if (idx != Undefined && m_gizmos[idx]->is_activable() && m_hover == idx) { - activate_gizmo(m_current == idx ? Undefined : (EType)idx); - wxGetApp().obj_list()->select_object_item((EType)idx <= Rotate); - } -} - -std::string GLGizmosManager::update_hover_state(const Vec2d& mouse_pos) -{ - std::string name = ""; - - if (!m_enabled) - return name; - - m_hover = Undefined; - - size_t idx = get_gizmo_idx_from_mouse(mouse_pos); - if (idx != Undefined) { - name = m_gizmos[idx]->get_name(); - - if (m_gizmos[idx]->is_activable()) - m_hover = (EType)idx; } - return name; + const GLGizmoBase &hovered_gizmo = *m_gizmos[type]; + m_hover = hovered_gizmo.is_activable() ? type : Undefined; + m_tooltip = hovered_gizmo.get_name(); } + + +// Activate given gizmo. Returns true if successful, false in case that current +// gizmo vetoed its deactivation. bool GLGizmosManager::activate_gizmo(EType type) { - if (m_gizmos.empty() || m_current == type) - return true; + assert(!m_gizmos.empty()); - GLGizmoBase* old_gizmo = m_current == Undefined ? nullptr : m_gizmos[m_current].get(); - GLGizmoBase* new_gizmo = type == Undefined ? nullptr : m_gizmos[type].get(); + // already activated + if (m_current == type) return true; - if (old_gizmo) { - old_gizmo->set_state(GLGizmoBase::Off); - if (old_gizmo->get_state() != GLGizmoBase::Off) + if (m_current != Undefined) { + // clean up previous gizmo + GLGizmoBase &old_gizmo = *m_gizmos[m_current]; + old_gizmo.set_state(GLGizmoBase::Off); + if (old_gizmo.get_state() != GLGizmoBase::Off) return false; // gizmo refused to be turned off, do nothing. - if (! m_parent.get_gizmos_manager().is_serializing() - && old_gizmo->wants_enter_leave_snapshots()) - Plater::TakeSnapshot snapshot(wxGetApp().plater(), - old_gizmo->get_gizmo_leaving_text(), - UndoRedo::SnapshotType::LeavingGizmoWithAction); + if (!m_serializing && old_gizmo.wants_enter_leave_snapshots()) + Plater::TakeSnapshot + snapshot(wxGetApp().plater(), + old_gizmo.get_gizmo_leaving_text(), + UndoRedo::SnapshotType::LeavingGizmoWithAction); } - if (new_gizmo && ! m_parent.get_gizmos_manager().is_serializing() - && new_gizmo->wants_enter_leave_snapshots()) + if (type == Undefined) { + // it is deactivation of gizmo + m_current = Undefined; + return true; + } + + // set up new gizmo + GLGizmoBase& new_gizmo = *m_gizmos[type]; + if (!new_gizmo.is_activable()) return false; + + if (!m_serializing && new_gizmo.wants_enter_leave_snapshots()) Plater::TakeSnapshot snapshot(wxGetApp().plater(), - new_gizmo->get_gizmo_entering_text(), - UndoRedo::SnapshotType::EnteringGizmo); + new_gizmo.get_gizmo_entering_text(), + UndoRedo::SnapshotType::EnteringGizmo); m_current = type; + new_gizmo.set_state(GLGizmoBase::On); + if (new_gizmo.get_state() != GLGizmoBase::On) { + m_current = Undefined; + return false; // gizmo refused to be turned on. + } - if (new_gizmo) - new_gizmo->set_state(GLGizmoBase::On); + // sucessful activation of gizmo return true; } @@ -1279,11 +1178,5 @@ bool GLGizmosManager::is_hiding_instances() const && m_common_gizmos_data->instances_hider()->is_valid()); } - -int GLGizmosManager::get_shortcut_key(GLGizmosManager::EType type) const -{ - return m_gizmos[type]->get_shortcut_key(); -} - } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index 8d268723b..187afd889 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -34,7 +34,7 @@ public: Rect() = default; Rect(float left, float top, float right, float bottom) : m_left(left) , m_top(top) , m_right(right) , m_bottom(bottom) {} -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL bool operator == (const Rect& other) const { if (std::abs(m_left - other.m_left) > EPSILON) return false; if (std::abs(m_top - other.m_top) > EPSILON) return false; @@ -43,7 +43,7 @@ public: return true; } bool operator != (const Rect& other) const { return !operator==(other); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL float get_left() const { return m_left; } void set_left(float left) { m_left = left; } @@ -102,44 +102,46 @@ private: GLCanvas3D& m_parent; bool m_enabled; std::vector> m_gizmos; - mutable GLTexture m_icons_texture; - mutable bool m_icons_texture_dirty; + GLTexture m_icons_texture; + bool m_icons_texture_dirty; BackgroundTexture m_background_texture; +#if ENABLE_GL_SHADERS_ATTRIBUTES + GLTexture m_arrow_texture; +#else BackgroundTexture m_arrow_texture; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES Layout m_layout; EType m_current; EType m_hover; std::pair m_highlight; // bool true = higlightedShown, false = highlightedHidden std::vector get_selectable_idxs() const; - size_t get_gizmo_idx_from_mouse(const Vec2d& mouse_pos) const; + EType get_gizmo_from_mouse(const Vec2d &mouse_pos) const; bool activate_gizmo(EType type); - struct MouseCapture - { - bool left; - bool middle; - bool right; - GLCanvas3D* parent; - - MouseCapture() { reset(); } - - bool any() const { return left || middle || right; } - void reset() { left = middle = right = false; parent = nullptr; } - }; - - MouseCapture m_mouse_capture; std::string m_tooltip; bool m_serializing; std::unique_ptr m_common_gizmos_data; + /// + /// Process mouse event on gizmo toolbar + /// + /// Event descriptor + /// TRUE when take responsibility for event otherwise FALSE. + /// On true, event should not be process by others. + /// On false, event should be process by others. + bool gizmos_toolbar_on_mouse(const wxMouseEvent &mouse_event); public: explicit GLGizmosManager(GLCanvas3D& parent); bool init(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + bool init_arrow(const std::string& filename); +#else bool init_arrow(const BackgroundTexture::Metadata& arrow_texture); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES template void load(Archive& ar) @@ -184,14 +186,15 @@ public: void refresh_on_off_state(); void reset_all_states(); - bool is_serializing() const { return m_serializing; } bool open_gizmo(EType type); bool check_gizmos_closed_except(EType) const; void set_hover_id(int id); - void enable_grabber(EType type, unsigned int id, bool enable); - void update(const Linef3& mouse_ray, const Point& mouse_pos); + /// + /// Distribute information about different data into active gizmo + /// Should be called when selection changed + /// void update_data(); EType get_current_type() const { return m_current; } @@ -202,28 +205,7 @@ public: bool handle_shortcut(int key); bool is_dragging() const; - void start_dragging(); - void stop_dragging(); - - Vec3d get_displacement() const; - - Vec3d get_scale() const; - void set_scale(const Vec3d& scale); - - Vec3d get_scale_offset() const; - - Vec3d get_rotation() const; - void set_rotation(const Vec3d& rotation); - - Vec3d get_flattening_normal() const; - - void set_flattening_data(const ModelObject* model_object); - - void set_sla_support_data(ModelObject* model_object); - - void set_painter_gizmo_data(); - - bool gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position = Vec2d::Zero(), bool shift_down = false, bool alt_down = false, bool control_down = false); + ClippingPlane get_clipping_plane() const; bool wants_reslice_supports_on_undo() const; @@ -234,38 +216,46 @@ public: void render_current_gizmo_for_picking_pass() const; void render_painter_gizmo(); - void render_overlay() const; + void render_overlay(); void render_arrow(const GLCanvas3D& parent, EType highlighted_type) const; std::string get_tooltip() const; - bool on_mouse(wxMouseEvent& evt); - bool on_mouse_wheel(wxMouseEvent& evt); + bool on_mouse(const wxMouseEvent &mouse_event); + bool on_mouse_wheel(const wxMouseEvent &evt); bool on_char(wxKeyEvent& evt); bool on_key(wxKeyEvent& evt); void update_after_undo_redo(const UndoRedo::Snapshot& snapshot); int get_selectable_icons_cnt() const { return get_selectable_idxs().size(); } - int get_shortcut_key(GLGizmosManager::EType) const; // To end highlight set gizmo = undefined void set_highlight(EType gizmo, bool highlight_shown) { m_highlight = std::pair(gizmo, highlight_shown); } bool get_highlight_state() const { return m_highlight.second; } private: - void render_background(float left, float top, float right, float bottom, float border) const; + bool gizmo_event(SLAGizmoEventType action, + const Vec2d & mouse_position = Vec2d::Zero(), + bool shift_down = false, + bool alt_down = false, + bool control_down = false); +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render_background(float left, float top, float right, float bottom, float border_w, float border_h) const; +#else + void render_background(float left, float top, float right, float bottom, float border) const; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + void do_render_overlay() const; float get_scaled_total_height() const; float get_scaled_total_width() const; - bool generate_icons_texture() const; + bool generate_icons_texture(); - void update_on_off_state(const Vec2d& mouse_pos); - std::string update_hover_state(const Vec2d& mouse_pos); + void update_hover_state(const EType &type); bool grabber_contains_mouse() const; }; diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 4616eee85..d5dfa276c 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -26,13 +26,18 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/Utils.hpp" #include "libslic3r/Color.hpp" + #include "3DScene.hpp" #include "GUI.hpp" #include "I18N.hpp" #include "Search.hpp" #include "BitmapCache.hpp" +#if ENABLE_GL_IMGUI_SHADERS +#include "GUI_App.hpp" +#endif // ENABLE_GL_IMGUI_SHADERS #include "../Utils/MacDarkMode.hpp" + #include "nanosvg/nanosvg.h" #include "nanosvg/nanosvgrast.h" @@ -64,6 +69,9 @@ static const std::map font_icons = { {ImGui::LegendColorChanges , "legend_colorchanges" }, {ImGui::LegendPausePrints , "legend_pauseprints" }, {ImGui::LegendCustomGCodes , "legend_customgcodes" }, +#if ENABLE_SHOW_TOOLPATHS_COG + {ImGui::LegendCOG , "legend_cog" }, +#endif // ENABLE_SHOW_TOOLPATHS_COG {ImGui::LegendShells , "legend_shells" }, {ImGui::LegendToolMarker , "legend_toolmarker" }, #endif // ENABLE_LEGEND_TOOLBAR_ICONS @@ -1439,39 +1447,75 @@ void ImGuiWrapper::init_style() void ImGuiWrapper::render_draw_data(ImDrawData *draw_data) { + if (draw_data == nullptr || draw_data->CmdListsCount == 0) + return; + +#if ENABLE_GL_IMGUI_SHADERS + GLShaderProgram* shader = wxGetApp().get_shader("imgui"); + if (shader == nullptr) + return; +#endif // ENABLE_GL_IMGUI_SHADERS + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) ImGuiIO& io = ImGui::GetIO(); - int fb_width = (int)(draw_data->DisplaySize.x * io.DisplayFramebufferScale.x); - int fb_height = (int)(draw_data->DisplaySize.y * io.DisplayFramebufferScale.y); + const int fb_width = (int)(draw_data->DisplaySize.x * io.DisplayFramebufferScale.x); + const int fb_height = (int)(draw_data->DisplaySize.y * io.DisplayFramebufferScale.y); if (fb_width == 0 || fb_height == 0) return; + +#if ENABLE_GL_IMGUI_SHADERS + GLShaderProgram* curr_shader = wxGetApp().get_current_shader(); + if (curr_shader != nullptr) + curr_shader->stop_using(); + + shader->start_using(); +#else draw_data->ScaleClipRects(io.DisplayFramebufferScale); +#endif // ENABLE_GL_IMGUI_SHADERS // We are using the OpenGL fixed pipeline to make the example code simpler to read! // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, vertex/texcoord/color pointers, polygon fill. - GLint last_texture; glsafe(::glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture)); - GLint last_polygon_mode[2]; glsafe(::glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode)); - GLint last_viewport[4]; glsafe(::glGetIntegerv(GL_VIEWPORT, last_viewport)); - GLint last_scissor_box[4]; glsafe(::glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box)); + GLint last_texture; glsafe(::glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture)); + GLint last_polygon_mode[2]; glsafe(::glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode)); + GLint last_viewport[4]; glsafe(::glGetIntegerv(GL_VIEWPORT, last_viewport)); + GLint last_scissor_box[4]; glsafe(::glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box)); + GLint last_texture_env_mode; glsafe(::glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, &last_texture_env_mode)); glsafe(::glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TRANSFORM_BIT)); glsafe(::glEnable(GL_BLEND)); glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); glsafe(::glDisable(GL_CULL_FACE)); glsafe(::glDisable(GL_DEPTH_TEST)); + glsafe(::glEnable(GL_SCISSOR_TEST)); +#if !ENABLE_GL_IMGUI_SHADERS glsafe(::glDisable(GL_LIGHTING)); glsafe(::glDisable(GL_COLOR_MATERIAL)); - glsafe(::glEnable(GL_SCISSOR_TEST)); glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); glsafe(::glEnableClientState(GL_TEXTURE_COORD_ARRAY)); glsafe(::glEnableClientState(GL_COLOR_ARRAY)); +#endif // !ENABLE_GL_IMGUI_SHADERS glsafe(::glEnable(GL_TEXTURE_2D)); glsafe(::glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)); glsafe(::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)); - GLint texture_env_mode = GL_MODULATE; - glsafe(::glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, &texture_env_mode)); - glsafe(::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)); - //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound +#if ENABLE_GL_IMGUI_SHADERS + // Setup viewport, orthographic projection matrix + // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps. + glsafe(::glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height)); + const float L = draw_data->DisplayPos.x; + const float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; + const float T = draw_data->DisplayPos.y; + const float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y; + + Matrix4f ortho_projection; + ortho_projection << + 2.0f / (R - L), 0.0f, 0.0f, (R + L) / (L - R), + 0.0f, 2.0f / (T - B), 0.0f, (T + B) / (B - T), + 0.0f, 0.0f, -1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f; + + shader->set_uniform("Texture", 0); + shader->set_uniform("ProjMtx", ortho_projection); +#else // Setup viewport, orthographic projection matrix // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. glsafe(::glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height)); @@ -1482,57 +1526,128 @@ void ImGuiWrapper::render_draw_data(ImDrawData *draw_data) glsafe(::glMatrixMode(GL_MODELVIEW)); glsafe(::glPushMatrix()); glsafe(::glLoadIdentity()); +#endif // ENABLE_GL_IMGUI_SHADERS + + // Will project scissor/clipping rectangles into framebuffer space + const ImVec2 clip_off = draw_data->DisplayPos; // (0,0) unless using multi-viewports + const ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2) // Render command lists - ImVec2 pos = draw_data->DisplayPos; - for (int n = 0; n < draw_data->CmdListsCount; n++) - { + for (int n = 0; n < draw_data->CmdListsCount; ++n) { const ImDrawList* cmd_list = draw_data->CmdLists[n]; const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data; - const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data; + const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data; +#if ENABLE_GL_IMGUI_SHADERS + const GLsizeiptr vtx_buffer_size = (GLsizeiptr)cmd_list->VtxBuffer.Size * (int)sizeof(ImDrawVert); + const GLsizeiptr idx_buffer_size = (GLsizeiptr)cmd_list->IdxBuffer.Size * (int)sizeof(ImDrawIdx); + + GLuint vbo_id; + glsafe(::glGenBuffers(1, &vbo_id)); + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, vbo_id)); + glsafe(::glBufferData(GL_ARRAY_BUFFER, vtx_buffer_size, vtx_buffer, GL_STATIC_DRAW)); + + GLuint ibo_id; + glsafe(::glGenBuffers(1, &ibo_id)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_id)); + glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, idx_buffer_size, idx_buffer, GL_STATIC_DRAW)); + + const int position_id = shader->get_attrib_location("Position"); + if (position_id != -1) { + glsafe(::glVertexAttribPointer(position_id, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (const void*)IM_OFFSETOF(ImDrawVert, pos))); + glsafe(::glEnableVertexAttribArray(position_id)); + } + const int uv_id = shader->get_attrib_location("UV"); + if (uv_id != -1) { + glsafe(::glVertexAttribPointer(uv_id, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (const void*)IM_OFFSETOF(ImDrawVert, uv))); + glsafe(::glEnableVertexAttribArray(uv_id)); + } + const int color_id = shader->get_attrib_location("Color"); + if (color_id != -1) { + glsafe(::glVertexAttribPointer(color_id, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (const void*)IM_OFFSETOF(ImDrawVert, col))); + glsafe(::glEnableVertexAttribArray(color_id)); + } +#else glsafe(::glVertexPointer(2, GL_FLOAT, sizeof(ImDrawVert), (const GLvoid*)((const char*)vtx_buffer + IM_OFFSETOF(ImDrawVert, pos)))); glsafe(::glTexCoordPointer(2, GL_FLOAT, sizeof(ImDrawVert), (const GLvoid*)((const char*)vtx_buffer + IM_OFFSETOF(ImDrawVert, uv)))); glsafe(::glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(ImDrawVert), (const GLvoid*)((const char*)vtx_buffer + IM_OFFSETOF(ImDrawVert, col)))); +#endif // ENABLE_GL_IMGUI_SHADERS - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { + for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; ++cmd_i) { const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; if (pcmd->UserCallback) - { // User callback (registered via ImDrawList::AddCallback) pcmd->UserCallback(cmd_list, pcmd); - } - else - { - ImVec4 clip_rect = ImVec4(pcmd->ClipRect.x - pos.x, pcmd->ClipRect.y - pos.y, pcmd->ClipRect.z - pos.x, pcmd->ClipRect.w - pos.y); - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f) - { - // Apply scissor/clipping rectangle - glsafe(::glScissor((int)clip_rect.x, (int)(fb_height - clip_rect.w), (int)(clip_rect.z - clip_rect.x), (int)(clip_rect.w - clip_rect.y))); + else { +#if ENABLE_GL_IMGUI_SHADERS + // Project scissor/clipping rectangles into framebuffer space + const ImVec2 clip_min((pcmd->ClipRect.x - clip_off.x) * clip_scale.x, (pcmd->ClipRect.y - clip_off.y) * clip_scale.y); + const ImVec2 clip_max((pcmd->ClipRect.z - clip_off.x) * clip_scale.x, (pcmd->ClipRect.w - clip_off.y) * clip_scale.y); + if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y) + continue; - // Bind texture, Draw - glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId)); - glsafe(::glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer)); - } + // Apply scissor/clipping rectangle (Y is inverted in OpenGL) + glsafe(::glScissor((int)clip_min.x, (int)(fb_height - clip_max.y), (int)(clip_max.x - clip_min.x), (int)(clip_max.y - clip_min.y))); + + // Bind texture, Draw + glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->GetTexID())); + glsafe(::glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx)))); +#else + // Project scissor/clipping rectangles into framebuffer space + const ImVec2 clip_min((pcmd->ClipRect.x - clip_off.x) * clip_scale.x, (pcmd->ClipRect.y - clip_off.y) * clip_scale.y); + const ImVec2 clip_max((pcmd->ClipRect.z - clip_off.x) * clip_scale.x, (pcmd->ClipRect.w - clip_off.y) * clip_scale.y); + if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y) + continue; + + // Apply scissor/clipping rectangle (Y is inverted in OpenGL) + glsafe(::glScissor((int)clip_min.x, (int)(fb_height - clip_max.y), (int)(clip_max.x - clip_min.x), (int)(clip_max.y - clip_min.y))); + + // Bind texture, Draw + glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->GetTexID())); + glsafe(::glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer + pcmd->IdxOffset)); +#endif // ENABLE_GL_IMGUI_SHADERS } - idx_buffer += pcmd->ElemCount; } + +#if ENABLE_GL_IMGUI_SHADERS + if (position_id != -1) + glsafe(::glDisableVertexAttribArray(position_id)); + if (uv_id != -1) + glsafe(::glDisableVertexAttribArray(uv_id)); + if (color_id != -1) + glsafe(::glDisableVertexAttribArray(color_id)); + + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + + glsafe(::glDeleteBuffers(1, &ibo_id)); + glsafe(::glDeleteBuffers(1, &vbo_id)); +#endif // ENABLE_GL_IMGUI_SHADERS } // Restore modified state - glsafe(::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, texture_env_mode)); + glsafe(::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, last_texture_env_mode)); + glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)last_texture)); +#if !ENABLE_GL_IMGUI_SHADERS glsafe(::glDisableClientState(GL_COLOR_ARRAY)); glsafe(::glDisableClientState(GL_TEXTURE_COORD_ARRAY)); glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); - glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)last_texture)); glsafe(::glMatrixMode(GL_MODELVIEW)); glsafe(::glPopMatrix()); glsafe(::glMatrixMode(GL_PROJECTION)); glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_IMGUI_SHADERS glsafe(::glPopAttrib()); - glsafe(::glPolygonMode(GL_FRONT, (GLenum)last_polygon_mode[0]); glPolygonMode(GL_BACK, (GLenum)last_polygon_mode[1])); + glsafe(::glPolygonMode(GL_FRONT, (GLenum)last_polygon_mode[0]); + glsafe(::glPolygonMode(GL_BACK, (GLenum)last_polygon_mode[1]))); glsafe(::glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3])); glsafe(::glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3])); + +#if ENABLE_GL_IMGUI_SHADERS + shader->stop_using(); + + if (curr_shader != nullptr) + curr_shader->start_using(); +#endif // ENABLE_GL_IMGUI_SHADERS } bool ImGuiWrapper::display_initialized() const diff --git a/src/slic3r/GUI/Jobs/BusyCursorJob.hpp b/src/slic3r/GUI/Jobs/BusyCursorJob.hpp index 530213b1d..8504d1eb9 100644 --- a/src/slic3r/GUI/Jobs/BusyCursorJob.hpp +++ b/src/slic3r/GUI/Jobs/BusyCursorJob.hpp @@ -4,6 +4,7 @@ #include "Job.hpp" #include +#include namespace Slic3r { namespace GUI { @@ -16,7 +17,11 @@ struct CursorSetterRAII } ~CursorSetterRAII() { - ctl.call_on_main_thread([] { wxEndBusyCursor(); }); + try { + ctl.call_on_main_thread([] { wxEndBusyCursor(); }); + } catch(...) { + BOOST_LOG_TRIVIAL(error) << "Can't revert cursor from busy to normal"; + } } }; diff --git a/src/slic3r/GUI/Jobs/SLAImportJob.cpp b/src/slic3r/GUI/Jobs/SLAImportJob.cpp index 1bb8cdf6c..96702d158 100644 --- a/src/slic3r/GUI/Jobs/SLAImportJob.cpp +++ b/src/slic3r/GUI/Jobs/SLAImportJob.cpp @@ -1,5 +1,6 @@ #include "SLAImportJob.hpp" +#include "libslic3r/SLAPrint.hpp" #include "libslic3r/Format/SL1.hpp" #include "slic3r/GUI/GUI.hpp" diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 08d2f682b..cc2e07f69 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -859,7 +859,10 @@ bool MainFrame::save_project_as(const wxString& filename) { bool ret = (m_plater != nullptr) ? m_plater->export_3mf(into_path(filename)) : false; if (ret) { -// wxGetApp().update_saved_preset_from_current_preset(); + // Make a copy of the active presets for detecting changes in preset values. + wxGetApp().update_saved_preset_from_current_preset(); + // Save the names of active presets and project specific config into ProjectDirtyStateManager. + // Reset ProjectDirtyStateManager's state as saved, mark active UndoRedo step as saved with project. m_plater->reset_project_dirty_after_save(); } return ret; diff --git a/src/slic3r/GUI/MeshUtils.cpp b/src/slic3r/GUI/MeshUtils.cpp index 440b0ec0d..bbdcdeb34 100644 --- a/src/slic3r/GUI/MeshUtils.cpp +++ b/src/slic3r/GUI/MeshUtils.cpp @@ -6,7 +6,13 @@ #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/Model.hpp" +#if ENABLE_LEGACY_OPENGL_REMOVAL +#include "slic3r/GUI/GUI_App.hpp" +#endif // ENABLE_LEGACY_OPENGL_REMOVAL #include "slic3r/GUI/Camera.hpp" +#if ENABLE_GL_SHADERS_ATTRIBUTES +#include "slic3r/GUI/Plater.hpp" +#endif // ENABLE_GL_SHADERS_ATTRIBUTES #include @@ -64,15 +70,42 @@ void MeshClipper::set_transformation(const Geometry::Transformation& trafo) } } - - +#if ENABLE_LEGACY_OPENGL_REMOVAL +void MeshClipper::render_cut(const ColorRGBA& color) +#else void MeshClipper::render_cut() +#endif // ENABLE_LEGACY_OPENGL_REMOVAL { if (! m_triangles_valid) recalculate_triangles(); +#if ENABLE_LEGACY_OPENGL_REMOVAL + if (m_model.vertices_count() == 0 || m_model.indices_count() == 0) + return; + + GLShaderProgram* curr_shader = wxGetApp().get_current_shader(); + if (curr_shader != nullptr) + curr_shader->stop_using(); + + GLShaderProgram* shader = wxGetApp().get_shader("flat"); + if (shader != nullptr) { + shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + m_model.set_color(color); + m_model.render(); + shader->stop_using(); + } + + if (curr_shader != nullptr) + curr_shader->start_using(); +#else if (m_vertex_array.has_VBOs()) m_vertex_array.render(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } @@ -161,6 +194,26 @@ void MeshClipper::recalculate_triangles() tr.pretranslate(0.001 * m_plane.get_normal().normalized()); // to avoid z-fighting +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_model.reset(); + + GLModel::Geometry init_data; + init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + init_data.reserve_vertices(m_triangles2d.size()); + init_data.reserve_indices(m_triangles2d.size()); + + // vertices + indices + for (auto it = m_triangles2d.cbegin(); it != m_triangles2d.cend(); it = it + 3) { + init_data.add_vertex((Vec3f)(tr * Vec3d((*(it + 0)).x(), (*(it + 0)).y(), height_mesh)).cast(), (Vec3f)up.cast()); + init_data.add_vertex((Vec3f)(tr * Vec3d((*(it + 1)).x(), (*(it + 1)).y(), height_mesh)).cast(), (Vec3f)up.cast()); + init_data.add_vertex((Vec3f)(tr * Vec3d((*(it + 2)).x(), (*(it + 2)).y(), height_mesh)).cast(), (Vec3f)up.cast()); + const size_t idx = it - m_triangles2d.cbegin(); + init_data.add_triangle((unsigned int)idx, (unsigned int)idx + 1, (unsigned int)idx + 2); + } + + if (!init_data.is_empty()) + m_model.init_from(std::move(init_data)); +#else m_vertex_array.release_geometry(); for (auto it=m_triangles2d.cbegin(); it != m_triangles2d.cend(); it=it+3) { m_vertex_array.push_geometry(tr * Vec3d((*(it+0))(0), (*(it+0))(1), height_mesh), up); @@ -170,6 +223,7 @@ void MeshClipper::recalculate_triangles() m_vertex_array.push_triangle(idx, idx+1, idx+2); } m_vertex_array.finalize_geometry(true); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL m_triangles_valid = true; } diff --git a/src/slic3r/GUI/MeshUtils.hpp b/src/slic3r/GUI/MeshUtils.hpp index bb8a1aa61..3b8d247c1 100644 --- a/src/slic3r/GUI/MeshUtils.hpp +++ b/src/slic3r/GUI/MeshUtils.hpp @@ -3,10 +3,15 @@ #include "libslic3r/Point.hpp" #include "libslic3r/Geometry.hpp" +#include "libslic3r/TriangleMesh.hpp" #include "libslic3r/SLA/IndexedMesh.hpp" #include "admesh/stl.h" +#if ENABLE_LEGACY_OPENGL_REMOVAL +#include "slic3r/GUI/GLModel.hpp" +#else #include "slic3r/GUI/3DScene.hpp" +#endif // ENABLE_LEGACY_OPENGL_REMOVAL #include @@ -20,16 +25,14 @@ struct Camera; // lm_FIXME: Following class might possibly be replaced by Eigen::Hyperplane class ClippingPlane { - double m_data[4]; + std::array m_data; public: - ClippingPlane() - { + ClippingPlane() { *this = ClipsNothing(); } - ClippingPlane(const Vec3d& direction, double offset) - { + ClippingPlane(const Vec3d& direction, double offset) { set_normal(direction); set_offset(offset); } @@ -45,8 +48,7 @@ public: } bool is_point_clipped(const Vec3d& point) const { return distance(point) < 0.; } - void set_normal(const Vec3d& normal) - { + void set_normal(const Vec3d& normal) { const Vec3d norm_dir = normal.normalized(); m_data[0] = norm_dir.x(); m_data[1] = norm_dir.y(); @@ -57,19 +59,19 @@ public: Vec3d get_normal() const { return Vec3d(m_data[0], m_data[1], m_data[2]); } bool is_active() const { return m_data[3] != DBL_MAX; } static ClippingPlane ClipsNothing() { return ClippingPlane(Vec3d(0., 0., 1.), DBL_MAX); } - const double* get_data() const { return m_data; } + const std::array& get_data() const { return m_data; } // Serialization through cereal library template - void serialize( Archive & ar ) - { + void serialize( Archive & ar ) { ar( m_data[0], m_data[1], m_data[2], m_data[3] ); } }; // MeshClipper class cuts a mesh and is able to return a triangulated cut. -class MeshClipper { +class MeshClipper +{ public: // Inform MeshClipper about which plane we want to use to cut the mesh // This is supposed to be in world coordinates. @@ -92,7 +94,11 @@ public: // Render the triangulated cut. Transformation matrices should // be set in world coords. +#if ENABLE_LEGACY_OPENGL_REMOVAL + void render_cut(const ColorRGBA& color); +#else void render_cut(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL private: void recalculate_triangles(); @@ -103,7 +109,11 @@ private: ClippingPlane m_plane; ClippingPlane m_limiting_plane = ClippingPlane::ClipsNothing(); std::vector m_triangles2d; +#if ENABLE_LEGACY_OPENGL_REMOVAL + GLModel m_model; +#else GLIndexedVertexArray m_vertex_array; +#endif // ENABLE_LEGACY_OPENGL_REMOVAL bool m_triangles_valid = false; }; diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index acdbd249c..94e9ca5f3 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -95,9 +95,9 @@ wxButton* MsgDialog::get_button(wxWindowID btn_id){ void MsgDialog::apply_style(long style) { if (style & wxOK) add_button(wxID_OK, true); - if (style & wxYES) add_button(wxID_YES, true); - if (style & wxNO) add_button(wxID_NO); - if (style & wxCANCEL) add_button(wxID_CANCEL); + if (style & wxYES) add_button(wxID_YES, !(style & wxNO_DEFAULT)); + if (style & wxNO) add_button(wxID_NO, (style & wxNO_DEFAULT)); + if (style & wxCANCEL) add_button(wxID_CANCEL, (style & wxCANCEL_DEFAULT)); logo->SetBitmap( create_scaled_bitmap(style & wxICON_WARNING ? "exclamation" : style & wxICON_INFORMATION ? "info" : @@ -139,6 +139,19 @@ static void add_msg_content(wxWindow* parent, wxBoxSizer* content_sizer, wxStrin wxFont monospace = wxGetApp().code_font(); wxColour text_clr = wxGetApp().get_label_clr_default(); wxColour bgr_clr = parent->GetBackgroundColour(); + +#ifdef __APPLE__ + // On macOS 10.13 and older the background color returned by wxWidgets + // is wrong, which leads to https://github.com/prusa3d/PrusaSlicer/issues/7603 + // and https://github.com/prusa3d/PrusaSlicer/issues/3775. wxSYS_COLOUR_WINDOW + // may not match the window background exactly, but it seems to never end up + // as black on black. + + if (wxPlatformInfo::Get().GetOSMajorVersion() == 10 + && wxPlatformInfo::Get().GetOSMinorVersion() < 14) + bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); +#endif + auto text_clr_str = encode_color(ColorRGB(text_clr.Red(), text_clr.Green(), text_clr.Blue())); auto bgr_clr_str = encode_color(ColorRGB(bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue())); const int font_size = font.GetPointSize(); @@ -299,43 +312,41 @@ wxString get_wraped_wxString(const wxString& in, size_t line_len /*=80*/) for (size_t i = 0; i < in.size();) { // Overwrite the character (space or newline) starting at ibreak? bool overwrite = false; -#if wxUSE_UNICODE_WCHAR - // On Windows, most likely the internal representation of wxString is wide char. - size_t end = std::min(in.size(), i + line_len); - size_t ibreak = end; - for (size_t j = i; j < end; ++ j) { - if (bool newline = in[j] == '\n'; in[j] == ' ' || in[j] == '\t' || newline) { - ibreak = j; - overwrite = true; - if (newline) - break; - } else if (in[j] == '/' || in[j] == '\\') - ibreak = j + 1; - } -#else // UTF8 representation of wxString. // Where to break the line, index of character at the start of a UTF-8 sequence. size_t ibreak = size_t(-1); // Overwrite the character at ibreak (it is a whitespace) or not? - for (size_t cnt = 0, j = i; j < in.size();) { + size_t j = i; + for (size_t cnt = 0; j < in.size();) { if (bool newline = in[j] == '\n'; in[j] == ' ' || in[j] == '\t' || newline) { // Overwrite the whitespace. ibreak = j ++; overwrite = true; if (newline) break; - } else if (in[j] == '/') { + } else if (in[j] == '/' +#ifdef _WIN32 + || in[j] == '\\' +#endif // _WIN32 + ) { // Insert after the slash. - ibreak = ++ j; + ibreak = ++ j; + overwrite = false; } else j += get_utf8_sequence_length(in.c_str() + j, in.size() - j); if (++ cnt == line_len) { - if (ibreak == size_t(-1)) - ibreak = j; + if (ibreak == size_t(-1)) { + ibreak = j; + overwrite = false; + } break; } } -#endif + if (j == in.size()) { + out.append(in.begin() + i, in.end()); + break; + } + assert(ibreak != size_t(-1)); out.append(in.begin() + i, in.begin() + ibreak); out.append('\n'); i = ibreak; diff --git a/src/slic3r/GUI/MsgDialog.hpp b/src/slic3r/GUI/MsgDialog.hpp index 874629343..4ccc90792 100644 --- a/src/slic3r/GUI/MsgDialog.hpp +++ b/src/slic3r/GUI/MsgDialog.hpp @@ -160,8 +160,8 @@ public: // customization of the message box buttons virtual bool SetYesNoLabels(const wxMD::ButtonLabel& yes, const wxMD::ButtonLabel& no) { - DoSetCustomLabel(m_yes, yes); - DoSetCustomLabel(m_no, no); + DoSetCustomLabel(m_yes, yes, wxID_YES); + DoSetCustomLabel(m_no, no, wxID_NO); return true; } @@ -169,29 +169,29 @@ public: const wxMD::ButtonLabel& no, const wxMD::ButtonLabel& cancel) { - DoSetCustomLabel(m_yes, yes); - DoSetCustomLabel(m_no, no); - DoSetCustomLabel(m_cancel, cancel); + DoSetCustomLabel(m_yes, yes, wxID_YES); + DoSetCustomLabel(m_no, no, wxID_NO); + DoSetCustomLabel(m_cancel, cancel, wxID_CANCEL); return true; } virtual bool SetOKLabel(const wxMD::ButtonLabel& ok) { - DoSetCustomLabel(m_ok, ok); + DoSetCustomLabel(m_ok, ok, wxID_OK); return true; } virtual bool SetOKCancelLabels(const wxMD::ButtonLabel& ok, const wxMD::ButtonLabel& cancel) { - DoSetCustomLabel(m_ok, ok); - DoSetCustomLabel(m_cancel, cancel); + DoSetCustomLabel(m_ok, ok, wxID_OK); + DoSetCustomLabel(m_cancel, cancel, wxID_CANCEL); return true; } virtual bool SetHelpLabel(const wxMD::ButtonLabel& help) { - DoSetCustomLabel(m_help, help); + DoSetCustomLabel(m_help, help, wxID_HELP); return true; } // test if any custom labels were set @@ -230,9 +230,10 @@ protected: // the value to var with possibly some transformation (e.g. Cocoa version // currently uses this to remove any accelerators from the button strings // while GTK+ one handles stock items specifically here) - void DoSetCustomLabel(wxString& var, const wxMD::ButtonLabel& label) + void DoSetCustomLabel(wxString& var, const wxMD::ButtonLabel& label, wxWindowID btn_id) { var = label.GetAsString(); + SetButtonLabel(btn_id, var); } // these functions return the custom label or empty string and should be diff --git a/src/slic3r/GUI/Notebook.hpp b/src/slic3r/GUI/Notebook.hpp index ff5020b9c..af03a6a08 100644 --- a/src/slic3r/GUI/Notebook.hpp +++ b/src/slic3r/GUI/Notebook.hpp @@ -245,7 +245,7 @@ public: GetBtnsListCtrl()->Rescale(); } - void Notebook::OnNavigationKey(wxNavigationKeyEvent& event) + void OnNavigationKey(wxNavigationKeyEvent& event) { if (event.IsWindowChange()) { // change pages diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 6e9bc267f..fc20e43f5 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -318,7 +318,8 @@ void NotificationManager::PopNotification::count_lines() } m_lines_count++; } - // hypertext calculation + // original hypertext calculation (when there was no text2) + /* if (!m_hypertext.empty()) { int prev_end = m_endlines.size() > 1 ? m_endlines[m_endlines.size() - 2] : 0; // m_endlines.size() - 2 because we are fitting hypertext instead of last endline if (ImGui::CalcTextSize((escape_string_cstyle(text.substr(prev_end, last_end - prev_end)) + m_hypertext).c_str()).x > m_window_width - m_window_width_offset) { @@ -326,9 +327,84 @@ void NotificationManager::PopNotification::count_lines() m_lines_count++; } } + */ + int prev_end = m_endlines.size() > 1 ? m_endlines[m_endlines.size() - 2] : 0; + int size_of_last_line = ImGui::CalcTextSize(text.substr(prev_end, last_end - prev_end).c_str()).x; + // hypertext calculation + if (!m_hypertext.empty()) { + if (size_of_last_line + ImGui::CalcTextSize(m_hypertext.c_str()).x > m_window_width - m_window_width_offset) { + // hypertext on new line + size_of_last_line = ImGui::CalcTextSize((m_hypertext + " ").c_str()).x; + m_endlines.push_back(last_end); + m_lines_count++; + } + else { + size_of_last_line += ImGui::CalcTextSize((m_hypertext + " ").c_str()).x; + } + } + // text after hypertext calculation + if (!m_text2.empty()) { + text = m_text2; + last_end = 0; + m_endlines2.clear(); + // if size_of_last_line too large to fit anything + size_t first_end = std::min(text.find_first_of('\n'), text.find_first_of(' ')); + if (size_of_last_line >= m_window_width - m_window_width_offset - ImGui::CalcTextSize(text.substr(0, first_end).c_str()).x) { + m_endlines2.push_back(0); + size_of_last_line = 0; + } + while (last_end < text.length() - 1) + { + size_t next_hard_end = text.find_first_of('\n', last_end); + if (next_hard_end != std::string::npos && ImGui::CalcTextSize(text.substr(last_end, next_hard_end - last_end).c_str()).x < m_window_width - m_window_width_offset - size_of_last_line) { + //next line is ended by '/n' + m_endlines2.push_back(next_hard_end); + last_end = next_hard_end + 1; + } + else { + // find next suitable endline + if (ImGui::CalcTextSize(text.substr(last_end).c_str()).x >= m_window_width - m_window_width_offset - size_of_last_line) { + // more than one line till end + size_t next_space = text.find_first_of(' ', last_end); + if (next_space > 0) { + size_t next_space_candidate = text.find_first_of(' ', next_space + 1); + while (next_space_candidate > 0 && ImGui::CalcTextSize(text.substr(last_end, next_space_candidate - last_end).c_str()).x < m_window_width - m_window_width_offset - size_of_last_line) { + next_space = next_space_candidate; + next_space_candidate = text.find_first_of(' ', next_space + 1); + } + } + else { + next_space = text.length(); + } + // when one word longer than line. + if (ImGui::CalcTextSize(text.substr(last_end, next_space - last_end).c_str()).x > m_window_width - m_window_width_offset - size_of_last_line || + ImGui::CalcTextSize(text.substr(last_end, next_space - last_end).c_str()).x + size_of_last_line < (m_window_width - m_window_width_offset) / 5 * 3 + ) { + float width_of_a = ImGui::CalcTextSize("a").x; + int letter_count = (int)((m_window_width - m_window_width_offset - size_of_last_line) / width_of_a); + while (last_end + letter_count < text.size() && ImGui::CalcTextSize(text.substr(last_end, letter_count).c_str()).x < m_window_width - m_window_width_offset - size_of_last_line) { + letter_count += get_utf8_sequence_length(text, last_end + letter_count); + } + m_endlines2.push_back(last_end + letter_count); + last_end += letter_count; + } + else { + m_endlines2.push_back(next_space); + last_end = next_space + 1; + } + } + else { + m_endlines2.push_back(text.length()); + last_end = text.length(); + } - // m_text_2 (text after hypertext) is not used for regular notifications right now. - // its caluculation is in HintNotification::count_lines() + } + if (size_of_last_line == 0) // if first line is continuation of previous text, do not add to line count. + m_lines_count++; + size_of_last_line = 0; // should countain value only for first line (with hypertext) + + } + } } void NotificationManager::PopNotification::init() @@ -394,8 +470,29 @@ void NotificationManager::PopNotification::render_text(ImGuiWrapper& imgui, cons render_hypertext(imgui, x_offset + ImGui::CalcTextSize((line + (line.empty() ? "" : " ")).c_str()).x, starting_y + (m_endlines.size() - 1) * shift_y, m_hypertext); } - // text2 (text after hypertext) is not rendered for regular notifications - // its rendering is in HintNotification::render_text + // text2 + if (!m_text2.empty() && (m_multiline|| m_lines_count <= 2)) { + starting_y += (m_endlines.size() - 1) * shift_y; + last_end = 0; + for (size_t i = 0; i < (m_multiline ? m_endlines2.size() : 2); i++) { + if (i == 0) //first line X is shifted by hypertext + ImGui::SetCursorPosX(x_offset + ImGui::CalcTextSize((line + m_hypertext + (line.empty() ? " " : " ")).c_str()).x); + else + ImGui::SetCursorPosX(x_offset); + + ImGui::SetCursorPosY(starting_y + i * shift_y); + line.clear(); + if (m_endlines2.size() > i && m_text2.size() >= m_endlines2[i]) { + + // regular line + line = m_text2.substr(last_end, m_endlines2[i] - last_end); + last_end = m_endlines2[i]; + if (m_text2.size() > m_endlines2[i]) + last_end += (m_text2[m_endlines2[i]] == '\n' || m_text2[m_endlines2[i]] == ' ' ? 1 : 0); + imgui.text(line.c_str()); + } + } + } } void NotificationManager::PopNotification::render_hypertext(ImGuiWrapper& imgui, const float text_x, const float text_y, const std::string text, bool more) @@ -819,6 +916,120 @@ void NotificationManager::ProgressBarNotification::render_bar(ImGuiWrapper& imgu imgui.text(text.c_str()); } } +//------ProgressBarWithCancelNotification---------------- + +void NotificationManager::ProgressBarWithCancelNotification::render_close_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + if (m_percentage < 0.f || m_percentage >= 1.f) + render_close_button_inner(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); + else + render_cancel_button_inner(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); +} +void NotificationManager::ProgressBarWithCancelNotification::render_close_button_inner(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + ImVec2 win_size(win_size_x, win_size_y); + ImVec2 win_pos(win_pos_x, win_pos_y); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(.0f, .0f, .0f, .0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(.0f, .0f, .0f, .0f)); + push_style_color(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + push_style_color(ImGuiCol_TextSelectedBg, ImVec4(0, .75f, .75f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); + + + std::string button_text; + button_text = ImGui::CloseNotifButton; + + if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - win_size.x / 10.f, win_pos.y), + ImVec2(win_pos.x, win_pos.y + win_size.y - (m_minimize_b_visible ? 2 * m_line_height : 0)), + true)) + { + button_text = ImGui::CloseNotifHoverButton; + } + ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); + ImGui::SetCursorPosX(win_size.x - m_line_height * 2.75f); + ImGui::SetCursorPosY(win_size.y / 2 - button_size.y); + if (imgui.button(button_text.c_str(), button_size.x, button_size.y)) + { + close(); + } + + //invisible large button + ImGui::SetCursorPosX(win_size.x - m_line_height * 2.35f); + ImGui::SetCursorPosY(0); + if (imgui.button(" ", m_line_height * 2.125, win_size.y - (m_minimize_b_visible ? 2 * m_line_height : 0))) + { + close(); + } + ImGui::PopStyleColor(5); + +} + +void NotificationManager::ProgressBarWithCancelNotification::render_cancel_button_inner(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + ImVec2 win_size(win_size_x, win_size_y); + ImVec2 win_pos(win_pos_x, win_pos_y); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(.0f, .0f, .0f, .0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(.0f, .0f, .0f, .0f)); + push_style_color(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + push_style_color(ImGuiCol_TextSelectedBg, ImVec4(0, .75f, .75f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); + + + std::string button_text; + button_text = ImGui::CancelButton; + + if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - win_size.x / 10.f, win_pos.y), + ImVec2(win_pos.x, win_pos.y + win_size.y - (m_minimize_b_visible ? 2 * m_line_height : 0)), + true)) + { + button_text = ImGui::CancelHoverButton; + } + ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); + ImGui::SetCursorPosX(win_size.x - m_line_height * 2.75f); + ImGui::SetCursorPosY(win_size.y / 2 - button_size.y); + if (imgui.button(button_text.c_str(), button_size.x, button_size.y)) + { + on_cancel_button(); + } + + //invisible large button + ImGui::SetCursorPosX(win_size.x - m_line_height * 2.35f); + ImGui::SetCursorPosY(0); + if (imgui.button(" ", m_line_height * 2.125, win_size.y - (m_minimize_b_visible ? 2 * m_line_height : 0))) + { + on_cancel_button(); + } + ImGui::PopStyleColor(5); + +} + +void NotificationManager::ProgressBarWithCancelNotification::on_cancel_button() +{ + if (m_cancel_callback) { + if (m_cancel_callback()) { + close(); + } + } +} + +void NotificationManager::ProgressBarWithCancelNotification::render_bar(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + ProgressBarNotification::render_bar(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); + std::string text; + if (m_percentage < 0.f) { + text = _u8L("ERROR"); + } else { + std::stringstream stream; + stream << std::fixed << std::setprecision(2) << (int)(m_percentage * 100) << "%"; + text = stream.str(); + } + ImGui::SetCursorPosX(m_left_indentation); + ImGui::SetCursorPosY(win_size_y / 2 + win_size_y / 6 - (m_multiline ? 0 : m_line_height / 4)); + imgui.text(text.c_str()); +} + //------PrintHostUploadNotification---------------- void NotificationManager::PrintHostUploadNotification::init() { @@ -1427,10 +1638,11 @@ void NotificationManager::push_notification(NotificationType type, const std::string& text, const std::string& hypertext, std::function callback, + const std::string& text_after, int timestamp) { int duration = get_standard_duration(level); - push_notification_data({ type, level, duration, text, hypertext, callback }, timestamp); + push_notification_data({ type, level, duration, text, hypertext, callback, text_after }, timestamp); } void NotificationManager::push_delayed_notification(const NotificationType type, std::function condition_callback, int64_t initial_delay, int64_t delay_interval) @@ -1653,11 +1865,42 @@ void NotificationManager::upload_job_notification_show_error(int id, const std:: } } +void NotificationManager::push_download_progress_notification(const std::string& text, std::function cancel_callback) +{ + // If already exists, change text and reset progress + for (std::unique_ptr& notification : m_pop_notifications) { + if (notification->get_type() == NotificationType::AppDownload) { + notification->update({ NotificationType::AppDownload, NotificationLevel::ProgressBarNotificationLevel, 10, text }); + auto* pbwcn = dynamic_cast(notification.get()); + pbwcn->set_percentage(0.0f); + pbwcn->set_cancel_callback(cancel_callback); + return; + } + } + // push new one + NotificationData data{ NotificationType::AppDownload, NotificationLevel::ProgressBarNotificationLevel, 10, text }; + push_notification_data(std::make_unique(data, m_id_provider, m_evt_handler, cancel_callback), 0); +} +void NotificationManager::set_download_progress_percentage(float percentage) +{ + for (std::unique_ptr& notification : m_pop_notifications) { + if (notification->get_type() == NotificationType::AppDownload) { + ProgressBarWithCancelNotification* pbwcn = dynamic_cast(notification.get()); + // if this changes the percentage, it should be shown now + float percent_b4 = pbwcn->get_percentage(); + pbwcn->set_percentage(percentage); + if (pbwcn->get_percentage() != percent_b4) + wxGetApp().plater()->get_current_canvas3D()->schedule_extra_frame(0); + return; + } + } +} + void NotificationManager::init_slicing_progress_notification(std::function cancel_callback) { for (std::unique_ptr& notification : m_pop_notifications) { if (notification->get_type() == NotificationType::SlicingProgress) { - dynamic_cast(notification.get())->set_cancel_callback(cancel_callback); + dynamic_cast(notification.get())->set_cancel_callback(cancel_callback); return; } } diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index 9265cb55e..c6a24d997 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -78,6 +78,8 @@ enum class NotificationType ProgressBar, // Progress bar with info from Print Host Upload Queue dialog. PrintHostUpload, + // Progress bar of download next version app. + AppDownload, // Progress bar with cancel button, cannot be closed // On end of slicing and G-code processing (the full G-code preview is available), // contains a hyperlink to export the G-code to a removable media or hdd. @@ -152,7 +154,7 @@ public: // Push a NotificationType::CustomNotification with provided notification level and 10s for RegularNotificationLevel. // ErrorNotificationLevel are never faded out. void push_notification(NotificationType type, NotificationLevel level, const std::string& text, const std::string& hypertext = "", - std::function callback = std::function(), int timestamp = 0); + std::function callback = std::function(), const std::string& text_after = "", int timestamp = 0); // Pushes basic_notification with delay. See push_delayed_notification_data. void push_delayed_notification(const NotificationType type, std::function condition_callback, int64_t initial_delay, int64_t delay_interval); // Removes all notifications of type from m_waiting_notifications @@ -203,6 +205,9 @@ public: void set_upload_job_notification_percentage(int id, const std::string& filename, const std::string& host, float percentage); void upload_job_notification_show_canceled(int id, const std::string& filename, const std::string& host); void upload_job_notification_show_error(int id, const std::string& filename, const std::string& host); + // Download App progress + void push_download_progress_notification(const std::string& text, std::function cancel_callback); + void set_download_progress_percentage(float percentage); // slicing progress void init_slicing_progress_notification(std::function cancel_callback); void set_slicing_progress_began(); @@ -437,6 +442,7 @@ private: ProgressBarNotification(const NotificationData& n, NotificationIDProvider& id_provider, wxEvtHandler* evt_handler) : PopNotification(n, id_provider, evt_handler) { } virtual void set_percentage(float percent) { m_percentage = percent; } + float get_percentage() const { return m_percentage; } protected: virtual void init() override; virtual void render_text(ImGuiWrapper& imgui, @@ -459,7 +465,35 @@ private: }; - + class ProgressBarWithCancelNotification : public ProgressBarNotification + { + public: + ProgressBarWithCancelNotification(const NotificationData& n, NotificationIDProvider& id_provider, wxEvtHandler* evt_handler, std::function cancel_callback) + : ProgressBarNotification(n, id_provider, evt_handler) + , m_cancel_callback(cancel_callback) + { + } + void set_percentage(float percent) override { m_percentage = percent; if(m_percentage >= 1.f) m_state = EState::FadingOut; else m_state = EState::NotFading; } + void set_cancel_callback(std::function cancel_callback) { m_cancel_callback = cancel_callback; } + + protected: + void render_close_button(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y) override; + void render_close_button_inner(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y); + void render_cancel_button_inner(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y); + void render_bar(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y) override; + void on_cancel_button(); + + std::function m_cancel_callback; + long m_hover_time{ 0 }; + }; class PrintHostUploadNotification : public ProgressBarNotification { diff --git a/src/slic3r/GUI/OpenGLManager.cpp b/src/slic3r/GUI/OpenGLManager.cpp index 6616cc20d..41a11cff6 100644 --- a/src/slic3r/GUI/OpenGLManager.cpp +++ b/src/slic3r/GUI/OpenGLManager.cpp @@ -233,8 +233,9 @@ OpenGLManager::~OpenGLManager() bool OpenGLManager::init_gl() { if (!m_gl_initialized) { - if (glewInit() != GLEW_OK) { - BOOST_LOG_TRIVIAL(error) << "Unable to init glew library"; + GLenum err = glewInit(); + if (err != GLEW_OK) { + BOOST_LOG_TRIVIAL(error) << "Unable to init glew library: " << glewGetErrorString(err); return false; } m_gl_initialized = true; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a6447745c..4218c9393 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -499,6 +499,7 @@ FreqChangedParams::FreqChangedParams(wxWindow* parent) : std::vector extruders = dlg.get_extruders(); (project_config.option("wiping_volumes_matrix"))->values = std::vector(matrix.begin(), matrix.end()); (project_config.option("wiping_volumes_extruders"))->values = std::vector(extruders.begin(), extruders.end()); + // Update Project dirty state, update application title bar. wxGetApp().plater()->update_project_dirty_from_presets(); wxPostEvent(parent, SimpleEvent(EVT_SCHEDULE_BACKGROUND_PROCESS, parent)); } @@ -1691,6 +1692,7 @@ struct Plater::priv std::string act = wxGetApp().app_config->get(act_key); if (act.empty()) { RichMessageDialog dialog(mainframe, reason + "\n" + format_wxstr(_L("Do you want to save the changes to \"%1%\"?"), suggested_project_name), wxString(SLIC3R_APP_NAME), wxYES_NO | wxCANCEL); + dialog.SetYesNoLabels(_L("Save"), _L("Discard")); dialog.ShowCheckBox(_L("Remember my choice")); res = dialog.ShowModal(); if (res != wxID_CANCEL) @@ -2216,7 +2218,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) bool is_collapsed = wxGetApp().app_config->get("collapsed_sidebar") == "1"; sidebar->collapse(is_collapsed); } -} + } Plater::priv::~priv() { @@ -2351,7 +2353,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } const auto loading = _L("Loading") + dots; - wxProgressDialog dlg(loading, "", 100, find_toplevel_parent(q), wxPD_AUTO_HIDE); + wxProgressDialog progress_dlg(loading, "", 100, find_toplevel_parent(q), wxPD_AUTO_HIDE); wxBusyCursor busy; auto *new_model = (!load_model || one_by_one) ? nullptr : new Slic3r::Model(); @@ -2360,7 +2362,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ int answer_convert_from_meters = wxOK_DEFAULT; int answer_convert_from_imperial_units = wxOK_DEFAULT; - for (size_t i = 0; i < input_files.size(); ++i) { + size_t input_files_size = input_files.size(); + for (size_t i = 0; i < input_files_size; ++i) { #ifdef _WIN32 auto path = input_files[i]; // On Windows, we swap slashes to back slashes, see GH #6803 as read_from_file() does not understand slashes on Windows thus it assignes full path to names of loaded objects. @@ -2370,8 +2373,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ const auto &path = input_files[i]; #endif // _WIN32 const auto filename = path.filename(); - dlg.Update(static_cast(100.0f * static_cast(i) / static_cast(input_files.size())), _L("Loading file") + ": " + from_path(filename)); - dlg.Fit(); + progress_dlg.Update(static_cast(100.0f * static_cast(i) / static_cast(input_files.size())), _L("Loading file") + ": " + from_path(filename)); + progress_dlg.Fit(); const bool type_3mf = std::regex_match(path.string(), pattern_3mf); const bool type_zip_amf = !type_3mf && std::regex_match(path.string(), pattern_zip_amf); @@ -2382,17 +2385,28 @@ std::vector Plater::priv::load_files(const std::vector& input_ bool is_project_file = type_prusa; try { if (type_3mf || type_zip_amf) { +#ifdef __linux__ + // On Linux Constructor of the ProgressDialog calls DisableOtherWindows() function which causes a disabling of all children of the find_toplevel_parent(q) + // And a destructor of the ProgressDialog calls ReenableOtherWindows() function which revert previously disabled children. + // But if printer technology will be changes during project loading, + // then related SLA Print and Materials Settings or FFF Print and Filaments Settings will be unparent from the wxNoteBook + // and that is why they will never be enabled after destruction of the ProgressDialog. + // So, distroy progress_gialog if we are loading project file + if (input_files_size == 1) + progress_dlg.Destroy(); +#endif DynamicPrintConfig config; + PrinterTechnology loaded_printer_technology {ptFFF}; { DynamicPrintConfig config_loaded; ConfigSubstitutionContext config_substitutions{ ForwardCompatibilitySubstitutionRule::Enable }; model = Slic3r::Model::read_from_archive(path.string(), &config_loaded, &config_substitutions, only_if(load_config, Model::LoadAttribute::CheckVersion)); if (load_config && !config_loaded.empty()) { // Based on the printer technology field found in the loaded config, select the base for the config, - PrinterTechnology printer_technology = Preset::printer_technology(config_loaded); + loaded_printer_technology = Preset::printer_technology(config_loaded); // We can't to load SLA project if there is at least one multi-part object on the bed - if (printer_technology == ptSLA) { + if (loaded_printer_technology == ptSLA) { const ModelObjectPtrs& objects = q->model().objects; for (auto object : objects) if (object->volumes.size() > 1) { @@ -2404,7 +2418,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } - config.apply(printer_technology == ptFFF ? + config.apply(loaded_printer_technology == ptFFF ? static_cast(FullPrintConfig::defaults()) : static_cast(SLAFullPrintConfig::defaults())); // and place the loaded config over the base. @@ -2435,7 +2449,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ }; std::vector names; - if (printer_technology == ptFFF) { + if (loaded_printer_technology == ptFFF) { update_selected_preset_visibility(preset_bundle->prints, names); for (const std::string& filament : preset_bundle->filament_presets) { Preset* preset = preset_bundle->filaments.find_preset(filament); @@ -2466,7 +2480,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } - if (printer_technology == ptFFF) + if (loaded_printer_technology == ptFFF) CustomGCode::update_custom_gcode_per_print_z_from_config(model.custom_gcode_per_print_z, &preset_bundle->project_config); // For exporting from the amf/3mf we shouldn't check printer_presets for the containing information about "Print Host upload" @@ -3531,8 +3545,45 @@ void Plater::priv::replace_with_stl() } } +#if ENABLE_RELOAD_FROM_DISK_REWORK +static std::vector> reloadable_volumes(const Model& model, const Selection& selection) +{ + std::vector> ret; + const std::set& selected_volumes_idxs = selection.get_volume_idxs(); + for (unsigned int idx : selected_volumes_idxs) { + const GLVolume& v = *selection.get_volume(idx); + const int o_idx = v.object_idx(); + if (0 <= o_idx && o_idx < int(model.objects.size())) { + const ModelObject* obj = model.objects[o_idx]; + const int v_idx = v.volume_idx(); + if (0 <= v_idx && v_idx < int(obj->volumes.size())) { + const ModelVolume* vol = obj->volumes[v_idx]; + if (!vol->source.is_from_builtin_objects && !vol->source.input_file.empty() && + !fs::path(vol->source.input_file).extension().string().empty()) + ret.push_back({ o_idx, v_idx }); + } + } + } + return ret; +} +#endif // ENABLE_RELOAD_FROM_DISK_REWORK + void Plater::priv::reload_from_disk() { +#if ENABLE_RELOAD_FROM_DISK_REWORK + // collect selected reloadable ModelVolumes + std::vector> selected_volumes = reloadable_volumes(model, get_selection()); + + // nothing to reload, return + if (selected_volumes.empty()) + return; + + std::sort(selected_volumes.begin(), selected_volumes.end(), [](const std::pair& v1, const std::pair& v2) { + return (v1.first < v2.first) || (v1.first == v2.first && v1.second < v2.second); + }); + selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end(), [](const std::pair& v1, const std::pair& v2) { + return (v1.first == v2.first) && (v1.second == v2.second); }), selected_volumes.end()); +#else Plater::TakeSnapshot snapshot(q, _L("Reload from disk")); const Selection& selection = get_selection(); @@ -3565,10 +3616,36 @@ void Plater::priv::reload_from_disk() } std::sort(selected_volumes.begin(), selected_volumes.end()); selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end()), selected_volumes.end()); +#endif // ENABLE_RELOAD_FROM_DISK_REWORK // collects paths of files to load std::vector input_paths; std::vector missing_input_paths; +#if ENABLE_RELOAD_FROM_DISK_REWORK + std::vector> replace_paths; + for (auto [obj_idx, vol_idx] : selected_volumes) { + const ModelObject* object = model.objects[obj_idx]; + const ModelVolume* volume = object->volumes[vol_idx]; + if (fs::exists(volume->source.input_file)) + input_paths.push_back(volume->source.input_file); + else { + // searches the source in the same folder containing the object + bool found = false; + if (!object->input_file.empty()) { + fs::path object_path = fs::path(object->input_file).remove_filename(); + if (!object_path.empty()) { + object_path /= fs::path(volume->source.input_file).filename(); + if (fs::exists(object_path)) { + input_paths.push_back(object_path); + found = true; + } + } + } + if (!found) + missing_input_paths.push_back(volume->source.input_file); + } + } +#else std::vector replace_paths; for (const SelectedVolume& v : selected_volumes) { const ModelObject* object = model.objects[v.object_idx]; @@ -3598,6 +3675,7 @@ void Plater::priv::reload_from_disk() else if (!object->input_file.empty() && volume->is_model_part() && !volume->name.empty() && !volume->source.is_from_builtin_objects) missing_input_paths.push_back(volume->name); } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK std::sort(missing_input_paths.begin(), missing_input_paths.end()); missing_input_paths.erase(std::unique(missing_input_paths.begin(), missing_input_paths.end()), missing_input_paths.end()); @@ -3641,7 +3719,11 @@ void Plater::priv::reload_from_disk() //wxMessageDialog dlg(q, message, wxMessageBoxCaptionStr, wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION); MessageDialog dlg(q, message, wxMessageBoxCaptionStr, wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION); if (dlg.ShowModal() == wxID_YES) - replace_paths.push_back(sel_filename_path); +#if ENABLE_RELOAD_FROM_DISK_REWORK + replace_paths.emplace_back(search, sel_filename_path); +#else + replace_paths.emplace_back(sel_filename_path); +#endif // ENABLE_RELOAD_FROM_DISK_REWORK missing_input_paths.pop_back(); } } @@ -3652,6 +3734,10 @@ void Plater::priv::reload_from_disk() std::sort(replace_paths.begin(), replace_paths.end()); replace_paths.erase(std::unique(replace_paths.begin(), replace_paths.end()), replace_paths.end()); +#if ENABLE_RELOAD_FROM_DISK_REWORK + Plater::TakeSnapshot snapshot(q, _L("Reload from disk")); +#endif // ENABLE_RELOAD_FROM_DISK_REWORK + std::vector fail_list; Busy busy(_L("Reload from:"), q->get_current_canvas3D()->get_wxglcanvas()); @@ -3680,6 +3766,86 @@ void Plater::priv::reload_from_disk() } // update the selected volumes whose source is the current file +#if ENABLE_RELOAD_FROM_DISK_REWORK + for (auto [obj_idx, vol_idx] : selected_volumes) { + ModelObject* old_model_object = model.objects[obj_idx]; + ModelVolume* old_volume = old_model_object->volumes[vol_idx]; + + bool sinking = old_model_object->bounding_box().min.z() < SINKING_Z_THRESHOLD; + + bool has_source = !old_volume->source.input_file.empty() && boost::algorithm::iequals(fs::path(old_volume->source.input_file).filename().string(), fs::path(path).filename().string()); + bool has_name = !old_volume->name.empty() && boost::algorithm::iequals(old_volume->name, fs::path(path).filename().string()); + if (has_source || has_name) { + int new_volume_idx = -1; + int new_object_idx = -1; + bool match_found = false; + // take idxs from the matching volume + if (has_source && old_volume->source.object_idx < int(new_model.objects.size())) { + const ModelObject* obj = new_model.objects[old_volume->source.object_idx]; + if (old_volume->source.volume_idx < int(obj->volumes.size())) { + if (obj->volumes[old_volume->source.volume_idx]->name == old_volume->name) { + new_volume_idx = old_volume->source.volume_idx; + new_object_idx = old_volume->source.object_idx; + match_found = true; + } + } + } + + if (!match_found && has_name) { + // take idxs from the 1st matching volume + for (size_t o = 0; o < new_model.objects.size(); ++o) { + ModelObject* obj = new_model.objects[o]; + bool found = false; + for (size_t v = 0; v < obj->volumes.size(); ++v) { + if (obj->volumes[v]->name == old_volume->name) { + new_volume_idx = (int)v; + new_object_idx = (int)o; + found = true; + break; + } + } + if (found) + break; + } + } + + if (new_object_idx < 0 || int(new_model.objects.size()) <= new_object_idx) { + fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name)); + continue; + } + ModelObject* new_model_object = new_model.objects[new_object_idx]; + if (new_volume_idx < 0 || int(new_model_object->volumes.size()) <= new_volume_idx) { + fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name)); + continue; + } + + old_model_object->add_volume(*new_model_object->volumes[new_volume_idx]); + ModelVolume* new_volume = old_model_object->volumes.back(); + new_volume->set_new_unique_id(); + new_volume->config.apply(old_volume->config); + new_volume->set_type(old_volume->type()); + new_volume->set_material_id(old_volume->material_id()); + new_volume->set_transformation(Geometry::assemble_transform(old_volume->source.transform.get_offset()) * + old_volume->get_transformation().get_matrix(true) * + old_volume->source.transform.get_matrix(true)); + new_volume->translate(new_volume->get_transformation().get_matrix(true) * (new_volume->source.mesh_offset - old_volume->source.mesh_offset)); + new_volume->source.object_idx = old_volume->source.object_idx; + new_volume->source.volume_idx = old_volume->source.volume_idx; + assert(!old_volume->source.is_converted_from_inches || !old_volume->source.is_converted_from_meters); + if (old_volume->source.is_converted_from_inches) + new_volume->convert_from_imperial_units(); + else if (old_volume->source.is_converted_from_meters) + new_volume->convert_from_meters(); + std::swap(old_model_object->volumes[vol_idx], old_model_object->volumes.back()); + old_model_object->delete_volume(old_model_object->volumes.size() - 1); + if (!sinking) + old_model_object->ensure_on_bed(); + old_model_object->sort_volumes(wxGetApp().app_config->get("order_volumes") == "1"); + + sla::reproject_points_and_holes(old_model_object); + } + } +#else for (const SelectedVolume& sel_v : selected_volumes) { ModelObject* old_model_object = model.objects[sel_v.object_idx]; ModelVolume* old_volume = old_model_object->volumes[sel_v.volume_idx]; @@ -3756,10 +3922,19 @@ void Plater::priv::reload_from_disk() sla::reproject_points_and_holes(old_model_object); } } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK } busy.reset(); +#if ENABLE_RELOAD_FROM_DISK_REWORK + for (auto [src, dest] : replace_paths) { + for (auto [obj_idx, vol_idx] : selected_volumes) { + if (boost::algorithm::iequals(model.objects[obj_idx]->volumes[vol_idx]->source.input_file, src.string())) + replace_volume_with_stl(obj_idx, vol_idx, dest, ""); + } + } +#else for (size_t i = 0; i < replace_paths.size(); ++i) { const auto& path = replace_paths[i].string(); for (const SelectedVolume& sel_v : selected_volumes) { @@ -3769,6 +3944,7 @@ void Plater::priv::reload_from_disk() replace_volume_with_stl(sel_v.object_idx, sel_v.volume_idx, path, ""); } } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK if (!fail_list.empty()) { wxString message = _L("Unable to reload:") + "\n"; @@ -4556,6 +4732,13 @@ bool Plater::priv::can_replace_with_stl() const bool Plater::priv::can_reload_from_disk() const { +#if ENABLE_RELOAD_FROM_DISK_REWORK + // collect selected reloadable ModelVolumes + std::vector> selected_volumes = reloadable_volumes(model, get_selection()); + // nothing to reload, return + if (selected_volumes.empty()) + return false; +#else // struct to hold selected ModelVolumes by their indices struct SelectedVolume { @@ -4581,6 +4764,21 @@ bool Plater::priv::can_reload_from_disk() const selected_volumes.push_back({ o_idx, v_idx }); } } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK + +#if ENABLE_RELOAD_FROM_DISK_REWORK + std::sort(selected_volumes.begin(), selected_volumes.end(), [](const std::pair& v1, const std::pair& v2) { + return (v1.first < v2.first) || (v1.first == v2.first && v1.second < v2.second); + }); + selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end(), [](const std::pair& v1, const std::pair& v2) { + return (v1.first == v2.first) && (v1.second == v2.second); }), selected_volumes.end()); + + // collects paths of files to load + std::vector paths; + for (auto [obj_idx, vol_idx] : selected_volumes) { + paths.push_back(model.objects[obj_idx]->volumes[vol_idx]->source.input_file); + } +#else std::sort(selected_volumes.begin(), selected_volumes.end()); selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end()), selected_volumes.end()); @@ -4594,6 +4792,7 @@ bool Plater::priv::can_reload_from_disk() const else if (!object->input_file.empty() && !volume->name.empty() && !volume->source.is_from_builtin_objects) paths.push_back(volume->name); } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK std::sort(paths.begin(), paths.end()); paths.erase(std::unique(paths.begin(), paths.end()), paths.end()); @@ -5072,8 +5271,11 @@ void Plater::new_project() take_snapshot(_L("New Project"), UndoRedo::SnapshotType::ProjectSeparator); Plater::SuppressSnapshots suppress(this); reset(); + // Save the names of active presets and project specific config into ProjectDirtyStateManager. reset_project_dirty_initial_presets(); + // Make a copy of the active presets for detecting changes in preset values. wxGetApp().update_saved_preset_from_current_preset(); + // Update Project dirty state, update application title bar. update_project_dirty_from_presets(); } @@ -5102,7 +5304,11 @@ void Plater::load_project(const wxString& filename) if (! load_files({ into_path(filename) }).empty()) { // At least one file was loaded. p->set_project_filename(filename); + // Save the names of active presets and project specific config into ProjectDirtyStateManager. reset_project_dirty_initial_presets(); + // Make a copy of the active presets for detecting changes in preset values. + wxGetApp().update_saved_preset_from_current_preset(); + // Update Project dirty state, update application title bar. update_project_dirty_from_presets(); } } @@ -5359,17 +5565,22 @@ bool Plater::load_files(const wxArrayString& filenames) if (boost::algorithm::iends_with(filename, ".3mf") || boost::algorithm::iends_with(filename, ".amf")) { LoadType load_type = LoadType::Unknown; if (!model().objects.empty()) { - if (wxGetApp().app_config->get("show_drop_project_dialog") == "1") { - ProjectDropDialog dlg(filename); - if (dlg.ShowModal() == wxID_OK) { - int choice = dlg.get_action(); - load_type = static_cast(choice); - wxGetApp().app_config->set("drop_project_action", std::to_string(choice)); + if ((boost::algorithm::iends_with(filename, ".3mf") && !is_project_3mf(it->string())) || + (boost::algorithm::iends_with(filename, ".amf") && !boost::algorithm::iends_with(filename, ".zip.amf"))) + load_type = LoadType::LoadGeometry; + else { + if (wxGetApp().app_config->get("show_drop_project_dialog") == "1") { + ProjectDropDialog dlg(filename); + if (dlg.ShowModal() == wxID_OK) { + int choice = dlg.get_action(); + load_type = static_cast(choice); + wxGetApp().app_config->set("drop_project_action", std::to_string(choice)); + } } + else + load_type = static_cast(std::clamp(std::stoi(wxGetApp().app_config->get("drop_project_action")), + static_cast(LoadType::OpenProject), static_cast(LoadType::LoadConfig))); } - else - load_type = static_cast(std::clamp(std::stoi(wxGetApp().app_config->get("drop_project_action")), - static_cast(LoadType::OpenProject), static_cast(LoadType::LoadConfig))); } else load_type = LoadType::OpenProject; @@ -5709,11 +5920,17 @@ void Plater::export_gcode(bool prefer_removable) fs::path output_path; { - std::string ext = default_output_file.extension().string(); +#if !ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR + std::string ext = default_output_file.extension().string(); +#endif // !ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR wxFileDialog dlg(this, (printer_technology() == ptFFF) ? _L("Save G-code file as:") : _L("Save SL1 / SL1S file as:"), start_dir, from_path(default_output_file.filename()), +#if ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR + GUI::file_wildcards((printer_technology() == ptFFF) ? FT_GCODE : FT_SL1), +#else GUI::file_wildcards((printer_technology() == ptFFF) ? FT_GCODE : FT_SL1, ext), +#endif // ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); if (dlg.ShowModal() == wxID_OK) { @@ -5782,7 +5999,6 @@ void Plater::export_stl_obj(bool extended, bool selection_only) } else if (0 <= instance_id && instance_id < int(mo.instances.size())) mesh.transform(mo.instances[instance_id]->get_matrix(), true); - return mesh; }; @@ -6054,7 +6270,7 @@ void Plater::reslice_SLA_hollowing(const ModelObject &object, bool postpone_erro reslice_SLA_until_step(slaposDrillHoles, object, postpone_error_messages); } -void Plater::reslice_SLA_until_step(SLAPrintObjectStep step, const ModelObject &object, bool postpone_error_messages) +void Plater::reslice_until_step_inner(int step, const ModelObject &object, bool postpone_error_messages) { //FIXME Don't reslice if export of G-code or sending to OctoPrint is running. // bitmask of UpdateBackgroundProcessReturnState @@ -6080,6 +6296,16 @@ void Plater::reslice_SLA_until_step(SLAPrintObjectStep step, const ModelObject & this->p->restart_background_process(state | priv::UPDATE_BACKGROUND_PROCESS_FORCE_RESTART); } +void Plater::reslice_FFF_until_step(PrintObjectStep step, const ModelObject &object, bool postpone_error_messages) +{ + this->reslice_until_step_inner(PrintObjectStep(step), object, postpone_error_messages); +} + +void Plater::reslice_SLA_until_step(SLAPrintObjectStep step, const ModelObject &object, bool postpone_error_messages) +{ + this->reslice_until_step_inner(SLAPrintObjectStep(step), object, postpone_error_messages); +} + void Plater::send_gcode() { // if physical_printer is selected, send gcode for this printer diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index baa54480c..124725018 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -32,6 +32,7 @@ using ModelObjectCutAttributes = enum_bitmask; class ModelInstance; class Print; class SLAPrint; +enum PrintObjectStep : unsigned int; enum SLAPrintObjectStep : unsigned int; enum class ConversionType : int; @@ -265,6 +266,7 @@ public: bool has_toolpaths_to_export() const; void export_toolpaths_to_obj() const; void reslice(); + void reslice_FFF_until_step(PrintObjectStep step, const ModelObject &object, bool postpone_error_messages = false); void reslice_SLA_supports(const ModelObject &object, bool postpone_error_messages = false); void reslice_SLA_hollowing(const ModelObject &object, bool postpone_error_messages = false); void reslice_SLA_until_step(SLAPrintObjectStep step, const ModelObject &object, bool postpone_error_messages = false); @@ -477,6 +479,8 @@ public: static void show_illegal_characters_warning(wxWindow* parent); private: + void reslice_until_step_inner(int step, const ModelObject &object, bool postpone_error_messages); + struct priv; std::unique_ptr p; diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 2af008a52..75c5c116f 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -790,10 +790,10 @@ void PreferencesDialog::create_settings_mode_widget() } std::string opt_key = "settings_layout_mode"; - m_blinkers[opt_key] = new BlinkingBitmap(this); + m_blinkers[opt_key] = new BlinkingBitmap(parent); auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(m_blinkers[opt_key], 0, wxALIGN_CENTER_VERTICAL); + sizer->Add(m_blinkers[opt_key], 0, wxRIGHT, 2); sizer->Add(stb_sizer, 1, wxALIGN_CENTER_VERTICAL); m_optgroup_gui->sizer->Add(sizer, 0, wxEXPAND | wxTOP, em_unit()); @@ -810,13 +810,13 @@ void PreferencesDialog::create_settings_text_color_widget() if (!wxOSX) stb->SetBackgroundStyle(wxBG_STYLE_PAINT); std::string opt_key = "text_colors"; - m_blinkers[opt_key] = new BlinkingBitmap(this); + m_blinkers[opt_key] = new BlinkingBitmap(parent); wxSizer* stb_sizer = new wxStaticBoxSizer(stb, wxVERTICAL); ButtonsDescription::FillSizerWithTextColorDescriptions(stb_sizer, parent, &m_sys_colour, &m_mod_colour); auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(m_blinkers[opt_key], 0, wxALIGN_CENTER_VERTICAL); + sizer->Add(m_blinkers[opt_key], 0, wxRIGHT, 2); sizer->Add(stb_sizer, 1, wxALIGN_CENTER_VERTICAL); m_optgroup_gui->sizer->Add(sizer, 0, wxEXPAND | wxTOP, em_unit()); diff --git a/src/slic3r/GUI/ProjectDirtyStateManager.cpp b/src/slic3r/GUI/ProjectDirtyStateManager.cpp index c79ac0c39..89c13b640 100644 --- a/src/slic3r/GUI/ProjectDirtyStateManager.cpp +++ b/src/slic3r/GUI/ProjectDirtyStateManager.cpp @@ -17,9 +17,11 @@ namespace GUI { void ProjectDirtyStateManager::update_from_undo_redo_stack(bool dirty) { - m_plater_dirty = dirty; - if (const Plater *plater = wxGetApp().plater(); plater && wxGetApp().initialized()) - wxGetApp().mainframe->update_title(); + if (m_plater_dirty != dirty) { + m_plater_dirty = dirty; + if (const Plater *plater = wxGetApp().plater(); plater && wxGetApp().initialized()) + wxGetApp().mainframe->update_title(); + } } void ProjectDirtyStateManager::update_from_presets() @@ -27,11 +29,11 @@ void ProjectDirtyStateManager::update_from_presets() m_presets_dirty = false; // check switching of the presets only for exist/loaded project, but not for new GUI_App &app = wxGetApp(); - if (!app.plater()->get_project_filename().IsEmpty()) { - for (const auto& [type, name] : app.get_selected_presets()) - m_presets_dirty |= !m_initial_presets[type].empty() && m_initial_presets[type] != name; + bool has_project = ! app.plater()->get_project_filename().IsEmpty(); + for (const PresetCollection *preset_collection : app.get_active_preset_collections()) { + auto type = preset_collection->type(); + m_presets_dirty |= (has_project && !m_initial_presets[type].empty() && m_initial_presets[type] != preset_collection->get_selected_preset_name()) || preset_collection->saved_is_dirty(); } - m_presets_dirty |= app.has_unsaved_preset_changes(); m_project_config_dirty = m_initial_project_config != app.preset_bundle->project_config; app.mainframe->update_title(); } @@ -49,8 +51,8 @@ void ProjectDirtyStateManager::reset_initial_presets() { m_initial_presets.fill(std::string{}); GUI_App &app = wxGetApp(); - for (const auto& [type, name] : app.get_selected_presets()) - m_initial_presets[type] = name; + for (const PresetCollection *preset_collection : app.get_active_preset_collections()) + m_initial_presets[preset_collection->type()] = preset_collection->get_selected_preset_name(); m_initial_project_config = app.preset_bundle->project_config; } diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index c680f6e09..7ccc6fc25 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -115,7 +115,6 @@ Selection::Selection() , m_type(Empty) , m_valid(false) , m_scale_factor(1.0f) - , m_dragging(false) { this->set_bounding_boxes_dirty(); } @@ -679,12 +678,11 @@ const BoundingBoxf3& Selection::get_scaled_instance_bounding_box() const return *m_scaled_instance_bounding_box; } -void Selection::start_dragging() +void Selection::setup_cache() { if (!m_valid) return; - m_dragging = true; set_caches(); } @@ -955,12 +953,12 @@ void Selection::scale_to_fit_print_volume(const BuildVolume& volume) type.set_joint(); // apply scale - start_dragging(); + setup_cache(); scale(s * Vec3d::Ones(), type); wxGetApp().plater()->canvas3D()->do_scale(""); // avoid storing another snapshot // center selection on print bed - start_dragging(); + setup_cache(); offset.z() = -get_bounding_box().min.z(); translate(offset); wxGetApp().plater()->canvas3D()->do_move(""); // avoid storing another snapshot @@ -1261,12 +1259,12 @@ void Selection::render(float scale_factor) return; m_scale_factor = scale_factor; -#if ENABLE_GLBEGIN_GLEND_REMOVAL + // render cumulative bounding box of selected volumes +#if ENABLE_LEGACY_OPENGL_REMOVAL render_bounding_box(get_bounding_box(), ColorRGB::WHITE()); #else - // render cumulative bounding box of selected volumes render_selected_volumes(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL render_synchronized_volumes(); } @@ -1276,27 +1274,43 @@ void Selection::render_center(bool gizmo_is_dragging) if (!m_valid || is_empty()) return; - const Vec3d center = gizmo_is_dragging ? m_cache.dragging_center : get_bounding_box().center(); - - glsafe(::glDisable(GL_DEPTH_TEST)); - - glsafe(::glPushMatrix()); - glsafe(::glTranslated(center.x(), center.y(), center.z())); - -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader == nullptr) return; shader->start_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL - m_vbo_sphere.set_color(-1, ColorRGBA::WHITE()); - m_vbo_sphere.render(); -#if ENABLE_GLBEGIN_GLEND_REMOVAL - shader->stop_using(); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + const Vec3d center = gizmo_is_dragging ? m_cache.dragging_center : get_bounding_box().center(); + + glsafe(::glDisable(GL_DEPTH_TEST)); + +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + Transform3d view_model_matrix = camera.get_view_matrix() * Geometry::assemble_transform(center); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#else + glsafe(::glPushMatrix()); + glsafe(::glTranslated(center.x(), center.y(), center.z())); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + +#if ENABLE_LEGACY_OPENGL_REMOVAL + m_vbo_sphere.set_color(ColorRGBA::WHITE()); +#else + m_vbo_sphere.set_color(-1, ColorRGBA::WHITE()); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + m_vbo_sphere.render(); + +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glPopMatrix()); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES + +#if ENABLE_LEGACY_OPENGL_REMOVAL + shader->stop_using(); +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } #endif // ENABLE_RENDER_SELECTION_CENTER @@ -1305,7 +1319,7 @@ void Selection::render_sidebar_hints(const std::string& sidebar_field) if (sidebar_field.empty()) return; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader(boost::starts_with(sidebar_field, "layer") ? "flat" : "gouraud_light"); if (shader == nullptr) return; @@ -1322,19 +1336,31 @@ void Selection::render_sidebar_hints(const std::string& sidebar_field) shader->start_using(); glsafe(::glClear(GL_DEPTH_BUFFER_BIT)); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glEnable(GL_DEPTH_TEST)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d base_matrix = Geometry::assemble_transform(get_bounding_box().center()); + Transform3d orient_matrix = Transform3d::Identity(); +#else glsafe(::glPushMatrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (!boost::starts_with(sidebar_field, "layer")) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + shader->set_uniform("emission_factor", 0.05f); +#else const Vec3d& center = get_bounding_box().center(); - +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (is_single_full_instance() && !wxGetApp().obj_manipul()->get_world_coordinates()) { +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glTranslated(center.x(), center.y(), center.z())); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES if (!boost::starts_with(sidebar_field, "position")) { +#if !ENABLE_GL_SHADERS_ATTRIBUTES Transform3d orient_matrix = Transform3d::Identity(); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES if (boost::starts_with(sidebar_field, "scale")) orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); else if (boost::starts_with(sidebar_field, "rotation")) { @@ -1342,36 +1368,60 @@ void Selection::render_sidebar_hints(const std::string& sidebar_field) orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); else if (boost::ends_with(sidebar_field, "y")) { const Vec3d& rotation = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_rotation(); - if (rotation(0) == 0.0) + if (rotation.x() == 0.0) orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); else - orient_matrix.rotate(Eigen::AngleAxisd(rotation(2), Vec3d::UnitZ())); + orient_matrix.rotate(Eigen::AngleAxisd(rotation.z(), Vec3d::UnitZ())); } } - +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glMultMatrixd(orient_matrix.data())); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES } - } else if (is_single_volume() || is_single_modifier()) { + } + else if (is_single_volume() || is_single_modifier()) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); +#else glsafe(::glTranslated(center.x(), center.y(), center.z())); Transform3d orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (!boost::starts_with(sidebar_field, "position")) orient_matrix = orient_matrix * (*m_volumes)[*m_list.begin()]->get_volume_transformation().get_matrix(true, false, true, true); +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glMultMatrixd(orient_matrix.data())); - } else { - glsafe(::glTranslated(center(0), center(1), center(2))); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES + } + else { +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (requires_local_axes()) + orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); +#else + glsafe(::glTranslated(center.x(), center.y(), center.z())); if (requires_local_axes()) { const Transform3d orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); glsafe(::glMultMatrixd(orient_matrix.data())); } +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL if (!boost::starts_with(sidebar_field, "layer")) glsafe(::glClear(GL_DEPTH_BUFFER_BIT)); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + if (boost::starts_with(sidebar_field, "position")) + render_sidebar_position_hints(sidebar_field, *shader, base_matrix * orient_matrix); + else if (boost::starts_with(sidebar_field, "rotation")) + render_sidebar_rotation_hints(sidebar_field, *shader, base_matrix * orient_matrix); + else if (boost::starts_with(sidebar_field, "scale") || boost::starts_with(sidebar_field, "size")) + render_sidebar_scale_hints(sidebar_field, *shader, base_matrix * orient_matrix); + else if (boost::starts_with(sidebar_field, "layer")) + render_sidebar_layers_hints(sidebar_field, *shader); +#else if (boost::starts_with(sidebar_field, "position")) render_sidebar_position_hints(sidebar_field); else if (boost::starts_with(sidebar_field, "rotation")) @@ -1382,16 +1432,17 @@ void Selection::render_sidebar_hints(const std::string& sidebar_field) render_sidebar_layers_hints(sidebar_field); glsafe(::glPopMatrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL if (!boost::starts_with(sidebar_field, "layer")) -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL shader->stop_using(); } bool Selection::requires_local_axes() const { - return (m_mode == Volume) && is_from_single_instance(); + return m_mode == Volume && is_from_single_instance(); } void Selection::copy_to_clipboard() @@ -1401,8 +1452,7 @@ void Selection::copy_to_clipboard() m_clipboard.reset(); - for (const ObjectIdxsToInstanceIdxsMap::value_type& object : m_cache.content) - { + for (const ObjectIdxsToInstanceIdxsMap::value_type& object : m_cache.content) { ModelObject* src_object = m_model->objects[object.first]; ModelObject* dst_object = m_clipboard.add_object(); dst_object->name = src_object->name; @@ -1415,26 +1465,22 @@ void Selection::copy_to_clipboard() dst_object->layer_height_profile.assign(src_object->layer_height_profile); dst_object->origin_translation = src_object->origin_translation; - for (int i : object.second) - { + for (int i : object.second) { dst_object->add_instance(*src_object->instances[i]); } - for (unsigned int i : m_list) - { + for (unsigned int i : m_list) { // Copy the ModelVolumes only for the selected GLVolumes of the 1st selected instance. const GLVolume* volume = (*m_volumes)[i]; - if ((volume->object_idx() == object.first) && (volume->instance_idx() == *object.second.begin())) - { + if (volume->object_idx() == object.first && volume->instance_idx() == *object.second.begin()) { int volume_idx = volume->volume_idx(); - if ((0 <= volume_idx) && (volume_idx < (int)src_object->volumes.size())) - { + if (0 <= volume_idx && volume_idx < (int)src_object->volumes.size()) { ModelVolume* src_volume = src_object->volumes[volume_idx]; ModelVolume* dst_volume = dst_object->add_volume(*src_volume); dst_volume->set_new_unique_id(); - } else { - assert(false); } + else + assert(false); } } } @@ -1827,22 +1873,22 @@ void Selection::do_remove_object(unsigned int object_idx) } } -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL void Selection::render_selected_volumes() const { float color[3] = { 1.0f, 1.0f, 1.0f }; render_bounding_box(get_bounding_box(), color); } -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL void Selection::render_synchronized_volumes() { if (m_mode == Instance) return; -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL float color[3] = { 1.0f, 1.0f, 0.0f }; -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL for (unsigned int i : m_list) { const GLVolume& volume = *(*m_volumes)[i]; @@ -1856,16 +1902,16 @@ void Selection::render_synchronized_volumes() if (v.object_idx() != object_idx || v.volume_idx() != volume_idx) continue; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL render_bounding_box(v.transformed_convex_hull_bounding_box(), ColorRGB::YELLOW()); #else render_bounding_box(v.transformed_convex_hull_bounding_box(), color); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } } } -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void Selection::render_bounding_box(const BoundingBoxf3& box, const ColorRGB& color) { #else @@ -1881,9 +1927,9 @@ void Selection::render_bounding_box(const BoundingBoxf3 & box, float* color) con glsafe(::glEnable(GL_DEPTH_TEST)); glsafe(::glColor3fv(color)); glsafe(::glLineWidth(2.0f * m_scale_factor)); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL const BoundingBoxf3& curr_box = m_box.get_bounding_box(); if (!m_box.is_initialized() || !is_approx(box.min, curr_box.min) || !is_approx(box.max, curr_box.max)) { m_box.reset(); @@ -1893,9 +1939,9 @@ void Selection::render_bounding_box(const BoundingBoxf3 & box, float* color) con const Vec3f size = 0.2f * box.size().cast(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(48 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(48 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(48); + init_data.reserve_indices(48); // vertices init_data.add_vertex(Vec3f(b_min.x(), b_min.y(), b_min.z())); @@ -1955,8 +2001,8 @@ void Selection::render_bounding_box(const BoundingBoxf3 & box, float* color) con init_data.add_vertex(Vec3f(b_min.x(), b_max.y(), b_max.z() - size.z())); // indices - for (unsigned short i = 0; i < 48; ++i) { - init_data.add_ushort_index(i); + for (unsigned int i = 0; i < 48; ++i) { + init_data.add_index(i); } m_box.init_from(std::move(init_data)); @@ -1971,6 +2017,11 @@ void Selection::render_bounding_box(const BoundingBoxf3 & box, float* color) con return; shader->start_using(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_box.set_color(to_rgba(color)); m_box.render(); shader->stop_using(); @@ -2010,7 +2061,7 @@ void Selection::render_bounding_box(const BoundingBoxf3 & box, float* color) con ::glVertex3f(b_min(0), b_max(1), b_max(2)); ::glVertex3f(b_min(0), b_max(1), b_max(2) - size(2)); glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } static ColorRGBA get_color(Axis axis) @@ -2018,20 +2069,46 @@ static ColorRGBA get_color(Axis axis) return AXES_COLOR[axis]; } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Selection::render_sidebar_position_hints(const std::string& sidebar_field, GLShaderProgram& shader, const Transform3d& matrix) +#else void Selection::render_sidebar_position_hints(const std::string& sidebar_field) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d view_matrix = camera.get_view_matrix() * matrix; + shader.set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + if (boost::ends_with(sidebar_field, "x")) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d view_model_matrix = view_matrix * Geometry::assemble_transform(Vec3d::Zero(), -0.5 * PI * Vec3d::UnitZ()); + shader.set_uniform("view_model_matrix", view_model_matrix); + shader.set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glRotated(-90.0, 0.0, 0.0, 1.0)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_arrow.set_color(get_color(X)); m_arrow.render(); } else if (boost::ends_with(sidebar_field, "y")) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + shader.set_uniform("view_model_matrix", view_matrix); + shader.set_uniform("normal_matrix", (Matrix3d)view_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_arrow.set_color(get_color(Y)); m_arrow.render(); } else if (boost::ends_with(sidebar_field, "z")) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Transform3d view_model_matrix = view_matrix * Geometry::assemble_transform(Vec3d::Zero(), 0.5 * PI * Vec3d::UnitX()); + shader.set_uniform("view_model_matrix", view_model_matrix); + shader.set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glRotated(90.0, 1.0, 0.0, 0.0)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_arrow.set_color(get_color(Z)); m_arrow.render(); } @@ -2050,31 +2127,68 @@ void Selection::render_sidebar_position_hints(const std::string& sidebar_field) m_arrow.set_color(-1, get_color(Z)); m_arrow.render(); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Selection::render_sidebar_rotation_hints(const std::string& sidebar_field, GLShaderProgram& shader, const Transform3d& matrix) +#else void Selection::render_sidebar_rotation_hints(const std::string& sidebar_field) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + auto render_sidebar_rotation_hint = [this](GLShaderProgram& shader, const Transform3d& matrix) { + Transform3d view_model_matrix = matrix; + shader.set_uniform("view_model_matrix", view_model_matrix); + shader.set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); + m_curved_arrow.render(); + view_model_matrix = matrix * Geometry::assemble_transform(Vec3d::Zero(), PI * Vec3d::UnitZ()); + shader.set_uniform("view_model_matrix", view_model_matrix); + shader.set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); + m_curved_arrow.render(); + }; + + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d view_matrix = camera.get_view_matrix() * matrix; + shader.set_uniform("projection_matrix", camera.get_projection_matrix()); +#else auto render_sidebar_rotation_hint = [this]() { m_curved_arrow.render(); glsafe(::glRotated(180.0, 0.0, 0.0, 1.0)); m_curved_arrow.render(); }; +#endif // ENABLE_GL_SHADERS_ATTRIBUTES if (boost::ends_with(sidebar_field, "x")) { +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glRotated(90.0, 0.0, 1.0, 0.0)); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES m_curved_arrow.set_color(get_color(X)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_sidebar_rotation_hint(shader, view_matrix * Geometry::assemble_transform(Vec3d::Zero(), 0.5 * PI * Vec3d::UnitY())); +#else render_sidebar_rotation_hint(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } else if (boost::ends_with(sidebar_field, "y")) { +#if !ENABLE_GL_SHADERS_ATTRIBUTES glsafe(::glRotated(-90.0, 1.0, 0.0, 0.0)); +#endif // !ENABLE_GL_SHADERS_ATTRIBUTES m_curved_arrow.set_color(get_color(Y)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_sidebar_rotation_hint(shader, view_matrix * Geometry::assemble_transform(Vec3d::Zero(), -0.5 * PI * Vec3d::UnitX())); +#else render_sidebar_rotation_hint(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } else if (boost::ends_with(sidebar_field, "z")) { m_curved_arrow.set_color(get_color(Z)); +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_sidebar_rotation_hint(shader, view_matrix); +#else render_sidebar_rotation_hint(); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } #else auto render_sidebar_rotation_hint = [this]() { @@ -2097,53 +2211,96 @@ void Selection::render_sidebar_rotation_hints(const std::string& sidebar_field) m_curved_arrow.set_color(-1, get_color(Z)); render_sidebar_rotation_hint(); } -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Selection::render_sidebar_scale_hints(const std::string& sidebar_field, GLShaderProgram& shader, const Transform3d& matrix) +#else void Selection::render_sidebar_scale_hints(const std::string& sidebar_field) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { - bool uniform_scale = requires_uniform_scale() || wxGetApp().obj_manipul()->get_uniform_scaling(); + const bool uniform_scale = requires_uniform_scale() || wxGetApp().obj_manipul()->get_uniform_scaling(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + auto render_sidebar_scale_hint = [this, uniform_scale](Axis axis, GLShaderProgram& shader, const Transform3d& matrix) { +#else auto render_sidebar_scale_hint = [this, uniform_scale](Axis axis) { -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_GL_SHADERS_ATTRIBUTES +#if ENABLE_LEGACY_OPENGL_REMOVAL m_arrow.set_color(uniform_scale ? UNIFORM_SCALE_COLOR : get_color(axis)); #else m_arrow.set_color(-1, uniform_scale ? UNIFORM_SCALE_COLOR : get_color(axis)); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + +#if ENABLE_GL_SHADERS_ATTRIBUTES + Transform3d view_model_matrix = matrix * Geometry::assemble_transform(5.0 * Vec3d::UnitY()); + shader.set_uniform("view_model_matrix", view_model_matrix); + shader.set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else GLShaderProgram* shader = wxGetApp().get_current_shader(); if (shader != nullptr) shader->set_uniform("emission_factor", 0.0f); glsafe(::glTranslated(0.0, 5.0, 0.0)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_arrow.render(); +#if ENABLE_GL_SHADERS_ATTRIBUTES + view_model_matrix = matrix * Geometry::assemble_transform(-5.0 * Vec3d::UnitY(), PI * Vec3d::UnitZ()); + shader.set_uniform("view_model_matrix", view_model_matrix); + shader.set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose()); +#else glsafe(::glTranslated(0.0, -10.0, 0.0)); glsafe(::glRotated(180.0, 0.0, 0.0, 1.0)); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES m_arrow.render(); }; +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + const Transform3d view_matrix = camera.get_view_matrix() * matrix; + shader.set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + if (boost::ends_with(sidebar_field, "x") || uniform_scale) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_sidebar_scale_hint(X, shader, view_matrix * Geometry::assemble_transform(Vec3d::Zero(), -0.5 * PI * Vec3d::UnitZ())); +#else glsafe(::glPushMatrix()); glsafe(::glRotated(-90.0, 0.0, 0.0, 1.0)); render_sidebar_scale_hint(X); glsafe(::glPopMatrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } if (boost::ends_with(sidebar_field, "y") || uniform_scale) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_sidebar_scale_hint(Y, shader, view_matrix); +#else glsafe(::glPushMatrix()); render_sidebar_scale_hint(Y); glsafe(::glPopMatrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } if (boost::ends_with(sidebar_field, "z") || uniform_scale) { +#if ENABLE_GL_SHADERS_ATTRIBUTES + render_sidebar_scale_hint(Z, shader, view_matrix * Geometry::assemble_transform(Vec3d::Zero(), 0.5 * PI * Vec3d::UnitX())); +#else glsafe(::glPushMatrix()); glsafe(::glRotated(90.0, 1.0, 0.0, 0.0)); render_sidebar_scale_hint(Z); glsafe(::glPopMatrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES } } +#if ENABLE_GL_SHADERS_ATTRIBUTES +void Selection::render_sidebar_layers_hints(const std::string& sidebar_field, GLShaderProgram& shader) +#else void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) +#endif // ENABLE_GL_SHADERS_ATTRIBUTES { static const float Margin = 10.0f; @@ -2174,37 +2331,37 @@ void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) const BoundingBoxf3& box = get_bounding_box(); -#if !ENABLE_GLBEGIN_GLEND_REMOVAL +#if !ENABLE_LEGACY_OPENGL_REMOVAL const float min_x = float(box.min.x()) - Margin; const float max_x = float(box.max.x()) + Margin; const float min_y = float(box.min.y()) - Margin; const float max_y = float(box.max.y()) + Margin; -#endif // !ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // !ENABLE_LEGACY_OPENGL_REMOVAL // view dependend order of rendering to keep correct transparency const bool camera_on_top = wxGetApp().plater()->get_camera().is_looking_downward(); const float z1 = camera_on_top ? min_z : max_z; const float z2 = camera_on_top ? max_z : min_z; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL const Vec3f p1 = { float(box.min.x()) - Margin, float(box.min.y()) - Margin, z1 }; const Vec3f p2 = { float(box.max.x()) + Margin, float(box.max.y()) + Margin, z2 }; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glEnable(GL_DEPTH_TEST)); glsafe(::glDisable(GL_CULL_FACE)); glsafe(::glEnable(GL_BLEND)); glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL if (!m_planes.models[0].is_initialized() || !is_approx(m_planes.check_points[0], p1)) { m_planes.check_points[0] = p1; m_planes.models[0].reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(4 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(6 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(4); + init_data.reserve_indices(6); // vertices init_data.add_vertex(Vec3f(p1.x(), p1.y(), z1)); @@ -2213,8 +2370,8 @@ void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) init_data.add_vertex(Vec3f(p1.x(), p2.y(), z1)); // indices - init_data.add_ushort_triangle(0, 1, 2); - init_data.add_ushort_triangle(2, 3, 0); + init_data.add_triangle(0, 1, 2); + init_data.add_triangle(2, 3, 0); m_planes.models[0].init_from(std::move(init_data)); } @@ -2224,9 +2381,9 @@ void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) m_planes.models[1].reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; - init_data.vertices.reserve(4 * GLModel::Geometry::vertex_stride_floats(init_data.format)); - init_data.indices.reserve(6 * GLModel::Geometry::index_stride_bytes(init_data.format)); + init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3 }; + init_data.reserve_vertices(4); + init_data.reserve_indices(6); // vertices init_data.add_vertex(Vec3f(p1.x(), p1.y(), z2)); @@ -2235,12 +2392,18 @@ void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) init_data.add_vertex(Vec3f(p1.x(), p2.y(), z2)); // indices - init_data.add_ushort_triangle(0, 1, 2); - init_data.add_ushort_triangle(2, 3, 0); + init_data.add_triangle(0, 1, 2); + init_data.add_triangle(2, 3, 0); m_planes.models[1].init_from(std::move(init_data)); } +#if ENABLE_GL_SHADERS_ATTRIBUTES + const Camera& camera = wxGetApp().plater()->get_camera(); + shader.set_uniform("view_model_matrix", camera.get_view_matrix()); + shader.set_uniform("projection_matrix", camera.get_projection_matrix()); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES + m_planes.models[0].set_color((camera_on_top && type == 1) || (!camera_on_top && type == 2) ? SOLID_PLANE_COLOR : TRANSPARENT_PLANE_COLOR); m_planes.models[0].render(); m_planes.models[1].set_color((camera_on_top && type == 2) || (!camera_on_top && type == 1) ? SOLID_PLANE_COLOR : TRANSPARENT_PLANE_COLOR); @@ -2261,7 +2424,7 @@ void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) ::glVertex3f(max_x, max_y, z2); ::glVertex3f(min_x, max_y, z2); glsafe(::glEnd()); -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glEnable(GL_CULL_FACE)); glsafe(::glDisable(GL_BLEND)); diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp index 72865f408..c9e55cf82 100644 --- a/src/slic3r/GUI/Selection.hpp +++ b/src/slic3r/GUI/Selection.hpp @@ -218,7 +218,7 @@ private: GLModel m_arrow; GLModel m_curved_arrow; -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL GLModel m_box; struct Planes { @@ -226,10 +226,9 @@ private: std::array models; }; Planes m_planes; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL float m_scale_factor; - bool m_dragging; public: Selection(); @@ -322,9 +321,7 @@ public: const BoundingBoxf3& get_unscaled_instance_bounding_box() const; const BoundingBoxf3& get_scaled_instance_bounding_box() const; - void start_dragging(); - void stop_dragging() { m_dragging = false; } - bool is_dragging() const { return m_dragging; } + void setup_cache(); void translate(const Vec3d& displacement, bool local = false); void rotate(const Vec3d& rotation, TransformationType transformation_type); @@ -373,16 +370,23 @@ private: void do_remove_object(unsigned int object_idx); void set_bounding_boxes_dirty() { m_bounding_box.reset(); m_unscaled_instance_bounding_box.reset(); m_scaled_instance_bounding_box.reset(); } void render_synchronized_volumes(); -#if ENABLE_GLBEGIN_GLEND_REMOVAL +#if ENABLE_LEGACY_OPENGL_REMOVAL void render_bounding_box(const BoundingBoxf3& box, const ColorRGB& color); #else void render_selected_volumes() const; void render_bounding_box(const BoundingBoxf3& box, float* color) const; -#endif // ENABLE_GLBEGIN_GLEND_REMOVAL +#endif // ENABLE_LEGACY_OPENGL_REMOVAL +#if ENABLE_GL_SHADERS_ATTRIBUTES + void render_sidebar_position_hints(const std::string& sidebar_field, GLShaderProgram& shader, const Transform3d& matrix); + void render_sidebar_rotation_hints(const std::string& sidebar_field, GLShaderProgram& shader, const Transform3d& matrix); + void render_sidebar_scale_hints(const std::string& sidebar_field, GLShaderProgram& shader, const Transform3d& matrix); + void render_sidebar_layers_hints(const std::string& sidebar_field, GLShaderProgram& shader); +#else void render_sidebar_position_hints(const std::string& sidebar_field); void render_sidebar_rotation_hints(const std::string& sidebar_field); void render_sidebar_scale_hints(const std::string& sidebar_field); void render_sidebar_layers_hints(const std::string& sidebar_field); +#endif // ENABLE_GL_SHADERS_ATTRIBUTES public: enum SyncRotationType { diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 4f19ad806..dc254d1af 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1247,6 +1247,7 @@ void Tab::on_presets_changed() // to avoid needless preset loading from update() function m_dependent_tabs.clear(); + // Update Project dirty state, update application title bar. wxGetApp().plater()->update_project_dirty_from_presets(); } @@ -2324,6 +2325,7 @@ void TabPrinter::build_fff() option = optgroup->get_option("thumbnails"); option.opt.full_width = true; optgroup->append_single_option_line(option); + optgroup->append_single_option_line("thumbnails_format"); optgroup->append_single_option_line("silent_mode"); optgroup->append_single_option_line("remaining_times"); @@ -2517,6 +2519,11 @@ void TabPrinter::build_sla() optgroup->append_single_option_line("min_initial_exposure_time"); optgroup->append_single_option_line("max_initial_exposure_time"); + + optgroup = page->new_optgroup(L("Output")); + optgroup->append_single_option_line("sla_archive_format"); + optgroup->append_single_option_line("sla_output_precision"); + build_print_host_upload_group(page.get()); const int notes_field_height = 25; // 250 @@ -4106,7 +4113,10 @@ wxSizer* TabPrint::create_manage_substitution_widget(wxWindow* parent) }); create_btn(&m_del_all_substitutions_btn, _L("Delete all"), "cross"); - m_del_all_substitutions_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent e) { + m_del_all_substitutions_btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent e) { + if (MessageDialog(parent, _L("Are you sure you want to delete all substitutions?"), SLIC3R_APP_NAME, wxYES_NO | wxCANCEL | wxICON_QUESTION). + ShowModal() != wxID_YES) + return; m_subst_manager.delete_all(); m_del_all_substitutions_btn->Hide(); }); diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 7bdbcdb82..e9a4cee20 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -371,6 +371,7 @@ public: DynamicPrintConfig* get_config() { return m_config; } PresetCollection* get_presets() { return m_presets; } + const PresetCollection* get_presets() const { return m_presets; } void on_value_change(const std::string& opt_key, const boost::any& value); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index d49b4b1d3..b3b0c15b4 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -656,6 +656,7 @@ void DiffViewCtrl::Clear() { model->Clear(); m_items_map.clear(); + m_has_long_strings = false; } wxString DiffViewCtrl::get_short_string(wxString full_string) @@ -1030,7 +1031,7 @@ bool UnsavedChangesDialog::save(PresetCollection* dependent_presets, bool show_s wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill = false) { const ConfigOptionDef& def = config.def()->options.at(opt_key); - const std::vector& names = def.enum_labels;//ConfigOptionEnum::get_enum_names(); + const std::vector& names = def.enum_labels.empty() ? def.enum_values : def.enum_labels; int val = config.option(opt_key)->getInt(); // Each infill doesn't use all list of infill declared in PrintConfig.hpp. @@ -1523,8 +1524,8 @@ DiffPresetDialog::DiffPresetDialog(MainFrame* mainframe) topSizer->Add(m_top_info_line, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 2 * border); topSizer->Add(presets_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, border); topSizer->Add(m_show_all_presets, 0, wxEXPAND | wxALL, border); - topSizer->Add(m_bottom_info_line, 0, wxEXPAND | wxALL, 2 * border); topSizer->Add(m_tree, 1, wxEXPAND | wxALL, border); + topSizer->Add(m_bottom_info_line, 0, wxEXPAND | wxALL, 2 * border); this->SetMinSize(wxSize(80 * em, 30 * em)); this->SetSizer(topSizer); @@ -1689,12 +1690,17 @@ void DiffPresetDialog::update_tree() left_val, right_val, category_icon_map.at(option.category)); } } + + if (m_tree->has_long_strings()) + bottom_info = _L("Some fields are too long to fit. Right mouse click reveals the full text."); bool tree_was_shown = m_tree->IsShown(); m_tree->Show(show_tree); - if (!show_tree) + + bool show_bottom_info = !show_tree || m_tree->has_long_strings(); + if (show_bottom_info) m_bottom_info_line->SetLabel(bottom_info); - m_bottom_info_line->Show(!show_tree); + m_bottom_info_line->Show(show_bottom_info); if (tree_was_shown == m_tree->IsShown()) Layout(); diff --git a/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp index f80975ce5..e8edd5798 100644 --- a/src/slic3r/GUI/UpdateDialogs.cpp +++ b/src/slic3r/GUI/UpdateDialogs.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -14,11 +15,13 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/Utils.hpp" +#include "../Utils/AppUpdater.hpp" #include "GUI.hpp" #include "GUI_App.hpp" #include "I18N.hpp" #include "ConfigWizard.hpp" #include "wxExtensions.hpp" +#include "format.hpp" namespace Slic3r { namespace GUI { @@ -88,6 +91,125 @@ bool MsgUpdateSlic3r::disable_version_check() const return cbox->GetValue(); } + wxSize AppUpdateAvailableDialog::AUAD_size; +// AppUpdater +AppUpdateAvailableDialog::AppUpdateAvailableDialog(const Semver& ver_current, const Semver& ver_online) + : MsgDialog(nullptr, _(L("App Update available")), wxString::Format(_(L("New version of %s is available.\nDo you wish to download it?")), SLIC3R_APP_NAME)) +{ + auto* versions = new wxFlexGridSizer(1, 0, VERT_SPACING); + versions->Add(new wxStaticText(this, wxID_ANY, _(L("Current version:")))); + versions->Add(new wxStaticText(this, wxID_ANY, ver_current.to_string())); + versions->Add(new wxStaticText(this, wxID_ANY, _(L("New version:")))); + versions->Add(new wxStaticText(this, wxID_ANY, ver_online.to_string())); + content_sizer->Add(versions); + content_sizer->AddSpacer(VERT_SPACING); + + cbox = new wxCheckBox(this, wxID_ANY, _(L("Don't notify about new releases any more"))); + content_sizer->Add(cbox); + content_sizer->AddSpacer(VERT_SPACING); + + AUAD_size = content_sizer->GetSize(); + + + add_button(wxID_CANCEL); + + if (auto* btn_ok = get_button(wxID_OK); btn_ok != NULL) { + btn_ok->SetLabel(_L("Next")); + } + + finalize(); +} + +AppUpdateAvailableDialog::~AppUpdateAvailableDialog() {} + + +bool AppUpdateAvailableDialog::disable_version_check() const +{ + return cbox->GetValue(); +} + +// AppUpdateDownloadDialog +AppUpdateDownloadDialog::AppUpdateDownloadDialog( const Semver& ver_online, boost::filesystem::path& path) + : MsgDialog(nullptr, _(L("App Update download")), wxString::Format(_(L("New version of %s is available.")), SLIC3R_APP_NAME)) +{ + auto* versions = new wxFlexGridSizer(2, 0, VERT_SPACING); + versions->Add(new wxStaticText(this, wxID_ANY, _(L("New version:")))); + versions->Add(new wxStaticText(this, wxID_ANY, ver_online.to_string())); + content_sizer->Add(versions); + content_sizer->AddSpacer(VERT_SPACING); +#ifndef __linux__ + cbox_run = new wxCheckBox(this, wxID_ANY, _(L("Run installer after download. (Otherwise file explorer will be opened)"))); + content_sizer->Add(cbox_run); +#endif + content_sizer->AddSpacer(VERT_SPACING); + content_sizer->AddSpacer(VERT_SPACING); + content_sizer->Add(new wxStaticText(this, wxID_ANY, _(L("Target path:")))); + content_sizer->AddSpacer(VERT_SPACING); + txtctrl_path = new wxTextCtrl(this, wxID_ANY, path.wstring()); + content_sizer->Add(txtctrl_path, 1, wxEXPAND); + content_sizer->AddSpacer(VERT_SPACING); + + wxButton* btn = new wxButton(this, wxID_ANY, _L("Select path")); + content_sizer->Add(btn/*, 1, wxEXPAND*/); + + // button to open file dialog + btn->Bind(wxEVT_BUTTON, ([this, path](wxCommandEvent& e) { + std::string extension = path.filename().extension().string(); + wxString wildcard; + if (!extension.empty()) { + extension = extension.substr(1); + wxString wxext = boost::nowide::widen(extension); + wildcard = GUI::format_wxstr("%1% Files (*.%2%)|*.%2%", wxext.Upper(), wxext); + } + wxFileDialog save_dlg( + this + , _L("Save as:") + , txtctrl_path->GetValue() + , boost::nowide::widen(AppUpdater::get_filename_from_url(txtctrl_path->GetValue().ToUTF8().data())) + , wildcard + , wxFD_SAVE | wxFD_OVERWRITE_PROMPT + ); + if (save_dlg.ShowModal() == wxID_OK) { + txtctrl_path->SetValue(save_dlg.GetPath()); + } + })); + + content_sizer->SetMinSize(AppUpdateAvailableDialog::AUAD_size); + + add_button(wxID_CANCEL); + + if (auto* btn_ok = get_button(wxID_OK); btn_ok != NULL) { + btn_ok->SetLabel(_L("Download")); + btn_ok->Bind(wxEVT_BUTTON, ([this, path](wxCommandEvent& e){ + if (boost::filesystem::exists(boost::filesystem::path(txtctrl_path->GetValue().ToUTF8().data()))) { + MessageDialog msgdlg(nullptr, GUI::format_wxstr(_L("File %1% already exists. Do you wish to overwrite it?"), txtctrl_path->GetValue()),_L("Notice"), wxYES_NO); + if (msgdlg.ShowModal() != wxID_YES) + return; + } + this->EndModal(wxID_OK); + })); + } + + + finalize(); +} + +AppUpdateDownloadDialog::~AppUpdateDownloadDialog() {} + + +bool AppUpdateDownloadDialog::run_after_download() const +{ +#ifndef __linux__ + return cbox_run->GetValue(); +#endif + return false; +} + +boost::filesystem::path AppUpdateDownloadDialog::get_download_path() const +{ + return boost::filesystem::path(txtctrl_path->GetValue().ToUTF8().data()); +} + // MsgUpdateConfig MsgUpdateConfig::MsgUpdateConfig(const std::vector &updates, bool force_before_wizard/* = false*/) : @@ -314,5 +436,25 @@ MsgNoUpdates::MsgNoUpdates() : MsgNoUpdates::~MsgNoUpdates() {} +// MsgNoAppUpdates +MsgNoAppUpdates::MsgNoAppUpdates() : + MsgDialog(nullptr, _(L("App update")), _(L("No updates available")), wxICON_ERROR | wxOK) +{ + + auto* text = new wxStaticText(this, wxID_ANY, wxString::Format( + _(L( + "%s has no version updates available." + )), + SLIC3R_APP_NAME + )); + text->Wrap(CONTENT_WIDTH * wxGetApp().em_unit()); + content_sizer->Add(text); + content_sizer->AddSpacer(VERT_SPACING); + + finalize(); +} + +MsgNoAppUpdates::~MsgNoAppUpdates() {} + } } diff --git a/src/slic3r/GUI/UpdateDialogs.hpp b/src/slic3r/GUI/UpdateDialogs.hpp index 435a8ccbd..2eb4ff8d4 100644 --- a/src/slic3r/GUI/UpdateDialogs.hpp +++ b/src/slic3r/GUI/UpdateDialogs.hpp @@ -6,6 +6,8 @@ #include #include +#include + #include "libslic3r/Semver.hpp" #include "MsgDialog.hpp" @@ -37,6 +39,42 @@ private: }; +class AppUpdateAvailableDialog : public MsgDialog +{ +public: + AppUpdateAvailableDialog(const Semver& ver_current, const Semver& ver_online); + AppUpdateAvailableDialog(AppUpdateAvailableDialog&&) = delete; + AppUpdateAvailableDialog(const AppUpdateAvailableDialog&) = delete; + AppUpdateAvailableDialog& operator=(AppUpdateAvailableDialog&&) = delete; + AppUpdateAvailableDialog& operator=(const AppUpdateAvailableDialog&) = delete; + virtual ~AppUpdateAvailableDialog(); + + // Tells whether the user checked the "don't bother me again" checkbox + bool disable_version_check() const; + static wxSize AUAD_size; +private: + wxCheckBox* cbox; +}; + +class AppUpdateDownloadDialog : public MsgDialog +{ +public: + AppUpdateDownloadDialog(const Semver& ver_online, boost::filesystem::path& path); + AppUpdateDownloadDialog(AppUpdateDownloadDialog&&) = delete; + AppUpdateDownloadDialog(const AppUpdateDownloadDialog&) = delete; + AppUpdateDownloadDialog& operator=(AppUpdateDownloadDialog&&) = delete; + AppUpdateDownloadDialog& operator=(const AppUpdateDownloadDialog&) = delete; + virtual ~AppUpdateDownloadDialog(); + + // Tells whether the user checked the "don't bother me again" checkbox + bool run_after_download() const; + boost::filesystem::path get_download_path() const; + +private: + wxCheckBox* cbox_run; + wxTextCtrl* txtctrl_path; +}; + // Confirmation dialog informing about configuration update. Lists updated bundles & their versions. class MsgUpdateConfig : public MsgDialog { @@ -129,6 +167,18 @@ public: ~MsgNoUpdates(); }; +// Informs about absence of new version online. +class MsgNoAppUpdates : public MsgDialog +{ +public: + MsgNoAppUpdates(); + MsgNoAppUpdates(MsgNoAppUpdates&&) = delete; + MsgNoAppUpdates(const MsgNoAppUpdates&) = delete; + MsgNoAppUpdates& operator=(MsgNoUpdates&&) = delete; + MsgNoAppUpdates& operator=(const MsgNoAppUpdates&) = delete; + ~MsgNoAppUpdates(); +}; + } } diff --git a/src/slic3r/Utils/AppUpdater.cpp b/src/slic3r/Utils/AppUpdater.cpp new file mode 100644 index 000000000..60739ccb3 --- /dev/null +++ b/src/slic3r/Utils/AppUpdater.cpp @@ -0,0 +1,618 @@ +#include "AppUpdater.hpp" + +#include +#include + +#include +#include +#include +#include +#include + +#include "slic3r/GUI/format.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/GUI.hpp" +#include "slic3r/Utils/Http.hpp" + +#include "libslic3r/Utils.hpp" + +#ifdef _WIN32 +#include +#include +#include +#include +#include +#endif // _WIN32 + + +namespace Slic3r { + +namespace { + +#ifdef _WIN32 + bool run_file(const boost::filesystem::path& path) + { + std::string msg; + bool res = GUI::create_process(path, std::wstring(), msg); + if (!res) { + std::string full_message = GUI::format("Running downloaded instaler of %1% has failed:\n%2%", SLIC3R_APP_NAME, msg); + BOOST_LOG_TRIVIAL(error) << full_message; // lm: maybe UI error msg? // dk: bellow. (maybe some general show error evt would be better?) + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_APP_DOWNLOAD_FAILED); + evt->SetString(full_message); + GUI::wxGetApp().QueueEvent(evt); + } + return res; + } + + std::string get_downloads_path() + { + std::string ret; + PWSTR path = NULL; + HRESULT hr = SHGetKnownFolderPath(FOLDERID_Downloads, 0, NULL, &path); + if (SUCCEEDED(hr)) { + ret = boost::nowide::narrow(path); + } + CoTaskMemFree(path); + return ret; + } +#elif __APPLE__ + bool run_file(const boost::filesystem::path& path) + { + if (boost::filesystem::exists(path)) { + // attach downloaded dmg file + const char* argv1[] = { "hdiutil", "attach", path.string().c_str(), nullptr }; + ::wxExecute(const_cast(argv1), wxEXEC_ASYNC, nullptr); + // open inside attached as a folder in finder + const char* argv2[] = { "open", "/Volumes/PrusaSlicer", nullptr }; + ::wxExecute(const_cast(argv2), wxEXEC_ASYNC, nullptr); + return true; + } + return false; + } + + std::string get_downloads_path() + { + // call objective-c implementation + return get_downloads_path_mac(); + } +#else + bool run_file(const boost::filesystem::path& path) + { + return false; + } + + std::string get_downloads_path() + { + wxString command = "xdg-user-dir DOWNLOAD"; + wxArrayString output; + GUI::desktop_execute_get_result(command, output); + if (output.GetCount() > 0) { + return output[0].ToUTF8().data(); //lm:I would use wxString::ToUTF8(), although on Linux, nothing at all should work too. + } + return std::string(); + } +#endif // _WIN32 / __apple__ / else +} // namespace + +wxDEFINE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent); +wxDEFINE_EVENT(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE, wxCommandEvent); +wxDEFINE_EVENT(EVT_SLIC3R_APP_DOWNLOAD_PROGRESS, wxCommandEvent); +wxDEFINE_EVENT(EVT_SLIC3R_APP_DOWNLOAD_FAILED, wxCommandEvent); +wxDEFINE_EVENT(EVT_SLIC3R_APP_OPEN_FAILED, wxCommandEvent); + +// priv handles all operations in separate thread +// 1) download version file and parse it. +// 2) download new app file and open in folder / run it. +struct AppUpdater::priv { + priv(); + // Download file. What happens with the data is specified in completefn. + bool http_get_file(const std::string& url + , size_t size_limit + , std::function progress_fn + , std::function completefn + , std::string& error_message + ) const; + + // Download installer / app + boost::filesystem::path download_file(const DownloadAppData& data) const; + // Run file in m_last_dest_path + bool run_downloaded_file(boost::filesystem::path path); + // gets version file via http + void version_check(const std::string& version_check_url); +#if 0 + // parsing of Prusaslicer.version2 + void parse_version_string_old(const std::string& body) const; +#endif + // parses ini tree of version file, saves to m_online_version_data and queue event(s) to UI + void parse_version_string(const std::string& body); + // thread + std::thread m_thread; + std::atomic_bool m_cancel; + std::mutex m_data_mutex; + // used to tell if notify user hes about to stop ongoing download + std::atomic_bool m_download_ongoing { false }; + bool get_download_ongoing() const { return m_download_ongoing; } + // read only variable used to init m_online_version_data.target_path + boost::filesystem::path m_default_dest_folder; // readonly + // DownloadAppData read / write needs to be locked by m_data_mutex + DownloadAppData m_online_version_data; + DownloadAppData get_app_data(); + void set_app_data(DownloadAppData data); + // set only before version file is downloaded, to keep information to show info dialog about no updates + // should never change during thread run + std::atomic_bool m_triggered_by_user {false}; + bool get_triggered_by_user() const { return m_triggered_by_user; } +}; + +AppUpdater::priv::priv() : + m_cancel (false) +#ifdef __linux__ + , m_default_dest_folder (boost::filesystem::path("/tmp")) +#else + , m_default_dest_folder (boost::filesystem::path(data_dir()) / "cache") +#endif //_WIN32 +{ + boost::filesystem::path downloads_path = boost::filesystem::path(get_downloads_path()); + if (!downloads_path.empty()) { + m_default_dest_folder = std::move(downloads_path); + } + BOOST_LOG_TRIVIAL(trace) << "App updater default download path: " << m_default_dest_folder; //lm:Is this an error? // dk: changed to trace + +} + +bool AppUpdater::priv::http_get_file(const std::string& url, size_t size_limit, std::function progress_fn, std::function complete_fn, std::string& error_message) const +{ + bool res = false; + Http::get(url) + .size_limit(size_limit) + .on_progress([&, progress_fn](Http::Progress progress, bool& cancel) { + // progress function returns true as success (to continue) + cancel = (this->m_cancel ? true : !progress_fn(std::move(progress))); + if (cancel) { + error_message = GUI::format("Error getting: `%1%`: Download was canceled.", //lm:typo //dk: am i blind? :) + url); + BOOST_LOG_TRIVIAL(debug) << "AppUpdater::priv::http_get_file message: "<< error_message; + } + }) + .on_error([&](std::string body, std::string error, unsigned http_status) { + error_message = GUI::format("Error getting: `%1%`: HTTP %2%, %3%", + url, + http_status, + error); + BOOST_LOG_TRIVIAL(error) << error_message; + }) + .on_complete([&](std::string body, unsigned /* http_status */) { + assert(complete_fn != nullptr); + res = complete_fn(body, error_message); + }) + .perform_sync(); + + return res; +} + +boost::filesystem::path AppUpdater::priv::download_file(const DownloadAppData& data) const +{ + boost::filesystem::path dest_path; + size_t last_gui_progress = 0; + size_t expected_size = data.size; + dest_path = data.target_path; + assert(!dest_path.empty()); + if (dest_path.empty()) + { + BOOST_LOG_TRIVIAL(error) << "Download from " << data.url << " could not start. Destination path is empty."; + return boost::filesystem::path(); + } + std::string error_message; + bool res = http_get_file(data.url, 130 * 1024 * 1024 //2.4.0 windows installer is 65MB //lm:I don't know, but larger. The binaries will grow. // dk: changed to 130, to have 100% more space. We should put this information into version file. + // on_progress + , [&last_gui_progress, expected_size](Http::Progress progress) { + // size check + if (progress.dltotal > 0 && progress.dltotal > expected_size) { + std::string message = GUI::format("Downloading new %1% has failed. The file has incorrect file size. Aborting download.\nExpected size: %2%\nDownload size: %3%", SLIC3R_APP_NAME, expected_size, progress.dltotal); + BOOST_LOG_TRIVIAL(error) << message; + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_APP_DOWNLOAD_FAILED); + evt->SetString(message); + GUI::wxGetApp().QueueEvent(evt); + return false; + } else if (progress.dltotal > 0 && progress.dltotal < expected_size) { + //lm:When will this happen? Is that not an error? // dk: It is possible error, but we cannot know until the download is finished. Somehow the total size can grow during the download. + BOOST_LOG_TRIVIAL(info) << GUI::format("Downloading new %1% has incorrect size. The download will continue. \nExpected size: %2%\nDownload size: %3%", SLIC3R_APP_NAME, expected_size, progress.dltotal); + } + // progress event + size_t gui_progress = progress.dltotal > 0 ? 100 * progress.dlnow / progress.dltotal : 0; + BOOST_LOG_TRIVIAL(error) << "App download " << gui_progress << "% " << progress.dlnow << " of " << progress.dltotal; + if (last_gui_progress < gui_progress && (last_gui_progress != 0 || gui_progress != 100)) { + last_gui_progress = gui_progress; + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_APP_DOWNLOAD_PROGRESS); + evt->SetString(GUI::from_u8(std::to_string(gui_progress))); + GUI::wxGetApp().QueueEvent(evt); + } + return true; + } + // on_complete + , [dest_path, expected_size](std::string body, std::string& error_message){ + // Size check. Does always 1 char == 1 byte? + size_t body_size = body.size(); + if (body_size != expected_size) { + //lm:UI message? // dk: changed. Now it propagates to UI. + error_message = GUI::format("Downloaded file has wrong size. Expected size: %1% Downloaded size: %2%", expected_size, body_size); + return false; + } + boost::filesystem::path tmp_path = dest_path; + tmp_path += format(".%1%%2%", get_current_pid(), ".download"); + try + { + boost::filesystem::fstream file(tmp_path, std::ios::out | std::ios::binary | std::ios::trunc); + file.write(body.c_str(), body.size()); + file.close(); + boost::filesystem::rename(tmp_path, dest_path); + } + catch (const std::exception&) + { + error_message = GUI::format("Failed to write and move %1% to %2%", tmp_path, dest_path); + return false; + } + return true; + } + , error_message + ); + if (!res) + { + if (this->m_cancel) + { + BOOST_LOG_TRIVIAL(info) << error_message; //lm:Is this an error? // dk: changed to info + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_APP_DOWNLOAD_FAILED); // FAILED with empty msg only closes progress notification + GUI::wxGetApp().QueueEvent(evt); + } else { + std::string message = GUI::format("Downloading new %1% has failed:\n%2%", SLIC3R_APP_NAME, error_message); + BOOST_LOG_TRIVIAL(error) << message; + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_APP_DOWNLOAD_FAILED); + evt->SetString(message); + GUI::wxGetApp().QueueEvent(evt); + } + return boost::filesystem::path(); + } + + return dest_path; +} + +bool AppUpdater::priv::run_downloaded_file(boost::filesystem::path path) +{ + assert(!path.empty()); + return run_file(path); +} + +void AppUpdater::priv::version_check(const std::string& version_check_url) +{ + assert(!version_check_url.empty()); + std::string error_message; + bool res = http_get_file(version_check_url, 1024 + // on_progress + , [](Http::Progress progress) { return true; } + // on_complete + , [&](std::string body, std::string& error_message) { + boost::trim(body); + parse_version_string(body); + return true; + } + , error_message + ); + //lm:In case the internet is not available, it will report no updates if run by user. + // We might save a flag that we don't know or try to run the version_check again, reporting + // the failure. + // dk: changed to download version every time. Dialog will show if m_triggered_by_user. + if (!res) { + std::string message = GUI::format("Downloading %1% version file has failed:\n%2%", SLIC3R_APP_NAME, error_message); + BOOST_LOG_TRIVIAL(error) << message; + if (m_triggered_by_user) { + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_APP_DOWNLOAD_FAILED); + evt->SetString(message); + GUI::wxGetApp().QueueEvent(evt); + } + } +} + +void AppUpdater::priv::parse_version_string(const std::string& body) +{ + size_t start = body.find('['); + if (start == std::string::npos) { +#if 0 + BOOST_LOG_TRIVIAL(error) << "Could not find property tree in version file. Starting old parsing."; + parse_version_string_old(body); + return; +#endif // 0 + BOOST_LOG_TRIVIAL(error) << "Could not find property tree in version file. Checking for application update has failed."; + return; + } + std::string tree_string = body.substr(start); + boost::property_tree::ptree tree; + std::stringstream ss(tree_string); + try { + boost::property_tree::read_ini(ss, tree); + } catch (const boost::property_tree::ini_parser::ini_parser_error& err) { + //throw Slic3r::RuntimeError(format("Failed reading version file property tree Error: \"%1%\" at line %2%. \nTree:\n%3%", err.message(), err.line(), tree_string).c_str()); + BOOST_LOG_TRIVIAL(error) << format("Failed reading version file property tree Error: \"%1%\" at line %2%. \nTree:\n%3%", err.message(), err.line(), tree_string); + return; + } + + DownloadAppData new_data; + + for (const auto& section : tree) { + std::string section_name = section.first; + + // online release version info + if (section_name == +#ifdef _WIN32 + "release:win64" +#elif __APPLE__ + "release:osx" +#else + "release:linux" +#endif +//lm:Related to the ifdefs. We should also support BSD, which behaves similar to Linux in most cases. +// Unless you have a reason not to, I would consider doing _WIN32, elif __APPLE__, else ... Not just here. +// dk: so its ok now or we need to specify BSD? + ) { + for (const auto& data : section.second) { + if (data.first == "url") { + new_data.url = data.second.data(); + new_data.target_path = m_default_dest_folder / AppUpdater::get_filename_from_url(new_data.url); + BOOST_LOG_TRIVIAL(error) << format("parsing version string: url: %1%", new_data.url); + } else if (data.first == "size"){ + new_data.size = std::stoi(data.second.data()); + BOOST_LOG_TRIVIAL(error) << format("parsing version string: expected size: %1%", new_data.size); + } + } + } + + // released versions - to be send to UI layer + if (section_name == "common") { + std::vector prerelease_versions; + for (const auto& data : section.second) { + // release version - save and send to UI layer + if (data.first == "release") { + std::string version = data.second.data(); + boost::optional release_version = Semver::parse(version); + if (!release_version) { + BOOST_LOG_TRIVIAL(error) << format("Received invalid contents from version file: Not a correct semver: `%1%`", version); + return; + } + new_data.version = release_version; + // Send after all data is read + /* + BOOST_LOG_TRIVIAL(info) << format("Got %1% online version: `%2%`. Sending to GUI thread...", SLIC3R_APP_NAME, version); + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE); + evt->SetString(GUI::from_u8(version)); + GUI::wxGetApp().QueueEvent(evt); + */ + // prerelease versions - write down to be sorted and send to UI layer + } else if (data.first == "alpha") { + prerelease_versions.emplace_back(data.second.data()); + } else if (data.first == "beta") { + prerelease_versions.emplace_back(data.second.data()); + } else if (data.first == "rc") { + prerelease_versions.emplace_back(data.second.data()); + } + } + // find recent version that is newer than last full release. + boost::optional recent_version; + std::string version_string; + for (const std::string& ver_string : prerelease_versions) { + boost::optional ver = Semver::parse(ver_string); + if (ver && *new_data.version < *ver && ((recent_version && *recent_version < *ver) || !recent_version)) { + recent_version = ver; + version_string = ver_string; + } + } + // send prerelease version to UI layer + if (recent_version) { + BOOST_LOG_TRIVIAL(info) << format("Got %1% online version: `%2%`. Sending to GUI thread...", SLIC3R_APP_NAME, version_string); + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE); + evt->SetString(GUI::from_u8(version_string)); + GUI::wxGetApp().QueueEvent(evt); + } + } + } + assert(!new_data.url.empty()); + assert(new_data.version); + // save + set_app_data(new_data); + // send + std::string version = new_data.version.get().to_string(); + BOOST_LOG_TRIVIAL(info) << format("Got %1% online version: `%2%`. Sending to GUI thread...", SLIC3R_APP_NAME, version); + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE); + evt->SetString(GUI::from_u8(version)); + GUI::wxGetApp().QueueEvent(evt); +} + +#if 0 //lm:is this meant to be ressurected? //dk: it is code that parses PrusaSlicer.version2 in 2.4.0, It was deleted from PresetUpdater.cpp and I would keep it here for possible reference. +void AppUpdater::priv::parse_version_string_old(const std::string& body) const +{ + + // release version + std::string version; + const auto first_nl_pos = body.find_first_of("\n\r"); + if (first_nl_pos != std::string::npos) + version = body.substr(0, first_nl_pos); + else + version = body; + boost::optional release_version = Semver::parse(version); + if (!release_version) { + BOOST_LOG_TRIVIAL(error) << format("Received invalid contents from `%1%`: Not a correct semver: `%2%`", SLIC3R_APP_NAME, version); + return; + } + BOOST_LOG_TRIVIAL(info) << format("Got %1% online version: `%2%`. Sending to GUI thread...", SLIC3R_APP_NAME, version); + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE); + evt->SetString(GUI::from_u8(version)); + GUI::wxGetApp().QueueEvent(evt); + + // alpha / beta version + std::vector prerelease_versions; + size_t nexn_nl_pos = first_nl_pos; + while (nexn_nl_pos != std::string::npos && body.size() > nexn_nl_pos + 1) { + const auto last_nl_pos = nexn_nl_pos; + nexn_nl_pos = body.find_first_of("\n\r", last_nl_pos + 1); + std::string line; + if (nexn_nl_pos == std::string::npos) + line = body.substr(last_nl_pos + 1); + else + line = body.substr(last_nl_pos + 1, nexn_nl_pos - last_nl_pos - 1); + + // alpha + if (line.substr(0, 6) == "alpha=") { + version = line.substr(6); + if (!Semver::parse(version)) { + BOOST_LOG_TRIVIAL(error) << format("Received invalid contents for alpha release from `%1%`: Not a correct semver: `%2%`", SLIC3R_APP_NAME, version); + return; + } + prerelease_versions.emplace_back(version); + // beta + } + else if (line.substr(0, 5) == "beta=") { + version = line.substr(5); + if (!Semver::parse(version)) { + BOOST_LOG_TRIVIAL(error) << format("Received invalid contents for beta release from `%1%`: Not a correct semver: `%2%`", SLIC3R_APP_NAME, version); + return; + } + prerelease_versions.emplace_back(version); + } + } + // find recent version that is newer than last full release. + boost::optional recent_version; + for (const std::string& ver_string : prerelease_versions) { + boost::optional ver = Semver::parse(ver_string); + if (ver && *release_version < *ver && ((recent_version && *recent_version < *ver) || !recent_version)) { + recent_version = ver; + version = ver_string; + } + } + if (recent_version) { + BOOST_LOG_TRIVIAL(info) << format("Got %1% online version: `%2%`. Sending to GUI thread...", SLIC3R_APP_NAME, version); + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE); + evt->SetString(GUI::from_u8(version)); + GUI::wxGetApp().QueueEvent(evt); + } +} +#endif // 0 + +DownloadAppData AppUpdater::priv::get_app_data() +{ + const std::lock_guard lock(m_data_mutex); + DownloadAppData ret_val(m_online_version_data); + return ret_val; +} + +void AppUpdater::priv::set_app_data(DownloadAppData data) +{ + const std::lock_guard lock(m_data_mutex); + m_online_version_data = data; +} + +AppUpdater::AppUpdater() + :p(new priv()) +{ +} +AppUpdater::~AppUpdater() +{ + if (p && p->m_thread.joinable()) { + // This will stop transfers being done by the thread, if any. + // Cancelling takes some time, but should complete soon enough. + p->m_cancel = true; + p->m_thread.join(); + } +} +void AppUpdater::sync_download() +{ + assert(p); + // join thread first - it could have been in sync_version + if (p->m_thread.joinable()) { + // This will stop transfers being done by the thread, if any. + // Cancelling takes some time, but should complete soon enough. + p->m_cancel = true; + p->m_thread.join(); + } + p->m_cancel = false; + + DownloadAppData input_data = p->get_app_data(); + assert(!input_data.url.empty()); + + p->m_thread = std::thread( + [this, input_data]() { + p->m_download_ongoing = true; + if (boost::filesystem::path dest_path = p->download_file(input_data); boost::filesystem::exists(dest_path)){ + if (input_data.start_after) { + p->run_downloaded_file(std::move(dest_path)); + } else { + GUI::desktop_open_folder(dest_path.parent_path()); + } + } + p->m_download_ongoing = false; + }); +} + +void AppUpdater::sync_version(const std::string& version_check_url, bool from_user) +{ + assert(p); + // join thread first - it could have been in sync_download + if (p->m_thread.joinable()) { + // This will stop transfers being done by the thread, if any. + // Cancelling takes some time, but should complete soon enough. + p->m_cancel = true; + p->m_thread.join(); + } + p->m_triggered_by_user = from_user; + p->m_cancel = false; + p->m_thread = std::thread( + [this, version_check_url]() { + p->version_check(version_check_url); + }); +} + +void AppUpdater::cancel() +{ + p->m_cancel = true; +} +bool AppUpdater::cancel_callback() +{ + cancel(); + return true; +} + +std::string AppUpdater::get_default_dest_folder() +{ + return p->m_default_dest_folder.string(); +} + +std::string AppUpdater::get_filename_from_url(const std::string& url) +{ + size_t slash = url.rfind('/'); + return (slash != std::string::npos ? url.substr(slash + 1) : url); +} + +std::string AppUpdater::get_file_extension_from_url(const std::string& url) +{ + size_t dot = url.rfind('.'); + return (dot != std::string::npos ? url.substr(dot) : url); +} + +void AppUpdater::set_app_data(DownloadAppData data) +{ + p->set_app_data(std::move(data)); +} + +DownloadAppData AppUpdater::get_app_data() +{ + return p->get_app_data(); +} + +bool AppUpdater::get_triggered_by_user() const +{ + return p->get_triggered_by_user(); +} + +bool AppUpdater::get_download_ongoing() const +{ + return p->get_download_ongoing(); +} + +} //namespace Slic3r diff --git a/src/slic3r/Utils/AppUpdater.hpp b/src/slic3r/Utils/AppUpdater.hpp new file mode 100644 index 000000000..16d0d668f --- /dev/null +++ b/src/slic3r/Utils/AppUpdater.hpp @@ -0,0 +1,66 @@ +#ifndef slic3r_AppUpdate_hpp_ +#define slic3r_AppUpdate_hpp_ + +#include +#include +#include "libslic3r/Utils.hpp" +#include "wx/event.h" + +//class boost::filesystem::path; + +namespace Slic3r { + +#ifdef __APPLE__ +// implmented at MacUtils.mm +std::string get_downloads_path_mac(); +#endif //__APPLE__ + +struct DownloadAppData +{ + std::string url; + bool start_after; + boost::optional version; + size_t size; + boost::filesystem::path target_path; +}; + +class AppUpdater +{ +public: + AppUpdater(); + ~AppUpdater(); + AppUpdater(AppUpdater&&) = delete; + AppUpdater(const AppUpdater&) = delete; + AppUpdater& operator=(AppUpdater&&) = delete; + AppUpdater& operator=(const AppUpdater&) = delete; + + // downloads app file + void sync_download(); + // downloads version file + void sync_version(const std::string& version_check_url, bool from_user); + void cancel(); + bool cancel_callback(); + + std::string get_default_dest_folder(); + + static std::string get_filename_from_url(const std::string& url); + static std::string get_file_extension_from_url(const std::string& url); + + // atomic bool + bool get_triggered_by_user() const; + bool get_download_ongoing() const; + // mutex access + void set_app_data(DownloadAppData data); + DownloadAppData get_app_data(); +private: + struct priv; + std::unique_ptr p; +}; + +wxDECLARE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent); +wxDECLARE_EVENT(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE, wxCommandEvent); +wxDECLARE_EVENT(EVT_SLIC3R_APP_DOWNLOAD_PROGRESS, wxCommandEvent); +wxDECLARE_EVENT(EVT_SLIC3R_APP_DOWNLOAD_FAILED, wxCommandEvent); +wxDECLARE_EVENT(EVT_SLIC3R_APP_OPEN_FAILED, wxCommandEvent); +} //namespace Slic3r +#endif diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp index 63c26f721..68ddda041 100644 --- a/src/slic3r/Utils/Http.cpp +++ b/src/slic3r/Utils/Http.cpp @@ -207,7 +207,6 @@ size_t Http::priv::writecb(void *data, size_t size, size_t nmemb, void *userp) auto self = static_cast(userp); const char *cdata = static_cast(data); const size_t realsize = size * nmemb; - const size_t limit = self->limit > 0 ? self->limit : DEFAULT_SIZE_LIMIT; if (self->buffer.size() + realsize > limit) { // This makes curl_easy_perform return CURLE_WRITE_ERROR diff --git a/src/slic3r/Utils/MacUtils.mm b/src/slic3r/Utils/MacUtils.mm new file mode 100644 index 000000000..31a28f14e --- /dev/null +++ b/src/slic3r/Utils/MacUtils.mm @@ -0,0 +1,18 @@ +#import "AppUpdater.hpp" + +#import + +namespace Slic3r { + +// AppUpdater.hpp +std::string get_downloads_path_mac() +{ + // 1) + NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDownloadsDirectory, NSUserDomainMask, YES); + NSString * desktopPath = [paths objectAtIndex:0]; + return std::string([desktopPath UTF8String]); + // 2) + //[NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Downloads"]]; + //return std::string(); +} +} diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 2b458df53..f4863ff20 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -135,10 +135,6 @@ struct Updates std::vector updates; }; - -wxDEFINE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent); -wxDEFINE_EVENT(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE, wxCommandEvent); - struct PresetUpdater::priv { std::vector index_db; @@ -162,8 +158,6 @@ struct PresetUpdater::priv void set_download_prefs(AppConfig *app_config); bool get_file(const std::string &url, const fs::path &target_path) const; void prune_tmps() const; - void sync_version() const; - void parse_version_string(const std::string& body) const; void sync_config(const VendorMap vendors); void check_install_indices() const; @@ -238,101 +232,6 @@ void PresetUpdater::priv::prune_tmps() const } } -// Get Slic3rPE version available online, save in AppConfig. -void PresetUpdater::priv::sync_version() const -{ - if (! enabled_version_check) { return; } - - BOOST_LOG_TRIVIAL(info) << format("Downloading %1% online version from: `%2%`", SLIC3R_APP_NAME, version_check_url); - - Http::get(version_check_url) - .size_limit(SLIC3R_VERSION_BODY_MAX) - .on_progress([this](Http::Progress, bool &cancel) { - cancel = this->cancel; - }) - .on_error([&](std::string body, std::string error, unsigned http_status) { - (void)body; - BOOST_LOG_TRIVIAL(error) << format("Error getting: `%1%`: HTTP %2%, %3%", - version_check_url, - http_status, - error); - }) - .on_complete([&](std::string body, unsigned /* http_status */) { - boost::trim(body); - parse_version_string(body); - }) - .perform_sync(); -} - -// Parses version string obtained in sync_version() and sends events to UI thread. -// Version string must contain release version on first line. Follows non-mandatory alpha / beta releases on following lines (alpha=2.0.0-alpha1). -void PresetUpdater::priv::parse_version_string(const std::string& body) const -{ - // release version - std::string version; - const auto first_nl_pos = body.find_first_of("\n\r"); - if (first_nl_pos != std::string::npos) - version = body.substr(0, first_nl_pos); - else - version = body; - boost::optional release_version = Semver::parse(version); - if (!release_version) { - BOOST_LOG_TRIVIAL(error) << format("Received invalid contents from `%1%`: Not a correct semver: `%2%`", SLIC3R_APP_NAME, version); - return; - } - BOOST_LOG_TRIVIAL(info) << format("Got %1% online version: `%2%`. Sending to GUI thread...", SLIC3R_APP_NAME, version); - wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE); - evt->SetString(GUI::from_u8(version)); - GUI::wxGetApp().QueueEvent(evt); - - // alpha / beta version - std::vector prerelease_versions; - size_t nexn_nl_pos = first_nl_pos; - while (nexn_nl_pos != std::string::npos && body.size() > nexn_nl_pos + 1) { - const auto last_nl_pos = nexn_nl_pos; - nexn_nl_pos = body.find_first_of("\n\r", last_nl_pos + 1); - std::string line; - if (nexn_nl_pos == std::string::npos) - line = body.substr(last_nl_pos + 1); - else - line = body.substr(last_nl_pos + 1, nexn_nl_pos - last_nl_pos - 1); - - // alpha - if (line.substr(0, 6) == "alpha=") { - version = line.substr(6); - if (!Semver::parse(version)) { - BOOST_LOG_TRIVIAL(error) << format("Received invalid contents for alpha release from `%1%`: Not a correct semver: `%2%`", SLIC3R_APP_NAME, version); - return; - } - prerelease_versions.emplace_back(version); - // beta - } - else if (line.substr(0, 5) == "beta=") { - version = line.substr(5); - if (!Semver::parse(version)) { - BOOST_LOG_TRIVIAL(error) << format("Received invalid contents for beta release from `%1%`: Not a correct semver: `%2%`", SLIC3R_APP_NAME, version); - return; - } - prerelease_versions.emplace_back(version); - } - } - // find recent version that is newer than last full release. - boost::optional recent_version; - for (const std::string& ver_string : prerelease_versions) { - boost::optional ver = Semver::parse(ver_string); - if (ver && *release_version < *ver && ((recent_version && *recent_version < *ver) || !recent_version)) { - recent_version = ver; - version = ver_string; - } - } - if (recent_version) { - BOOST_LOG_TRIVIAL(info) << format("Got %1% online version: `%2%`. Sending to GUI thread...", SLIC3R_APP_NAME, version); - wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE); - evt->SetString(GUI::from_u8(version)); - GUI::wxGetApp().QueueEvent(evt); - } -} - // Download vendor indices. Also download new bundles if an index indicates there's a new one available. // Both are saved in cache. void PresetUpdater::priv::sync_config(const VendorMap vendors) @@ -743,7 +642,6 @@ void PresetUpdater::sync(PresetBundle *preset_bundle) p->thread = std::thread([this, vendors]() { this->p->prune_tmps(); - this->p->sync_version(); this->p->sync_config(std::move(vendors)); }); } diff --git a/src/slic3r/Utils/PresetUpdater.hpp b/src/slic3r/Utils/PresetUpdater.hpp index 97d85a4ea..974a7dcfa 100644 --- a/src/slic3r/Utils/PresetUpdater.hpp +++ b/src/slic3r/Utils/PresetUpdater.hpp @@ -65,7 +65,7 @@ private: std::unique_ptr p; }; -wxDECLARE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent); -wxDECLARE_EVENT(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE, wxCommandEvent); +//wxDECLARE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent); +//wxDECLARE_EVENT(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE, wxCommandEvent); } #endif diff --git a/src/slic3r/Utils/UndoRedo.cpp b/src/slic3r/Utils/UndoRedo.cpp index 049de5400..8fe20d012 100644 --- a/src/slic3r/Utils/UndoRedo.cpp +++ b/src/slic3r/Utils/UndoRedo.cpp @@ -21,6 +21,10 @@ #include #include +#if ENABLE_LEGACY_OPENGL_REMOVAL +#include "slic3r/GUI/3DScene.hpp" +#endif // ENABLE_LEGACY_OPENGL_REMOVAL + #include #ifndef NDEBUG diff --git a/tests/catch_main.hpp b/tests/catch_main.hpp index 5ab71fdd7..ca5b47da8 100644 --- a/tests/catch_main.hpp +++ b/tests/catch_main.hpp @@ -3,7 +3,7 @@ #define CATCH_CONFIG_EXTERNAL_INTERFACES #define CATCH_CONFIG_MAIN -#define CATCH_CONFIG_DEFAULT_REPORTER "verboseconsole" +// #define CATCH_CONFIG_DEFAULT_REPORTER "verboseconsole" #include namespace Catch { diff --git a/tests/fff_print/fff_print_tests.cpp b/tests/fff_print/fff_print_tests.cpp index 46358e5eb..cbdb2b12b 100644 --- a/tests/fff_print/fff_print_tests.cpp +++ b/tests/fff_print/fff_print_tests.cpp @@ -1,3 +1,18 @@ #include #include "libslic3r/libslic3r.h" + +// __has_feature() is used later for Clang, this is for compatibility with other compilers (such as GCC and MSVC) +#ifndef __has_feature +# define __has_feature(x) 0 +#endif + +// Print reports about memory leaks but exit with zero exit code when any memory leaks is found to make unit tests pass. +// After merging the stable branch (2.4.1) with the master branch, this should be deleted. +#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) +extern "C" { + const char *__lsan_default_options() { + return "exitcode=0"; + } +} +#endif \ No newline at end of file diff --git a/tests/libnest2d/CMakeLists.txt b/tests/libnest2d/CMakeLists.txt index bcb759452..9bafe84a0 100644 --- a/tests/libnest2d/CMakeLists.txt +++ b/tests/libnest2d/CMakeLists.txt @@ -4,4 +4,6 @@ target_link_libraries(${_TEST_NAME}_tests test_common libnest2d ) 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} exclude:[NotWorking]") +set(_catch_args "exclude:[NotWorking]") +list(APPEND _catch_args "${CATCH_EXTRA_ARGS}") +add_test(${_TEST_NAME}_tests ${_TEST_NAME}_tests ${_catch_args}) diff --git a/tests/libslic3r/test_marchingsquares.cpp b/tests/libslic3r/test_marchingsquares.cpp index 3553697ac..32b137175 100644 --- a/tests/libslic3r/test_marchingsquares.cpp +++ b/tests/libslic3r/test_marchingsquares.cpp @@ -20,17 +20,17 @@ using namespace Slic3r; -static double area(const sla::RasterBase::PixelDim &pxd) +static double area(const sla::PixelDim &pxd) { return pxd.w_mm * pxd.h_mm; } static Slic3r::sla::RasterGrayscaleAA create_raster( - const sla::RasterBase::Resolution &res, + const sla::Resolution &res, double disp_w = 100., double disp_h = 100.) { - sla::RasterBase::PixelDim pixdim{disp_w / res.width_px, disp_h / res.height_px}; + sla::PixelDim pixdim{disp_w / res.width_px, disp_h / res.height_px}; auto bb = BoundingBox({0, 0}, {scaled(disp_w), scaled(disp_h)}); sla::RasterBase::Trafo trafo; @@ -107,7 +107,7 @@ static void test_expolys(Rst && rst, svg.Close(); double max_rel_err = 0.1; - sla::RasterBase::PixelDim pxd = rst.pixel_dimensions(); + sla::PixelDim pxd = rst.pixel_dimensions(); double max_abs_err = area(pxd) * scaled(1.) * scaled(1.); BoundingBox ref_bb; @@ -175,7 +175,7 @@ TEST_CASE("Fully covered raster should result in a rectangle", "[MarchingSquares TEST_CASE("4x4 raster with one ring", "[MarchingSquares]") { - sla::RasterBase::PixelDim pixdim{1, 1}; + sla::PixelDim pixdim{1, 1}; // We need one additional row and column to detect edges sla::RasterGrayscaleAA rst{{4, 4}, pixdim, {}, agg::gamma_threshold(.5)}; @@ -205,7 +205,7 @@ TEST_CASE("4x4 raster with one ring", "[MarchingSquares]") { TEST_CASE("4x4 raster with two rings", "[MarchingSquares]") { - sla::RasterBase::PixelDim pixdim{1, 1}; + sla::PixelDim pixdim{1, 1}; // We need one additional row and column to detect edges sla::RasterGrayscaleAA rst{{5, 5}, pixdim, {}, agg::gamma_threshold(.5)}; @@ -321,7 +321,7 @@ static void recreate_object_from_rasters(const std::string &objname, float lh) { std::vector layers = slice_mesh_ex(mesh.its, grid(float(bb.min.z()) + lh, float(bb.max.z()), lh)); - sla::RasterBase::Resolution res{2560, 1440}; + sla::Resolution res{2560, 1440}; double disp_w = 120.96; double disp_h = 68.04; diff --git a/tests/libslic3r/test_png_io.cpp b/tests/libslic3r/test_png_io.cpp index b4fcd6255..e8229b716 100644 --- a/tests/libslic3r/test_png_io.cpp +++ b/tests/libslic3r/test_png_io.cpp @@ -9,9 +9,9 @@ using namespace Slic3r; -static sla::RasterGrayscaleAA create_raster(const sla::RasterBase::Resolution &res) +static sla::RasterGrayscaleAA create_raster(const sla::Resolution &res) { - sla::RasterBase::PixelDim pixdim{1., 1.}; + sla::PixelDim pixdim{1., 1.}; auto bb = BoundingBox({0, 0}, {scaled(1.), scaled(1.)}); sla::RasterBase::Trafo trafo; diff --git a/tests/libslic3r/test_voronoi.cpp b/tests/libslic3r/test_voronoi.cpp index db12e2fec..7f25797f5 100644 --- a/tests/libslic3r/test_voronoi.cpp +++ b/tests/libslic3r/test_voronoi.cpp @@ -2055,6 +2055,50 @@ TEST_CASE("Voronoi missing vertex 3", "[VoronoiMissingVertex3]") // REQUIRE(!has_missing_voronoi_vertices(poly, vd)); } +TEST_CASE("Voronoi missing vertex 4", "[VoronoiMissingVertex4]") +{ + // Probably the reason why Voronoi vertex is missing is that 19299999 and 19300000 are very close. + Polygon polygon_1 = { + Point(27000000, -18900000), + Point(27000000, 20000000), + Point(19000000, 20000000), + Point(19000000, 19299999), + Point(26000000, -18000000), + Point(-19000000, -18000000), + Point(-27000000, 19300000), + Point(-19000000, 19300000), + Point(-19000000, 20000000), + Point(-28000000, 20000000), + Point(-20000000, -18900000), + }; + + // Maybe this is the same case as the previous, but the missing Voronoi vertex is different. + Polygon polygon_2 = { + Point(27000000, -18900000), + Point(27000000, 20000000), + Point(19000000, 20000000), + Point(19000000, 19299999), + Point(19000000, -18000000), // Just this point is different other points are the same as previous. + Point(-19000000, -18000000), + Point(-27000000, 19300000), + Point(-19000000, 19300000), + Point(-19000000, 20000000), + Point(-28000000, 20000000), + Point(-20000000, -18900000), + }; + + Geometry::VoronoiDiagram vd_1; + Geometry::VoronoiDiagram vd_2; + Lines lines_1 = to_lines(polygon_1); + Lines lines_2 = to_lines(polygon_2); + construct_voronoi(lines_1.begin(), lines_1.end(), &vd_1); + construct_voronoi(lines_2.begin(), lines_2.end(), &vd_2); +#ifdef VORONOI_DEBUG_OUT + dump_voronoi_to_svg(debug_out_path("voronoi-missing-vertex4-1-out.svg").c_str(), vd_1, Points(), lines_1); + dump_voronoi_to_svg(debug_out_path("voronoi-missing-vertex4-2-out.svg").c_str(), vd_2, Points(), lines_2); +#endif +} + // In this case, the Voronoi vertex (146873, -146873) is included twice. // Also, near to those duplicate Voronoi vertices is another Voronoi vertex (146872, -146872). // Rotating the polygon will help solve this problem, but then there arise three very close Voronoi vertices. diff --git a/tests/sla_print/CMakeLists.txt b/tests/sla_print/CMakeLists.txt index dc583f1a1..88c1cd186 100644 --- a/tests/sla_print/CMakeLists.txt +++ b/tests/sla_print/CMakeLists.txt @@ -3,9 +3,14 @@ add_executable(${_TEST_NAME}_tests ${_TEST_NAME}_tests_main.cpp sla_print_tests.cpp sla_test_utils.hpp sla_test_utils.cpp sla_supptgen_tests.cpp - sla_raycast_tests.cpp) + sla_raycast_tests.cpp + sla_archive_export_tests.cpp) target_link_libraries(${_TEST_NAME}_tests test_common libslic3r) set_property(TARGET ${_TEST_NAME}_tests PROPERTY FOLDER "tests") +if (WIN32) + prusaslicer_copy_dlls(${_TEST_NAME}_tests) +endif() + # catch_discover_tests(${_TEST_NAME}_tests TEST_PREFIX "${_TEST_NAME}: ") add_test(${_TEST_NAME}_tests ${_TEST_NAME}_tests ${CATCH_EXTRA_ARGS}) diff --git a/tests/sla_print/sla_archive_export_tests.cpp b/tests/sla_print/sla_archive_export_tests.cpp new file mode 100644 index 000000000..9dbe5bc64 --- /dev/null +++ b/tests/sla_print/sla_archive_export_tests.cpp @@ -0,0 +1,40 @@ +#include +#include + +#include "libslic3r/SLAPrint.hpp" +#include "libslic3r/Format/SLAArchive.hpp" + +#include + +using namespace Slic3r; + +TEST_CASE("Archive export test", "[sla_archives]") { + constexpr const char *PNAME = "20mm_cube"; + + for (auto &archname : SLAArchive::registered_archives()) { + INFO(std::string("Testing archive type: ") + archname); + SLAPrint print; + SLAFullPrintConfig fullcfg; + + auto m = Model::read_from_file(TEST_DATA_DIR PATH_SEPARATOR + std::string(PNAME) + ".obj", nullptr); + + fullcfg.set("sla_archive_format", archname); + fullcfg.set("supports_enable", false); + fullcfg.set("pad_enable", false); + + DynamicPrintConfig cfg; + cfg.apply(fullcfg); + + print.set_status_callback([](const PrintBase::SlicingStatus&) {}); + print.apply(m, cfg); + print.process(); + + ThumbnailsList thumbnails; + auto outputfname = std::string("output.") + SLAArchive::get_extension(archname); + + print.export_print(outputfname, thumbnails, PNAME); + + // Not much can be checked about the archives... + REQUIRE(boost::filesystem::exists(outputfname)); + } +} diff --git a/tests/sla_print/sla_print_tests.cpp b/tests/sla_print/sla_print_tests.cpp index db8c5e93e..f7b0df339 100644 --- a/tests/sla_print/sla_print_tests.cpp +++ b/tests/sla_print/sla_print_tests.cpp @@ -159,8 +159,8 @@ TEST_CASE("FloorSupportsDoNotPierceModel", "[SLASupportGeneration]") { TEST_CASE("InitializedRasterShouldBeNONEmpty", "[SLARasterOutput]") { // Default Prusa SL1 display parameters - sla::RasterBase::Resolution res{2560, 1440}; - sla::RasterBase::PixelDim pixdim{120. / res.width_px, 68. / res.height_px}; + sla::Resolution res{2560, 1440}; + sla::PixelDim pixdim{120. / res.width_px, 68. / res.height_px}; sla::RasterGrayscaleAAGammaPower raster(res, pixdim, {}, 1.); REQUIRE(raster.resolution().width_px == res.width_px); @@ -186,8 +186,8 @@ TEST_CASE("MirroringShouldBeCorrect", "[SLARasterOutput]") { TEST_CASE("RasterizedPolygonAreaShouldMatch", "[SLARasterOutput]") { double disp_w = 120., disp_h = 68.; - sla::RasterBase::Resolution res{2560, 1440}; - sla::RasterBase::PixelDim pixdim{disp_w / res.width_px, disp_h / res.height_px}; + sla::Resolution res{2560, 1440}; + sla::PixelDim pixdim{disp_w / res.width_px, disp_h / res.height_px}; double gamma = 1.; sla::RasterGrayscaleAAGammaPower raster(res, pixdim, {}, gamma); diff --git a/tests/sla_print/sla_test_utils.cpp b/tests/sla_print/sla_test_utils.cpp index 1082df200..d98a92037 100644 --- a/tests/sla_print/sla_test_utils.cpp +++ b/tests/sla_print/sla_test_utils.cpp @@ -307,8 +307,8 @@ void check_validity(const TriangleMesh &input_mesh, int flags) void check_raster_transformations(sla::RasterBase::Orientation o, sla::RasterBase::TMirroring mirroring) { double disp_w = 120., disp_h = 68.; - sla::RasterBase::Resolution res{2560, 1440}; - sla::RasterBase::PixelDim pixdim{disp_w / res.width_px, disp_h / res.height_px}; + sla::Resolution res{2560, 1440}; + sla::PixelDim pixdim{disp_w / res.width_px, disp_h / res.height_px}; auto bb = BoundingBox({0, 0}, {scaled(disp_w), scaled(disp_h)}); sla::RasterBase::Trafo trafo{o, mirroring}; @@ -400,7 +400,7 @@ double raster_white_area(const sla::RasterGrayscaleAA &raster) return a; } -double predict_error(const ExPolygon &p, const sla::RasterBase::PixelDim &pd) +double predict_error(const ExPolygon &p, const sla::PixelDim &pd) { auto lines = p.lines(); double pix_err = pixel_area(FullWhite, pd) / 2.; diff --git a/tests/sla_print/sla_test_utils.hpp b/tests/sla_print/sla_test_utils.hpp index 2264ad856..7171914d4 100644 --- a/tests/sla_print/sla_test_utils.hpp +++ b/tests/sla_print/sla_test_utils.hpp @@ -175,7 +175,7 @@ void check_raster_transformations(sla::RasterBase::Orientation o, ExPolygon square_with_hole(double v); -inline double pixel_area(TPixel px, const sla::RasterBase::PixelDim &pxdim) +inline double pixel_area(TPixel px, const sla::PixelDim &pxdim) { return (pxdim.h_mm * pxdim.w_mm) * px * 1. / (FullWhite - FullBlack); } @@ -183,7 +183,7 @@ inline double pixel_area(TPixel px, const sla::RasterBase::PixelDim &pxdim) double raster_white_area(const sla::RasterGrayscaleAA &raster); long raster_pxsum(const sla::RasterGrayscaleAA &raster); -double predict_error(const ExPolygon &p, const sla::RasterBase::PixelDim &pd); +double predict_error(const ExPolygon &p, const sla::PixelDim &pd); sla::SupportPoints calc_support_pts( const TriangleMesh & mesh, diff --git a/tests/slic3rutils/CMakeLists.txt b/tests/slic3rutils/CMakeLists.txt index be1b645d7..256e6efd6 100644 --- a/tests/slic3rutils/CMakeLists.txt +++ b/tests/slic3rutils/CMakeLists.txt @@ -15,4 +15,6 @@ if (WIN32) endif() # catch_discover_tests(${_TEST_NAME}_tests TEST_PREFIX "${_TEST_NAME}: ") -add_test(${_TEST_NAME}_tests ${_TEST_NAME}_tests "${CATCH_EXTRA_ARGS} exclude:[NotWorking]") +set(_catch_args "exclude:[NotWorking]") +list(APPEND _catch_args "${CATCH_EXTRA_ARGS}") +add_test(${_TEST_NAME}_tests ${_TEST_NAME}_tests ${_catch_args}) diff --git a/version.inc b/version.inc index b976d7d67..93b376323 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.4.1-beta1") +set(SLIC3R_VERSION "2.5.0-alpha0") set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN") -set(SLIC3R_RC_VERSION "2,4,1,0") -set(SLIC3R_RC_VERSION_DOTS "2.4.1.0") +set(SLIC3R_RC_VERSION "2,5,0,0") +set(SLIC3R_RC_VERSION_DOTS "2.5.0.0") diff --git a/xs/CMakeLists.txt b/xs/CMakeLists.txt index 962e2e04d..06fc98322 100644 --- a/xs/CMakeLists.txt +++ b/xs/CMakeLists.txt @@ -208,5 +208,45 @@ if (MSVC) else () set(PERL_PROVE "${PERL_BIN_PATH}/prove") endif () -add_test (NAME xs COMMAND "${PERL_EXECUTABLE}" ${PERL_PROVE} -I ${PERL_LOCAL_LIB_DIR}/lib/perl5 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) -add_test (NAME integration COMMAND "${PERL_EXECUTABLE}" ${PERL_PROVE} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/..) + +set(PERL_ENV_VARS "") +if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT CMAKE_CROSSCOMPILING AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")) + if (SLIC3R_ASAN OR SLIC3R_UBSAN) + set(PERL_ENV_VARS env) + endif () + + if (SLIC3R_ASAN) + # Find the location of libasan.so for passing it into LD_PRELOAD. It works with GCC and Clang on Linux. + # On Centos 7 calling "gcc -print-file-name=libasan.so" returns path to "ld script" instead of path to shared library. + set(_asan_compiled_bin ${CMAKE_CURRENT_BINARY_DIR}/detect_libasan) + set(_asan_source_file ${_asan_compiled_bin}.c) + # Compile and link simple C application with enabled address sanitizer. + file(WRITE ${_asan_source_file} "int main(){}") + include(GetPrerequisites) + execute_process(COMMAND ${CMAKE_C_COMPILER} ${_asan_source_file} -fsanitize=address -lasan -o ${_asan_compiled_bin}) + # Extract from the compiled application absolute path of libasan. + get_prerequisites(${_asan_compiled_bin} _asan_shared_libraries_list 0 0 "" "") + list(FILTER _asan_shared_libraries_list INCLUDE REGEX libasan) + set(PERL_ENV_VARS ${PERL_ENV_VARS} "LD_PRELOAD=${_asan_shared_libraries_list}") + + # Suppressed memory leak reports that come from Perl. + set(PERL_LEAK_SUPPRESSION_FILE ${CMAKE_CURRENT_BINARY_DIR}/leak_suppression.txt) + file(WRITE ${PERL_LEAK_SUPPRESSION_FILE} + "leak:Perl_safesysmalloc\n" + "leak:Perl_safesyscalloc\n" + "leak:Perl_safesysrealloc\n" + "leak:__newlocale\n") + + # Suppress a few memory leak reports and disable informing about suppressions. + # Print reports about memory leaks but exit with zero exit code when any memory leaks is found to make unit tests pass. + set(PERL_ENV_VARS ${PERL_ENV_VARS} "LSAN_OPTIONS=suppressions=${PERL_LEAK_SUPPRESSION_FILE}:print_suppressions=0:exitcode=0") + endif () + + if (SLIC3R_UBSAN) + # Do not show full stacktrace for reports from UndefinedBehaviorSanitizer in Perl tests. + set(PERL_ENV_VARS ${PERL_ENV_VARS} "UBSAN_OPTIONS=print_stacktrace=0") + endif () +endif () + +add_test (NAME xs COMMAND ${PERL_ENV_VARS} "${PERL_EXECUTABLE}" ${PERL_PROVE} -I ${PERL_LOCAL_LIB_DIR}/lib/perl5 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) +add_test (NAME integration COMMAND ${PERL_ENV_VARS} "${PERL_EXECUTABLE}" ${PERL_PROVE} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/..)