diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index e6a61029d5..d63a038ee7 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -74,7 +74,10 @@ jobs: brew list mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }} mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }}/OrcaSlicer_dep_${{ inputs.arch }} - ./build_release_macos.sh -dp -a ${{ inputs.arch }} + brew uninstall --ignore-dependencies zstd + ./build_release_macos.sh -dp -a ${{ inputs.arch }} -t 10.15 + brew install zstd + - name: Build on Ubuntu if: inputs.os == 'ubuntu-20.04' diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 3091966e97..a2e1a54614 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -76,15 +76,17 @@ jobs: - name: Install tools mac if: inputs.os == 'macos-12' run: | - brew install cmake git gettext zstd tree + brew install cmake git gettext tree + brew list mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}} mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}}/OrcaSlicer_dep_${{inputs.arch}} + tree ${{ github.workspace }}/deps/build_${{inputs.arch}}/OrcaSlicer_dep_${{inputs.arch}} - name: Build slicer mac if: inputs.os == 'macos-12' working-directory: ${{ github.workspace }} run: | - ./build_release_macos.sh -s -n -a ${{inputs.arch}} + ./build_release_macos.sh -s -n -a ${{inputs.arch}} -t 10.15 # Thanks to RaySajuuk, it's working now - name: Sign app and notary diff --git a/.gitignore b/.gitignore index a4a9356f3e..764f60d71e 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ src/OrcaSlicer-doc/ **/process_full/ **/machine_full/ **/filament_full/ +/deps/DL_CACHE/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index c546b087b0..aa53ba06ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,12 @@ cmake_minimum_required(VERSION 3.13) + +if (APPLE) + # if CMAKE_OSX_DEPLOYMENT_TARGET is not set, set it to 11.3 + if (NOT CMAKE_OSX_DEPLOYMENT_TARGET) + set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version") + endif () +endif () + project(OrcaSlicer) include("version.inc") @@ -52,9 +60,10 @@ if (APPLE) if (CMAKE_MACOSX_BUNDLE) set(CMAKE_INSTALL_RPATH @executable_path/../Frameworks) endif() - set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version" FORCE) + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE) SET(CMAKE_XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.softfever3d.orca-slicer") + message(STATUS "Orca: IS_CROSS_COMPILE: ${IS_CROSS_COMPILE}") endif () # Proposal for C++ unit tests and sandboxes @@ -332,6 +341,16 @@ if(CMAKE_CXX_FLAGS_RELWITHDEBINFO MATCHES "/O2") string(REGEX REPLACE "/O2" "/Od" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") endif() +if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + if(CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES "-O2") + string(REGEX REPLACE "-O2" "-O0" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + endif() + + if(CMAKE_CXX_FLAGS_RELWITHDEBINFO MATCHES "-O2") + string(REGEX REPLACE "-O2" "-O0" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + endif() +endif() + if(MSVC) if(CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES "/Ob1") string(REGEX REPLACE "/Ob1" "/Ob0" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") @@ -426,11 +445,8 @@ find_package(TBB REQUIRED) # add_definitions(-DTBB_USE_CAPTURED_EXCEPTION=0) find_package(OpenSSL REQUIRED) -if (APPLE) -find_package(CURL CONFIG REQUIRED) -else() find_package(CURL REQUIRED) -endif() + add_library(libcurl INTERFACE) target_link_libraries(libcurl INTERFACE CURL::libcurl) @@ -499,6 +515,8 @@ find_package(PNG REQUIRED) set(OpenGL_GL_PREFERENCE "LEGACY") find_package(OpenGL REQUIRED) +set(GLEW_ROOT "${CMAKE_PREFIX_PATH}") +message("GLEW_ROOT: ${GLEW_ROOT}") # Find glew or use bundled version if (SLIC3R_STATIC AND NOT SLIC3R_STATIC_EXCLUDE_GLEW) set(GLEW_USE_STATIC_LIBS ON) @@ -776,4 +794,4 @@ set (CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE.txt) # must also in set(CPACK_WIX_UPGRADE_GUID "058245e8-20e0-4a95-9ab7-1acfe17ad511") set(CPACK_GENERATOR NSIS) -include(CPack) \ No newline at end of file +include(CPack) diff --git a/README.md b/README.md index 7399b37e40..209a4428bb 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Orca Slicer's logo is designed by community member Justin Levine(@freejstnalxndr **Mac**: 1. Download the DMG for your computer: `arm64` version for Apple Silicon and `x86_64` for Intel CPU. 2. Drag OrcaSlicer.app to Application folder. -3. *If you want to run a build from a PR, you also need following instructions bellow* +3. *If you want to run a build from a PR, you also need following instructions below*
- Option 1 (You only need to do this once. After that the app can be opened normally.): - Step 1: Hold _cmd_ and right click the app, from the context menu choose **Open**. diff --git a/build_release_macos.sh b/build_release_macos.sh index a9defeaf24..01ddefd833 100755 --- a/build_release_macos.sh +++ b/build_release_macos.sh @@ -1,6 +1,6 @@ #!/bin/sh -while getopts ":a:sdphn" opt; do +while getopts ":a:sdpt:hn" opt; do case ${opt} in d ) export BUILD_TARGET="deps" @@ -17,11 +17,15 @@ while getopts ":a:sdphn" opt; do n ) export NIGHTLY_BUILD="1" ;; + t ) + export OSX_DEPLOYMENT_TARGET="$OPTARG" + ;; h ) echo "Usage: ./build_release_macos.sh [-d]" echo " -d: Build deps only" echo " -a: Set ARCHITECTURE (arm64 or x86_64)" echo " -s: Build slicer only" echo " -n: Nightly build" + echo " -t: Specify minimum version of the target platform, default is 11.3" exit 0 ;; esac @@ -34,19 +38,20 @@ fi echo "Arch: $ARCH" echo "BUILD_TARGET: $BUILD_TARGET" +echo "OSX_DEPLOYMENT_TARGET: $OSX_DEPLOYMENT_TARGET" +# if which -s brew; then +# brew --prefix libiconv +# brew --prefix zstd +# export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix zstd)/lib/ +# elif which -s port; then +# port install libiconv +# port install zstd +# export LIBRARY_PATH=$LIBRARY_PATH:/opt/local/lib +# else +# echo "Need either brew or macports to successfully build deps" +# exit 1 +# fi -if which -s brew; then - brew --prefix libiconv - brew --prefix zstd - export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix zstd)/lib/ -elif which -s port; then - port install libiconv - port install zstd - export LIBRARY_PATH=$LIBRARY_PATH:/opt/local/lib -else - echo "Need either brew or macports to successfully build deps" - exit 1 -fi WD="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd $WD/deps @@ -57,8 +62,8 @@ mkdir -p $DEPS if [ "slicer." != $BUILD_TARGET. ]; then echo "building deps..." - echo "cmake ../ -DDESTDIR=$DEPS -DOPENSSL_ARCH=darwin64-${ARCH}-cc -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH}" - cmake ../ -DDESTDIR="$DEPS" -DOPENSSL_ARCH="darwin64-${ARCH}-cc" -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH} + echo "cmake ../ -DDESTDIR=$DEPS -DOPENSSL_ARCH=darwin64-${ARCH}-cc -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH} -DCMAKE_OSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET}" + cmake ../ -DDESTDIR="$DEPS" -DOPENSSL_ARCH="darwin64-${ARCH}-cc" -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH} -DCMAKE_OSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET} cmake --build . --config Release --target deps if [ "1." == "$PACK_DEPS". ]; then @@ -76,7 +81,7 @@ cd $WD mkdir -p build_$ARCH cd build_$ARCH echo "building slicer..." -cmake .. -GXcode -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="$DEPS/usr/local" -DCMAKE_INSTALL_PREFIX="$PWD/OrcaSlicer" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="$DEPS/usr/local" -DCMAKE_MACOSX_BUNDLE=ON -DCMAKE_OSX_ARCHITECTURES=${ARCH} +cmake .. -GXcode -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="$DEPS/usr/local" -DCMAKE_INSTALL_PREFIX="$PWD/OrcaSlicer" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="$DEPS/usr/local" -DCMAKE_MACOSX_BUNDLE=ON -DCMAKE_OSX_ARCHITECTURES=${ARCH} -DCMAKE_OSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET} cmake --build . --config Release --target ALL_BUILD cd .. ./run_gettext.sh diff --git a/cmake/modules/FindGLEW.cmake b/cmake/modules/FindGLEW.cmake index dc1faeca14..432d731d28 100644 --- a/cmake/modules/FindGLEW.cmake +++ b/cmake/modules/FindGLEW.cmake @@ -64,16 +64,6 @@ This module defines the following variables: include(FindPackageHandleStandardArgs) -find_package(GLEW CONFIG QUIET) - -if(GLEW_FOUND) - find_package_handle_standard_args(GLEW DEFAULT_MSG GLEW_CONFIG) - return() -endif() - -if(GLEW_VERBOSE) - message(STATUS "FindGLEW: did not find GLEW CMake config file. Searching for libraries.") -endif() if(APPLE) find_package(OpenGL QUIET) diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 192552a6a3..4352668633 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -20,8 +20,15 @@ # therefore, unfortunatelly, the installation cannot be copied/moved elsewhere without re-installing wxWidgets. # -project(OrcaSlicer-deps) cmake_minimum_required(VERSION 3.2) +if (APPLE) + # if CMAKE_OSX_DEPLOYMENT_TARGET is not set, set it to 11.3 + if (NOT CMAKE_OSX_DEPLOYMENT_TARGET) + set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version") + endif () +endif () + +project(OrcaSlicer-deps) include(ExternalProject) include(ProcessorCount) @@ -32,7 +39,7 @@ if (NPROC EQUAL 0) endif () set(DESTDIR "${CMAKE_CURRENT_BINARY_DIR}/destdir" CACHE PATH "Destination directory") -set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/DL_CACHE CACHE PATH "Path for downloaded source packages.") +set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/../DL_CACHE CACHE PATH "Path for downloaded source packages.") option(DEP_DEBUG "Build debug variants (only applicable on Windows)" OFF) @@ -163,7 +170,7 @@ if (MSVC) endif () elseif (APPLE) message("OS X SDK Path: ${CMAKE_OSX_SYSROOT}") - set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version" FORCE) + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE) if (CMAKE_OSX_DEPLOYMENT_TARGET) set(DEP_OSX_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET}") message("OS X Deployment Target: ${DEP_OSX_TARGET}") @@ -236,7 +243,6 @@ endif () include(JPEG/JPEG.cmake) include(TIFF/TIFF.cmake) -include(NanoSVG/NanoSVG.cmake) include(wxWidgets/wxWidgets.cmake) include(OCCT/OCCT.cmake) include(FREETYPE/FREETYPE.cmake) diff --git a/deps/JPEG/JPEG.cmake b/deps/JPEG/JPEG.cmake index 6fe081b565..82b0ca5565 100644 --- a/deps/JPEG/JPEG.cmake +++ b/deps/JPEG/JPEG.cmake @@ -12,8 +12,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux") endif() orcaslicer_add_cmake_project(JPEG - URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.0.6.zip - URL_HASH SHA256=017bdc33ff3a72e11301c0feb4657cb27719d7f97fa67a78ed506c594218bbf1 + URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/3.0.1.zip + URL_HASH SHA256=d6d99e693366bc03897677650e8b2dfa76b5d6c54e2c9e70c03f0af821b0a52f DEPENDS ${ZLIB_PKG} CMAKE_ARGS -DENABLE_SHARED=OFF diff --git a/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch b/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch new file mode 100644 index 0000000000..325b933f66 --- /dev/null +++ b/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch @@ -0,0 +1,743 @@ +From 5e82980ed1762338794d06b3f9f22fa10e050622 Mon Sep 17 00:00:00 2001 +From: SoftFever +Date: Sat, 23 Dec 2023 20:08:41 +0800 +Subject: [PATCH] wx 3.1.5 patch for Orca + +--- + build/cmake/init.cmake | 4 ++ + build/cmake/lib/webview/CMakeLists.txt | 4 +- + include/wx/fontutil.h | 15 +++++++- + include/wx/gdicmn.h | 3 ++ + include/wx/generic/grid.h | 4 +- + include/wx/msw/font.h | 2 +- + include/wx/msw/tooltip.h | 4 +- + include/wx/osx/app.h | 2 +- + src/common/combocmn.cpp | 13 +++++-- + src/common/datavcmn.cpp | 6 ++- + src/common/dcbufcmn.cpp | 8 +++- + src/common/gdicmn.cpp | 14 +++++++ + src/common/image.cpp | 6 +-- + src/common/intl.cpp | 7 ++++ + src/generic/grid.cpp | 53 +++++++++++++++++++++----- + src/msw/bmpcbox.cpp | 9 ++++- + src/msw/font.cpp | 14 +++---- + src/msw/menuitem.cpp | 2 + + src/msw/window.cpp | 52 ++++++++++++++++--------- + src/osx/cocoa/dataview.mm | 26 +++++++++++-- + src/osx/cocoa/settings.mm | 6 +-- + src/osx/cocoa/window.mm | 4 ++ + 22 files changed, 199 insertions(+), 59 deletions(-) + +diff --git a/build/cmake/init.cmake b/build/cmake/init.cmake +index 0bc4f934b9..479431a69c 100644 +--- a/build/cmake/init.cmake ++++ b/build/cmake/init.cmake +@@ -413,7 +413,11 @@ if(wxUSE_GUI) + else() + find_package(OpenGL) + if(WXGTK3 AND OpenGL_EGL_FOUND AND wxUSE_GLCANVAS_EGL) ++ if(UNIX AND NOT APPLE) ++ set(OPENGL_LIBRARIES OpenGL EGL) ++ else() + set(OPENGL_LIBRARIES OpenGL::OpenGL OpenGL::EGL) ++ endif() + find_package(WAYLANDEGL) + if(WAYLANDEGL_FOUND AND wxHAVE_GDK_WAYLAND) + list(APPEND OPENGL_LIBRARIES ${WAYLANDEGL_LIBRARIES}) +diff --git a/build/cmake/lib/webview/CMakeLists.txt b/build/cmake/lib/webview/CMakeLists.txt +index cc3298ff33..aa103ae474 100644 +--- a/build/cmake/lib/webview/CMakeLists.txt ++++ b/build/cmake/lib/webview/CMakeLists.txt +@@ -56,9 +56,9 @@ if(APPLE) + elseif(WXMSW) + if(wxUSE_WEBVIEW_EDGE) + # Update the following variables if updating WebView2 SDK +- set(WEBVIEW2_VERSION "1.0.705.50") ++ set(WEBVIEW2_VERSION "1.0.1418.22") + set(WEBVIEW2_URL "https://www.nuget.org/api/v2/package/Microsoft.Web.WebView2/${WEBVIEW2_VERSION}") +- set(WEBVIEW2_SHA256 "6a34bb553e18cfac7297b4031f3eac2558e439f8d16a45945c22945ac404105d") ++ set(WEBVIEW2_SHA256 "51d2ef56196e2a9d768a6843385bcb9c6baf9ed34b2603ddb074fb4995543a99") + + set(WEBVIEW2_DEFAULT_PACKAGE_DIR "${CMAKE_BINARY_DIR}/packages/Microsoft.Web.WebView2.${WEBVIEW2_VERSION}") + +diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h +index 09ad8c8ef3..c228e167d7 100644 +--- a/include/wx/fontutil.h ++++ b/include/wx/fontutil.h +@@ -294,7 +294,11 @@ public: + wxFontEncoding GetEncoding() const; + + void SetPointSize(int pointsize); +- void SetFractionalPointSize(double pointsize); ++ void SetFractionalPointSize(double pointsize ++#if defined(__WXMSW__) ++ , const wxWindow *window = nullptr ++#endif ++ ); + void SetPixelSize(const wxSize& pixelSize); + void SetStyle(wxFontStyle style); + void SetNumericWeight(int weight); +@@ -307,12 +311,19 @@ public: + + // Helper used in many ports: use the normal font size if the input is + // negative, as we handle -1 as meaning this for compatibility. +- void SetSizeOrDefault(double size) ++ void SetSizeOrDefault(double size ++#if defined(__WXMSW__) ++ , const wxWindow *window = nullptr ++#endif ++ ) + { + SetFractionalPointSize + ( + size < 0 ? wxNORMAL_FONT->GetFractionalPointSize() + : size ++#if defined(__WXMSW__) ++ ,window ++#endif + ); + } + +diff --git a/include/wx/gdicmn.h b/include/wx/gdicmn.h +index e29a77627c..dc48cf9451 100644 +--- a/include/wx/gdicmn.h ++++ b/include/wx/gdicmn.h +@@ -38,6 +38,7 @@ class WXDLLIMPEXP_FWD_CORE wxRegion; + class WXDLLIMPEXP_FWD_BASE wxString; + class WXDLLIMPEXP_FWD_CORE wxIconBundle; + class WXDLLIMPEXP_FWD_CORE wxPoint; ++class WXDLLIMPEXP_FWD_CORE wxWindow; + + // --------------------------------------------------------------------------- + // constants +@@ -1092,7 +1093,9 @@ extern int WXDLLIMPEXP_CORE wxDisplayDepth(); + + // get the display size + extern void WXDLLIMPEXP_CORE wxDisplaySize(int *width, int *height); ++extern void WXDLLIMPEXP_CORE wxDisplaySize(const wxWindow *window, int *width, int *height); + extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(); ++extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(const wxWindow *window); + extern void WXDLLIMPEXP_CORE wxDisplaySizeMM(int *width, int *height); + extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySizeMM(); + extern wxSize WXDLLIMPEXP_CORE wxGetDisplayPPI(); +diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h +index d7a3890764..e4dee51d5a 100644 +--- a/include/wx/generic/grid.h ++++ b/include/wx/generic/grid.h +@@ -2951,9 +2951,11 @@ private: + wxGridWindow* gridWindow); + + // Update the width/height of the column/row being drag-resized. ++ //BBS: add cursor mode for DoGridDragResize's paremeters + void DoGridDragResize(const wxPoint& position, + const wxGridOperations& oper, +- wxGridWindow* gridWindow); ++ wxGridWindow* gridWindow, ++ CursorMode mode); + + // process different clicks on grid cells + void DoGridCellLeftDown(wxMouseEvent& event, +diff --git a/include/wx/msw/font.h b/include/wx/msw/font.h +index 0f9768b44e..094d774918 100644 +--- a/include/wx/msw/font.h ++++ b/include/wx/msw/font.h +@@ -23,7 +23,7 @@ public: + // ctors and such + wxFont() { } + +- wxFont(const wxFontInfo& info); ++ wxFont(const wxFontInfo& info, const wxWindow *window = nullptr); + + wxFont(int size, + wxFontFamily family, +diff --git a/include/wx/msw/tooltip.h b/include/wx/msw/tooltip.h +index 4c3be08cec..96fb378d01 100644 +--- a/include/wx/msw/tooltip.h ++++ b/include/wx/msw/tooltip.h +@@ -91,10 +91,10 @@ private: + // the one and only one tooltip control we use - never access it directly + // but use GetToolTipCtrl() which will create it when needed + static WXHWND ms_hwndTT; +- ++public: + // create the tooltip ctrl if it doesn't exist yet and return its HWND + static WXHWND GetToolTipCtrl(); +- ++private: + // to be used in wxModule for deleting tooltip ctrl window when exiting mainloop + static void DeleteToolTipCtrl(); + +diff --git a/include/wx/osx/app.h b/include/wx/osx/app.h +index 317a0ca96f..58014ec1d4 100644 +--- a/include/wx/osx/app.h ++++ b/include/wx/osx/app.h +@@ -161,7 +161,7 @@ private: + + public: + bool OSXInitWasCalled() { return m_inited; } +- void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } ++ virtual void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } + void OSXStorePrintFiles(const wxArrayString &files ) { m_printFiles = files ; } + void OSXStoreOpenURL(const wxString &url ) { m_getURL = url ; } + #endif +diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp +index b61aac35bf..7cfc97d2f8 100644 +--- a/src/common/combocmn.cpp ++++ b/src/common/combocmn.cpp +@@ -2141,7 +2141,7 @@ void wxComboCtrlBase::CreatePopup() + #if !USES_GENERICTLW + m_winPopup = new wxComboPopupWindowBase2( this, wxNO_BORDER ); + #else +- int tlwFlags = wxNO_BORDER; ++ int tlwFlags = wxNO_BORDER | wxSTAY_ON_TOP; + #ifdef wxCC_GENERIC_TLW_IS_FRAME + tlwFlags |= wxFRAME_NO_TASKBAR; + #endif +@@ -2285,6 +2285,9 @@ void wxComboCtrlBase::ShowPopup() + + SetFocus(); + ++ //int displayIdx = wxDisplay::GetFromWindow(this); ++ //wxRect displayRect = wxDisplay(displayIdx != wxNOT_FOUND ? displayIdx : 0u).GetGeometry(); ++ + // Space above and below + int screenHeight; + wxPoint scrPos; +@@ -2407,9 +2410,13 @@ void wxComboCtrlBase::ShowPopup() + + int showFlags = CanDeferShow; + +- if ( spaceBelow < szp.y ) ++ int anchorSideVertical = m_anchorSide & (wxUP | wxDOWN); ++ if (// Pop up as asked for by the library user. ++ (anchorSideVertical & wxUP) || ++ // Automatic: Pop up if it does not fit down. ++ (anchorSideVertical == 0 && spaceBelow < szp.y )) + { +- popupY = scrPos.y - szp.y; ++ popupY = scrPos.y - szp.y + displayRect.GetTop(); + showFlags |= ShowAbove; + } + +diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp +index 1f5fd4d66b..14ea2f8ef1 100644 +--- a/src/common/datavcmn.cpp ++++ b/src/common/datavcmn.cpp +@@ -1322,7 +1322,11 @@ wxDataViewItem wxDataViewCtrlBase::GetSelection() const + + wxDataViewItemArray selections; + GetSelections(selections); +- return selections[0]; ++ // BBS ++ if (!selections.empty()) ++ return selections[0]; ++ else ++ return wxDataViewItem(0); + } + + namespace +diff --git a/src/common/dcbufcmn.cpp b/src/common/dcbufcmn.cpp +index 74958fce10..59844f4526 100644 +--- a/src/common/dcbufcmn.cpp ++++ b/src/common/dcbufcmn.cpp +@@ -82,9 +82,15 @@ private: + const double scale = dc ? dc->GetContentScaleFactor() : 1.0; + wxBitmap* const buffer = new wxBitmap; + ++#if __WXMSW__ + // we must always return a valid bitmap but creating a bitmap of + // size 0 would fail, so create a 1*1 bitmap in this case +- buffer->CreateScaled(wxMax(w, 1), wxMax(h, 1), -1, scale); ++ buffer->Create(wxMax(w, 1), wxMax(h, 1), 24); ++#else ++ // we must always return a valid bitmap but creating a bitmap of ++ // size 0 would fail, so create a 1*1 bitmap in this case ++ buffer->CreateScaled(wxMax(w, 1), wxMax(h, 1), -1, scale); ++#endif + + return buffer; + } +diff --git a/src/common/gdicmn.cpp b/src/common/gdicmn.cpp +index 20442bbc73..bc2c35bee6 100644 +--- a/src/common/gdicmn.cpp ++++ b/src/common/gdicmn.cpp +@@ -863,11 +863,25 @@ void wxDisplaySize(int *width, int *height) + *height = size.y; + } + ++void wxDisplaySize(const wxWindow *window, int *width, int *height) ++{ ++ const wxSize size = wxGetDisplaySize(window); ++ if ( width ) ++ *width = size.x; ++ if ( height ) ++ *height = size.y; ++} ++ + wxSize wxGetDisplaySize() + { + return wxDisplay().GetGeometry().GetSize(); + } + ++wxSize wxGetDisplaySize(const wxWindow *window) ++{ ++ return window ? wxDisplay(window).GetGeometry().GetSize() : wxDisplay().GetGeometry().GetSize(); ++} ++ + void wxClientDisplayRect(int *x, int *y, int *width, int *height) + { + const wxRect rect = wxGetClientDisplayRect(); +diff --git a/src/common/image.cpp b/src/common/image.cpp +index 78fe5b82a3..46db8722ce 100644 +--- a/src/common/image.cpp ++++ b/src/common/image.cpp +@@ -383,11 +383,11 @@ wxImage wxImage::ShrinkBy( int xFactor , int yFactor ) const + unsigned char red = pixel[0] ; + unsigned char green = pixel[1] ; + unsigned char blue = pixel[2] ; +- unsigned char alpha = 255 ; +- if ( source_alpha ) +- alpha = *(source_alpha + y_offset + x * xFactor + x1) ; + if ( !hasMask || red != maskRed || green != maskGreen || blue != maskBlue ) + { ++ unsigned char alpha = 255 ; ++ if ( source_alpha ) ++ alpha = *(source_alpha + y_offset + x * xFactor + x1) ; + if ( alpha > 0 ) + { + avgRed += red ; +diff --git a/src/common/intl.cpp b/src/common/intl.cpp +index 0b0d8798f4..294f542b1f 100644 +--- a/src/common/intl.cpp ++++ b/src/common/intl.cpp +@@ -1628,6 +1628,12 @@ GetInfoFromLCID(LCID lcid, + { + str = buf; + ++//FIXME Vojtech: We forcefully set the locales for a decimal point to "C", but this ++// is not possible for the Win32 locales, therefore there is a discrepancy. ++// It looks like we live with the discrepancy for at least half a year, so we will ++// suppress the assert until we fix Slic3r to properly switch to "C" locales just ++// for file import / export. ++#if 0 + // As we get our decimal point separator from Win32 and not the + // CRT there is a possibility of mismatch between them and this + // can easily happen if the user code called setlocale() +@@ -1641,6 +1647,7 @@ GetInfoFromLCID(LCID lcid, + "Decimal separator mismatch -- did you use setlocale()?" + "If so, use wxLocale to change the locale instead." + ); ++#endif + } + break; + +diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp +index 41fd4524cf..f4a15cb839 100644 +--- a/src/generic/grid.cpp ++++ b/src/generic/grid.cpp +@@ -3824,7 +3824,8 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event, wxGridRowLabelWindo + { + case WXGRID_CURSOR_RESIZE_ROW: + { +- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); ++ //BBS: add cursor mode for DoGridDragResize's paremeters ++ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); + } + break; + +@@ -4166,7 +4167,8 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event, wxGridColLabelWindo + switch ( m_cursorMode ) + { + case WXGRID_CURSOR_RESIZE_COL: +- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); ++ //BBS: add cursor mode for DoGridDragResize's paremeters ++ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); + break; + + case WXGRID_CURSOR_SELECT_COL: +@@ -4708,11 +4710,13 @@ bool wxGrid::DoGridDragEvent(wxMouseEvent& event, + return DoGridCellDrag(event, coords, isFirstDrag); + + case WXGRID_CURSOR_RESIZE_ROW: +- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); ++ //BBS: add cursor mode for DoGridDragResize's paremeters ++ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); + break; + + case WXGRID_CURSOR_RESIZE_COL: +- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); ++ //BBS: add cursor mode for DoGridDragResize's paremeters ++ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); + break; + + default: +@@ -4803,6 +4807,8 @@ wxGrid::DoGridCellLeftDown(wxMouseEvent& event, + case wxGridSelectCells: + case wxGridSelectRowsOrColumns: + // nothing to do in these cases ++ //BBS: select this cell when first click ++ m_selection->SelectBlock(coords.GetRow(), coords.GetCol(), coords.GetRow(), coords.GetCol(), event); + break; + + case wxGridSelectRows: +@@ -5044,9 +5050,11 @@ void wxGrid::ProcessGridCellMouseEvent(wxMouseEvent& event, wxGridWindow *eventG + } + } + ++//BBS: add cursor mode for DoGridDragResize's paremeters + void wxGrid::DoGridDragResize(const wxPoint& position, + const wxGridOperations& oper, +- wxGridWindow* gridWindow) ++ wxGridWindow* gridWindow, ++ CursorMode mode) + { + // Get the logical position from the physical one we're passed. + const wxPoint +@@ -5056,10 +5064,28 @@ void wxGrid::DoGridDragResize(const wxPoint& position, + // orthogonal direction. + const int linePos = oper.Dual().Select(logicalPos); + +- const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol); +- oper.SetLineSize(this, m_dragRowOrCol, ++ //BBS: add logic for resize multiplexed cols ++ if (mode == WXGRID_CURSOR_RESIZE_COL) { ++ int col_to_resize = m_dragRowOrCol; ++ int num_rows, num_cols; ++ this->GetCellSize(0, m_dragRowOrCol, &num_rows, &num_cols); ++ if (num_cols < 1) ++ col_to_resize = m_dragRowOrCol - 1; ++ ++ const int lineEnd = oper.GetLineEndPos(this, m_dragRowOrCol); ++ const int lineSize = oper.GetLineSize(this, col_to_resize); ++ int size = linePos - lineEnd + lineSize; ++ oper.SetLineSize(this, col_to_resize, ++ wxMax(size, ++ oper.GetMinimalLineSize(this, col_to_resize))); ++ } ++ else { ++ const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol); ++ ++ oper.SetLineSize(this, m_dragRowOrCol, + wxMax(linePos - lineStart, + oper.GetMinimalLineSize(this, m_dragRowOrCol))); ++ } + + // TODO: generate RESIZING event, see #10754, if the size has changed. + } +@@ -5082,7 +5108,8 @@ wxPoint wxGrid::GetPositionForResizeEvent(int width) const + + void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWindow) + { +- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); ++ //BBS: add cursor mode for DoGridDragResize's paremeters ++ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); + + SendGridSizeEvent(wxEVT_GRID_ROW_SIZE, m_dragRowOrCol, -1, event); + +@@ -5091,7 +5118,8 @@ void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWin + + void wxGrid::DoEndDragResizeCol(const wxMouseEvent& event, wxGridWindow* gridWindow) + { +- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); ++ //BBS: add cursor mode for DoGridDragResize's paremeters ++ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); + + SendGridSizeEvent(wxEVT_GRID_COL_SIZE, -1, m_dragRowOrCol, event); + +@@ -5105,9 +5133,10 @@ void wxGrid::DoHeaderStartDragResizeCol(int col) + + void wxGrid::DoHeaderDragResizeCol(int width) + { ++ //BBS: add cursor mode for DoGridDragResize's paremeters + DoGridDragResize(GetPositionForResizeEvent(width), + wxGridColumnOperations(), +- m_gridWin); ++ m_gridWin, WXGRID_CURSOR_RESIZE_COL); + } + + void wxGrid::DoHeaderEndDragResizeCol(int width) +@@ -5891,6 +5920,10 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) + DisableCellEditControl(); + + MoveCursorDown( event.ShiftDown() ); ++ //BBS: select this cell when first click ++ m_selection->SelectBlock(m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(), ++ m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(), ++ event); + } + break; + +diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp +index 0a2d167ad7..0aeba45ea9 100644 +--- a/src/msw/bmpcbox.cpp ++++ b/src/msw/bmpcbox.cpp +@@ -156,13 +156,20 @@ void wxBitmapComboBox::RecreateControl() + + wxComboBox::DoClear(); + +- HWND hwnd = GetHwnd(); ++ WNDPROC wndproc_edit = nullptr; ++ WinStruct combobox_info; ++ HWND hwnd = GetHwnd(); ++if (::GetComboBoxInfo(hwnd, &combobox_info)) ++ wndproc_edit = (WNDPROC)wxGetWindowProc(combobox_info.hwndItem); + DissociateHandle(); + ::DestroyWindow(hwnd); + + if ( !MSWCreateControl(wxT("COMBOBOX"), wxEmptyString, pos, size) ) + return; + ++if (::GetComboBoxInfo(GetHwnd(), &combobox_info)) ++ wxSetWindowProc(combobox_info.hwndItem, wndproc_edit); ++ + // initialize the controls contents + for ( i = 0; i < numItems; i++ ) + { +diff --git a/src/msw/font.cpp b/src/msw/font.cpp +index 0bd240d79f..d38b1b00f5 100644 +--- a/src/msw/font.cpp ++++ b/src/msw/font.cpp +@@ -54,7 +54,7 @@ static const int PITCH_MASK = FIXED_PITCH | VARIABLE_PITCH; + class WXDLLEXPORT wxFontRefData: public wxGDIRefData + { + public: +- wxFontRefData(const wxFontInfo& info = wxFontInfo()); ++ wxFontRefData(const wxFontInfo& info = wxFontInfo(), const wxWindow* window = nullptr); + + wxFontRefData(const wxNativeFontInfo& info, WXHFONT hFont = 0) + { +@@ -324,7 +324,7 @@ protected: + // wxFontRefData + // ---------------------------------------------------------------------------- + +-wxFontRefData::wxFontRefData(const wxFontInfo& info) ++wxFontRefData::wxFontRefData(const wxFontInfo& info, const wxWindow *window) + { + m_hFont = NULL; + +@@ -335,7 +335,7 @@ wxFontRefData::wxFontRefData(const wxFontInfo& info) + } + else + { +- m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize()); ++ m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize(), window); + } + + SetStyle(info.GetStyle()); +@@ -518,12 +518,12 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const + return wxGetFontEncFromCharSet(lf.lfCharSet); + } + +-void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew) ++void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew, const wxWindow *window) + { + // We don't have the correct DPI to use here, so use that of the + // primary screen and rely on WXAdjustToPPI() changing it later if + // necessary. +- const int ppi = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); ++ const int ppi = window ? window->GetDPI().GetY() : ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); + lf.lfHeight = GetLogFontHeightAtPPI(pointSizeNew, ppi); + + pointSize = pointSizeNew; +@@ -812,9 +812,9 @@ wxFont::wxFont(const wxString& fontdesc) + (void)Create(info); + } + +-wxFont::wxFont(const wxFontInfo& info) ++wxFont::wxFont(const wxFontInfo& info, const wxWindow *window) + { +- m_refData = new wxFontRefData(info); ++ m_refData = new wxFontRefData(info, window); + } + + bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont) +diff --git a/src/msw/menuitem.cpp b/src/msw/menuitem.cpp +index 9bb397d472..30af7154a7 100644 +--- a/src/msw/menuitem.cpp ++++ b/src/msw/menuitem.cpp +@@ -368,6 +368,8 @@ void MenuDrawData::Init(wxWindow const* window) + // native menu uses small top margin for separator + if ( SeparatorMargin.cyTopHeight >= 2 ) + SeparatorMargin.cyTopHeight -= 2; ++ ++ SeparatorSize.cy = 0; + } + else + #endif // wxUSE_UXTHEME +diff --git a/src/msw/window.cpp b/src/msw/window.cpp +index eadc2f5700..f64fea4446 100644 +--- a/src/msw/window.cpp ++++ b/src/msw/window.cpp +@@ -4773,33 +4773,49 @@ static wxSize GetWindowDPI(HWND hwnd) + } + + /*extern*/ +-int wxGetSystemMetrics(int nIndex, const wxWindow* window) ++int wxGetSystemMetrics(int nIndex, const wxWindow* win) + { + #if wxUSE_DYNLIB_CLASS +- if ( !window ) +- window = wxApp::GetMainTopWindow(); ++ const wxWindow* window = (!win && wxTheApp) ? wxTheApp->GetTopWindow() : win; + +- if ( window ) ++ if (window) + { +- typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi); +- static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL; +- static bool s_initDone = false; +- +- if ( !s_initDone ) +- { +- wxLoadedDLL dllUser32("user32.dll"); +- wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32); +- s_initDone = true; ++#if 1 ++ if (window->GetHWND() && (nIndex == SM_CXSCREEN || nIndex == SM_CYSCREEN)) { ++ HDC hdc = GetDC(window->GetHWND()); ++#if 0 ++ double dim = GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES); ++ ReleaseDC(window->GetHWND(), hdc); ++ wxSize dpi = window->GetDPI(); ++ dim *= 96.0 / (nIndex == SM_CXSCREEN ? dpi.x : dpi.y); ++ return int(dim + 0.5); ++#else ++ return int(GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES)); ++#endif + } +- +- if ( s_pfnGetSystemMetricsForDpi ) ++ else ++#endif + { +- const int dpi = window->GetDPI().y; +- return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi); ++ typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi); ++ static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL; ++ static bool s_initDone = false; ++ ++ if ( !s_initDone ) ++ { ++ wxLoadedDLL dllUser32("user32.dll"); ++ wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32); ++ s_initDone = true; ++ } ++ ++ if ( s_pfnGetSystemMetricsForDpi ) ++ { ++ const int dpi = window->GetDPI().y; ++ return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi); ++ } + } + } + #else +- wxUnusedVar(window); ++ wxUnusedVar(win); + #endif // wxUSE_DYNLIB_CLASS + + return ::GetSystemMetrics(nIndex); +diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm +index 6ff0cc3088..4943f3ea38 100644 +--- a/src/osx/cocoa/dataview.mm ++++ b/src/osx/cocoa/dataview.mm +@@ -1734,12 +1734,22 @@ outlineView:(NSOutlineView*)outlineView + if ( !dvc->GetEventHandler()->ProcessEvent(eventDV) ) + [super keyDown:event]; + } +- else ++ //FIXME Vojtech's hack to get the accelerators assigned to the wxDataViewControl working. ++ else if (! implementation->DoHandleKeyEvent(event)) + { + [super keyDown:event]; // all other keys + } + } + ++//FIXME Vojtech: This is a workaround to get at least the "mouse move" events at the wxDataViewControl, ++// so we can show the tooltips. The "mouse move" events are being send only if the wxDataViewControl ++// has focus, which is a limitation of wxWidgets. We may grab focus on "mouse entry" though. ++- (void)mouseMoved:(NSEvent *)event ++{ ++if (! implementation->DoHandleMouseEvent(event)) ++ [super mouseMoved:event]; ++} ++ + // + // contextual menus + // +@@ -2672,12 +2682,22 @@ void wxCocoaDataViewControl::DoSetIndent(int indent) + + void wxCocoaDataViewControl::HitTest(const wxPoint& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const + { +- NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(),point); ++ NSTableHeaderView *headerView = [m_OutlineView headerView]; ++ if (headerView && point.y < headerView.visibleRect.size.height) { ++ // The point is inside the header area. ++ columnPtr = NULL; ++ item = wxDataViewItem(); ++ return; ++ } ++ // Convert from the window coordinates to the virtual scrolled view coordinates. ++ NSScrollView *scrollView = [m_OutlineView enclosingScrollView]; ++ const NSRect &visibleRect = scrollView.contentView.visibleRect; ++ NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(), ++ wxPoint(point.x + visibleRect.origin.x, point.y + visibleRect.origin.y)); + + int indexColumn; + int indexRow; + +- + indexColumn = [m_OutlineView columnAtPoint:nativePoint]; + indexRow = [m_OutlineView rowAtPoint: nativePoint]; + if ((indexColumn >= 0) && (indexRow >= 0)) +diff --git a/src/osx/cocoa/settings.mm b/src/osx/cocoa/settings.mm +index de5f52860c..a9581174a4 100644 +--- a/src/osx/cocoa/settings.mm ++++ b/src/osx/cocoa/settings.mm +@@ -224,7 +224,7 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index) + // ---------------------------------------------------------------------------- + + // Get a system metric, e.g. scrollbar size +-int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUNUSED(win)) ++int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* win) + { + int value; + +@@ -259,11 +259,11 @@ int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUN + // TODO case wxSYS_WINDOWMIN_Y: + + case wxSYS_SCREEN_X: +- wxDisplaySize(&value, NULL); ++ wxDisplaySize(win, &value, NULL); + return value; + + case wxSYS_SCREEN_Y: +- wxDisplaySize(NULL, &value); ++ wxDisplaySize(win, NULL, &value); + return value; + + // TODO case wxSYS_FRAMESIZE_X: +diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm +index b322e582c5..79de567333 100644 +--- a/src/osx/cocoa/window.mm ++++ b/src/osx/cocoa/window.mm +@@ -190,6 +190,9 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const + - (BOOL)isEnabled; + - (void)setEnabled:(BOOL)flag; + ++- (BOOL)clipsToBounds; ++- (void)setClipsToBounds:(BOOL)clipsToBounds; ++ + - (void)setImage:(NSImage *)image; + - (void)setControlSize:(NSControlSize)size; + +@@ -2505,6 +2508,7 @@ wxWidgetImpl( peer, flags ) + if ( m_osxView ) + CFRetain(m_osxView); + [m_osxView release]; ++ m_osxView.clipsToBounds = YES; + } + + +-- +2.41.0.windows.2 + diff --git a/deps/wxWidgets/wxWidgets.cmake b/deps/wxWidgets/wxWidgets.cmake index 65aacfaad5..50cf991a65 100644 --- a/deps/wxWidgets/wxWidgets.cmake +++ b/deps/wxWidgets/wxWidgets.cmake @@ -1,5 +1,4 @@ -set(_wx_git_tag v3.2.1) -set(_wx_patch_name 0001-patch-v3.2.1-for-OrcaSlicer.patch) +set(_wx_git_tag v3.1.5) set(_wx_toolkit "") set(_wx_private_font "-DwxUSE_PRIVATE_FONTS=1") @@ -18,13 +17,13 @@ else () endif () if (MSVC) - set(_patch_cmd if not exist WXWIDGETS_PATCHED ( "${GIT_EXECUTABLE}" apply --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/${_wx_patch_name} && type nul > WXWIDGETS_PATCHED ) ) + set(_patch_cmd if not exist WXWIDGETS_PATCHED ( "${GIT_EXECUTABLE}" apply --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-wx-3.1.5-patch-for-Orca.patch && type nul > WXWIDGETS_PATCHED ) ) else () - set(_patch_cmd test -f WXWIDGETS_PATCHED || ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/${_wx_patch_name} && touch WXWIDGETS_PATCHED) + set(_patch_cmd test -f WXWIDGETS_PATCHED || ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-wx-3.1.5-patch-for-Orca.patch && touch WXWIDGETS_PATCHED) endif () if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(_patch_cmd ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/${_wx_patch_name}) + set(_patch_cmd ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-wx-3.1.5-patch-for-Orca.patch) endif () orcaslicer_add_cmake_project( @@ -32,7 +31,7 @@ orcaslicer_add_cmake_project( GIT_REPOSITORY "https://github.com/wxWidgets/wxWidgets" GIT_TAG ${_wx_git_tag} PATCH_COMMAND ${_patch_cmd} - DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG dep_NanoSVG + DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG CMAKE_ARGS -DwxBUILD_PRECOMP=ON ${_wx_toolkit} @@ -48,9 +47,7 @@ orcaslicer_add_cmake_project( -DwxUSE_WEBVIEW=ON ${_wx_edge} -DwxUSE_WEBVIEW_IE=OFF - -DwxUSE_NANOSVG=sys - -DwxUSE_NANOSVG_EXTERNAL=ON - -DwxUSE_REGEX=OFF + -DwxUSE_REGEX=builtin -DwxUSE_LIBXPM=builtin -DwxUSE_LIBSDL=OFF -DwxUSE_XTEST=OFF diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 59e38aead0..2baa38e63f 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -218,6 +218,9 @@ msgstr "" msgid "Position" msgstr "" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "" @@ -257,6 +260,7 @@ msgstr "" msgid "°" msgstr "" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "" @@ -266,6 +270,113 @@ msgstr "" msgid "uniform scale" msgstr "" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Style" +msgstr "" + +msgid "Shape" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "" + +msgid "Object" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "" @@ -278,9 +389,6 @@ msgstr "" msgid "Remove connector" msgstr "" -msgid "Drag" -msgstr "" - msgid "Move connector" msgstr "" @@ -296,22 +404,50 @@ msgstr "" msgid "Cut" msgstr "" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" +msgid "Remove connectors" msgstr "" -msgid "Connector" +msgid "Bulge" msgstr "" -msgid "Movement:" +msgid "Bulge proportion related to radius" msgstr "" -msgid "Movement" +msgid "Space" msgstr "" -msgid "Height" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" msgstr "" msgid "Edit connectors" @@ -320,6 +456,12 @@ msgstr "" msgid "Add connectors" msgstr "" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "" @@ -329,9 +471,6 @@ msgstr "" msgid "Keep" msgstr "" -msgid "Place on cut" -msgstr "" - msgid "Flip" msgstr "" @@ -341,84 +480,55 @@ msgstr "" msgid "Cut to parts" msgstr "" -msgid "Auto Segment" -msgstr "" - msgid "Perform cut" msgstr "" -msgid "Reset" -msgstr "" - -msgid "Connectors" -msgstr "" - -msgid "Type" -msgstr "" - -msgid "Style" -msgstr "" - -msgid "Shape" -msgstr "" - -msgid "Depth ratio" -msgstr "" - -msgid "Remove connectors" -msgstr "" - -msgid "Prizm" -msgstr "" - -msgid "Frustum" -msgstr "" - -msgid "Square" -msgstr "" - -msgid "Hexagon" -msgstr "" - -msgid "Confirm connectors" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Warning" msgstr "" msgid "Invalid connectors detected" msgstr "" -msgid "connector is out of cut contour" -msgstr "" +#, possible-c-format, possible-boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" -msgid "connectors are out of cut contour" -msgstr "" - -msgid "connector is out of object" -msgstr "" - -msgid "connectors is out of object" -msgstr "" +#, possible-c-format, possible-boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" msgid "Some connectors are overlapped" msgstr "" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -msgid "Plug" +msgid "Cut plane is placed out of object" msgstr "" -msgid "Dowel" +msgid "Cut plane with groove is invalid" msgstr "" -msgid "Tolerance" +msgid "Connector" +msgstr "" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" msgstr "" msgid "Mesh name" @@ -513,6 +623,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "" @@ -548,6 +660,655 @@ msgstr "" msgid "Text shape" msgstr "" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, possible-boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, possible-boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, possible-boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, possible-boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, possible-boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, possible-boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, possible-boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, possible-boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, possible-boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, possible-boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, possible-boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, possible-boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, possible-boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, possible-boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, possible-boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, possible-boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, possible-boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, possible-boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, possible-boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, possible-boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, possible-boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, possible-boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, possible-boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, possible-boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Diameter" +msgstr "" + +msgid "Length" +msgstr "" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "" @@ -715,9 +1476,6 @@ msgstr "" msgid "Sync user presets" msgstr "" -msgid "Loading" -msgstr "" - msgid "Loading user preset" msgstr "" @@ -748,9 +1506,6 @@ msgstr "" msgid "Import File" msgstr "" -msgid "Delete" -msgstr "" - msgid "Choose files" msgstr "" @@ -821,9 +1576,6 @@ msgstr "" msgid "Bed adhension" msgstr "" -msgid "Advanced" -msgstr "" - msgid "Add part" msgstr "" @@ -875,6 +1627,21 @@ msgstr "" msgid "Load..." msgstr "" +msgid "Cube" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "" @@ -887,21 +1654,12 @@ msgstr "" msgid "Voron Cube" msgstr "" -msgid "Cube" -msgstr "" - -msgid "Cylinder" -msgstr "" - -msgid "Cone" +msgid "Stanford Bunny" msgstr "" msgid "Text" msgstr "" -msgid "SVG" -msgstr "" - msgid "Height range Modifier" msgstr "" @@ -1029,9 +1787,6 @@ msgstr "" msgid "Mirror along the Z axis" msgstr "" -msgid "Mirror" -msgstr "" - msgid "Mirror object" msgstr "" @@ -1053,6 +1808,9 @@ msgstr "" msgid "Add Primitive" msgstr "" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "" @@ -1287,12 +2045,6 @@ msgstr "" msgid "Settings for height range" msgstr "" -msgid "Object" -msgstr "" - -msgid "Part" -msgstr "" - msgid "Layer" msgstr "" @@ -1314,9 +2066,6 @@ msgstr "" msgid "Negative Part" msgstr "" -msgid "Modifier" -msgstr "" - msgid "Support Blocker" msgstr "" @@ -1390,9 +2139,6 @@ msgstr "" msgid "Auto Brim" msgstr "" -msgid "Auto" -msgstr "" - msgid "Mouse ear" msgstr "" @@ -1468,9 +2214,6 @@ msgstr "" msgid "Enter Custom G-code used on current layer:" msgstr "" -msgid "OK" -msgstr "" - msgid "Jump to Layer" msgstr "" @@ -1525,15 +2268,15 @@ msgstr "" msgid "..." msgstr "" -msgid "Failed to connect to the server" -msgstr "" - msgid "Check the status of current system services" msgstr "" msgid "code" msgstr "" +msgid "Failed to connect to the server" +msgstr "" + msgid "Failed to connect to cloud service" msgstr "" @@ -2279,9 +3022,6 @@ msgstr "" msgid "Origin" msgstr "" -msgid "Diameter" -msgstr "" - msgid "Size in X and Y of the rectangular plate." msgstr "" @@ -2415,6 +3155,18 @@ msgid "" "No - Give up using spiral mode this time" msgstr "" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2766,6 +3518,9 @@ msgstr "" msgid "Percent" msgstr "" +msgid "Used filament" +msgstr "" + msgid "Layer Height (mm)" msgstr "" @@ -2784,9 +3539,6 @@ msgstr "" msgid "Volumetric flow rate (mm³/s)" msgstr "" -msgid "Used filament" -msgstr "" - msgid "Travel" msgstr "" @@ -4877,6 +5629,9 @@ msgstr "" msgid "Stealth Mode" msgstr "" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "" @@ -5682,6 +6437,11 @@ msgid "" "independent support layer height" msgstr "" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6270,15 +7030,18 @@ msgstr "" msgid "Ramming line spacing" msgstr "" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "" + +msgid "Re-calculate" msgstr "" msgid "Flushing volumes for filament change" msgstr "" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6295,6 +7058,15 @@ msgstr "" msgid "Multiplier" msgstr "" +msgid "unloaded" +msgstr "" + +msgid "loaded" +msgstr "" + +msgid "Filament #" +msgstr "" + msgid "From" msgstr "" @@ -6331,9 +7103,6 @@ msgstr "" msgid "Ctrl+Shift+G" msgstr "" -msgid "Copy to clipboard" -msgstr "" - msgid "Paste from clipboard" msgstr "" @@ -6442,9 +7211,6 @@ msgstr "" msgid "Movement step set to 1 mm" msgstr "" -msgid "Esc" -msgstr "" - msgid "keyboard 1-9: set filament for object/part" msgstr "" @@ -6493,7 +7259,7 @@ msgstr "" msgid "Gizmo FDM paint-on seam" msgstr "" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "" msgid "Plater" @@ -6529,9 +7295,6 @@ msgstr "" msgid "Delete objects, parts, modifiers " msgstr "" -msgid "Space" -msgstr "" - msgid "Select the object/part and press space to change the name" msgstr "" @@ -7169,11 +7932,11 @@ msgid "Hostname, IP or URL" msgstr "" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" msgid "Device UI" @@ -7187,8 +7950,8 @@ msgid "API Key / Password" msgstr "" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" msgid "Name of the printer" @@ -8042,8 +8805,8 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" msgid "Speed of the last cooling move" @@ -8206,11 +8969,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -8227,11 +8991,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -8380,9 +9145,6 @@ msgid "" "look. This setting controls the fuzzy position" msgstr "" -msgid "None" -msgstr "" - msgid "Contour" msgstr "" @@ -8711,6 +9473,17 @@ msgid "" "acceleration to print" msgstr "" +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -8731,9 +9504,6 @@ msgstr "" msgid "Maximum speed E" msgstr "" -msgid "Machine limits" -msgstr "" - msgid "Maximum X speed" msgstr "" @@ -8932,8 +9702,8 @@ msgid "Host Type" msgstr "" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" msgid "Nozzle volume" @@ -9051,11 +9821,25 @@ msgstr "" msgid "Number of walls of every layer" msgstr "" +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" @@ -9124,9 +9908,6 @@ msgstr "" msgid "Force a retraction when changes layer" msgstr "" -msgid "Length" -msgstr "" - msgid "Retraction Length" msgstr "" @@ -9299,6 +10080,21 @@ msgid "" "inward movement is executed before the extruder leaves the loop." msgstr "" +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "" @@ -9929,9 +10725,6 @@ msgstr "" msgid "The volume of material to prime extruder on tower." msgstr "" -msgid "Width" -msgstr "" - msgid "Width of prime tower" msgstr "" @@ -10066,8 +10859,8 @@ msgstr "" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" msgid "" @@ -11183,9 +11976,6 @@ msgstr "" msgid "Create Based on Current Printer" msgstr "" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "" @@ -11358,10 +12148,10 @@ msgstr "" msgid "Export Configs" msgstr "" -msgid "Printer config bundle(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" msgstr "" -msgid "Filament bundle(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" @@ -11400,7 +12190,7 @@ msgid "" msgstr "" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" @@ -11704,10 +12494,22 @@ msgstr "" msgid "Air filtration/Exhuast Fan\nDid you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "G-code window\nYou can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "Switch workspaces\nYou can switch between Prepare and Preview workspaces by pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "How to use keyboard shortcuts\nDid you know that Orca Slicer offers a wide range of keyboard shortcuts and 3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "Reverse on odd\nDid you know that Reverse on odd feature can significantly improve the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "Cut Tool\nDid you know that you can cut a model at any angle and position with the cutting tool?" msgstr "" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index cb47483f75..3b97186b2d 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: 2023-09-30 15:15+0200\n" "Last-Translator: René Mošner \n" "Language-Team: \n" @@ -221,6 +221,9 @@ msgstr "mm" msgid "Position" msgstr "Pozice" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Otáčení" @@ -260,6 +263,7 @@ msgstr "Světové souřadnice" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Rozměr" @@ -269,6 +273,113 @@ msgstr "%" msgid "uniform scale" msgstr "jednotné měřítko" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "Automaticky" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "Čep" + +msgid "Dowel" +msgstr "Kolík" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Středový jehlan" + +msgid "Square" +msgstr "Čtverec" + +msgid "Hexagon" +msgstr "Šestiúhelník" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "Umístit řezem na podložku" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "Spojky" + +msgid "Type" +msgstr "Typ" + +msgid "Style" +msgstr "Styl" + +msgid "Shape" +msgstr "Tvar" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "Šířka" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "Dílů" + +msgid "Object" +msgstr "Objekt" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Tolerance" + +msgid "Drag" +msgstr "Táhnutí" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Levý klik" @@ -281,9 +392,6 @@ msgstr "Pravý klik" msgid "Remove connector" msgstr "Odstranit spojku" -msgid "Drag" -msgstr "Táhnutí" - msgid "Move connector" msgstr "Přesunout spojku" @@ -299,23 +407,51 @@ msgstr "Vybrat všechny spojky" msgid "Cut" msgstr "Řezat" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "Oprava objektu modelu" +msgid "Remove connectors" +msgstr "Odstranit spojky" -msgid "Connector" -msgstr "Spojka" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "Přejezd:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "Přejezd" +msgid "Space" +msgstr "Mezerník" -msgid "Height" -msgstr "Výška" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Potvrzení spojek" + +msgid "Cancel" +msgstr "Zrušit" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "Výchozí" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Upravit spojky" @@ -323,6 +459,12 @@ msgstr "Upravit spojky" msgid "Add connectors" msgstr "Přidat spojky" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Horní část" @@ -332,9 +474,6 @@ msgstr "Spodní část" msgid "Keep" msgstr "Ponechat" -msgid "Place on cut" -msgstr "Umístit řezem na podložku" - msgid "Flip" msgstr "Otočit" @@ -344,87 +483,58 @@ msgstr "Po řezu" msgid "Cut to parts" msgstr "Rozřezat na díly" -msgid "Auto Segment" -msgstr "Automatický segment" - msgid "Perform cut" msgstr "Provést řez" -msgid "Reset" -msgstr "Výchozí" - -msgid "Connectors" -msgstr "Spojky" - -msgid "Type" -msgstr "Typ" - -msgid "Style" -msgstr "Styl" - -msgid "Shape" -msgstr "Tvar" - -msgid "Depth ratio" -msgstr "Poměr hloubky" - -msgid "Remove connectors" -msgstr "Odstranit spojky" - -msgid "Prizm" -msgstr "Hranol" - -msgid "Frustum" -msgstr "Středový jehlan" - -msgid "Square" -msgstr "Čtverec" - -msgid "Hexagon" -msgstr "Šestiúhelník" - -msgid "Confirm connectors" -msgstr "Potvrzení spojek" - -msgid "Cancel" -msgstr "Zrušit" - msgid "Warning" msgstr "Varování" msgid "Invalid connectors detected" msgstr "Byly zjištěny neplatné spojky" -msgid "connector is out of cut contour" -msgstr "spojka je mimo obrys řezu" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -msgid "connectors are out of cut contour" -msgstr "spojky jsou mimo obrys řezu" - -msgid "connector is out of object" -msgstr "spojka je mimo objekt" - -msgid "connectors is out of object" -msgstr "spojky jsou mimo objekt" +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" msgid "Some connectors are overlapped" msgstr "Některé spojky se překrývají" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"Neplatný stav. \n" -"Není vybrána žádná část pro zachování po řezu" -msgid "Plug" -msgstr "Čep" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "Kolík" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "Tolerance" +msgid "Connector" +msgstr "Spojka" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "Oprava objektu modelu" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Název sítě" @@ -521,6 +631,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Písmo" @@ -558,6 +670,655 @@ msgstr "Otočit text" msgid "Text shape" msgstr "Tvar textu" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "Pokročilé" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "Modifikátor" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "Načítání" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Výška" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Zrcadlit" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "Smazat" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "Žádné" + +msgid "Diameter" +msgstr "Průměr" + +msgid "Length" +msgstr "Vzdálenost" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "Kopírovat do schránky" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -748,9 +1509,6 @@ msgstr "" msgid "Sync user presets" msgstr "" -msgid "Loading" -msgstr "Načítání" - msgid "Loading user preset" msgstr "Načítání uživatelské předvolby" @@ -781,9 +1539,6 @@ msgstr "Vyberte soubor s G-kódem:" msgid "Import File" msgstr "Importovat soubor" -msgid "Delete" -msgstr "Smazat" - msgid "Choose files" msgstr "Vyberte soubory" @@ -854,9 +1609,6 @@ msgstr "Možnosti čištění" msgid "Bed adhension" msgstr "Přilnavost k Podložce" -msgid "Advanced" -msgstr "Pokročilé" - msgid "Add part" msgstr "Přidat díl" @@ -908,6 +1660,21 @@ msgstr "Smazat vybraný objekt" msgid "Load..." msgstr "Načíst..." +msgid "Cube" +msgstr "Kostka" + +msgid "Cylinder" +msgstr "Válec" + +msgid "Cone" +msgstr "Kužel" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "Orca Kostka" @@ -920,19 +1687,10 @@ msgstr "Autodesk FDM Test" msgid "Voron Cube" msgstr "Voron Kostka" -msgid "Cube" -msgstr "Kostka" - -msgid "Cylinder" -msgstr "Válec" - -msgid "Cone" -msgstr "Kužel" - -msgid "Text" +msgid "Stanford Bunny" msgstr "" -msgid "SVG" +msgid "Text" msgstr "" msgid "Height range Modifier" @@ -1062,9 +1820,6 @@ msgstr "Podél osy Z" msgid "Mirror along the Z axis" msgstr "Zrcadlit podél osy Z" -msgid "Mirror" -msgstr "Zrcadlit" - msgid "Mirror object" msgstr "Zrcadlit objekt" @@ -1086,6 +1841,9 @@ msgstr "Zneplatnění informací o řezu" msgid "Add Primitive" msgstr "Přidat Primitivní" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "Zobrazit štítky" @@ -1335,12 +2093,6 @@ msgstr "Výškové rozsahy" msgid "Settings for height range" msgstr "Nastavení pro výškový rozsah" -msgid "Object" -msgstr "Objekt" - -msgid "Part" -msgstr "Dílů" - msgid "Layer" msgstr "Vrstva" @@ -1364,9 +2116,6 @@ msgstr "Typ poslední části pevného objektu nelze změnit." msgid "Negative Part" msgstr "Negativní díl" -msgid "Modifier" -msgstr "Modifikátor" - msgid "Support Blocker" msgstr "Blokátor podpěr" @@ -1443,9 +2192,6 @@ msgstr "Hustota výplně (%)" msgid "Auto Brim" msgstr "Auto Límec" -msgid "Auto" -msgstr "Automaticky" - msgid "Mouse ear" msgstr "Uši myši" @@ -1521,9 +2267,6 @@ msgstr "Vlastní G-kód" msgid "Enter Custom G-code used on current layer:" msgstr "Zadejte vlastní G-kód použitý na aktuální vrstvě:" -msgid "OK" -msgstr "OK" - msgid "Jump to Layer" msgstr "Přejít na vrstvu" @@ -1578,15 +2321,15 @@ msgstr "Žádná tiskárna" msgid "..." msgstr "..." -msgid "Failed to connect to the server" -msgstr "Nepodařilo se připojit k serveru" - msgid "Check the status of current system services" msgstr "Zkontrolujte stav aktuálních systémových služeb" msgid "code" msgstr "kód" +msgid "Failed to connect to the server" +msgstr "Nepodařilo se připojit k serveru" + msgid "Failed to connect to cloud service" msgstr "Selhalo připojení ke cloudové službě" @@ -2420,9 +3163,6 @@ msgstr "" msgid "Origin" msgstr "Počátek" -msgid "Diameter" -msgstr "Průměr" - msgid "Size in X and Y of the rectangular plate." msgstr "Rozměr obdélníkové tiskové podložky v ose X a Y." @@ -2596,6 +3336,18 @@ msgstr "" "Ano - Změňte tato nastavení a povolte režim spirála/váza automaticky\n" "Ne - zrušit povolení spirálového režimu" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2977,6 +3729,9 @@ msgstr "Čas" msgid "Percent" msgstr "Procento" +msgid "Used filament" +msgstr "Použito filamentu" + msgid "Layer Height (mm)" msgstr "Výška vrstvy (mm)" @@ -2995,9 +3750,6 @@ msgstr "Teplota (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Objemový průtok (mm³/s)" -msgid "Used filament" -msgstr "Použito filamentu" - msgid "Travel" msgstr "Rychloposun" @@ -5202,6 +5954,9 @@ msgstr "Región přihlášení" msgid "Stealth Mode" msgstr "Tajný Režim" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "Metrický" @@ -6079,6 +6834,11 @@ msgstr "" "0 horní z vzdálenost, 0 rozestup rozhraní, koncentrický vzor a vypnutí " "nezávislé výšky podpůrné vrstvy" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6733,15 +7493,18 @@ msgstr "Šířka linky při rapidní extruzi" msgid "Ramming line spacing" msgstr "Rozestup linek při rapidní extruzi" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "Automatický výpočet" + +msgid "Re-calculate" msgstr "" msgid "Flushing volumes for filament change" msgstr "Čistící objemy pro výměnu filamentu" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6758,6 +7521,15 @@ msgstr "Násobitel by měl být v rozsahu [%.2f, %.2f]." msgid "Multiplier" msgstr "Multiplikátor" +msgid "unloaded" +msgstr "vyjmuto" + +msgid "loaded" +msgstr "zaváděn" + +msgid "Filament #" +msgstr "Filament #" + msgid "From" msgstr "Z" @@ -6794,9 +7566,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "Kopírovat do schránky" - msgid "Paste from clipboard" msgstr "Vložit ze schránky" @@ -6908,9 +7677,6 @@ msgstr "Shift+libovolná šipka" msgid "Movement step set to 1 mm" msgstr "Krok pro posun výběru o velikosti 1 mm" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "klávesnice 1-9: nastavení filamentu pro objekt/díl" @@ -6959,7 +7725,7 @@ msgstr "Gizmo SLA podpěrné body" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM malování pozice švu" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "Přepnout mezi Přípravou/Náhledem" msgid "Plater" @@ -6995,9 +7761,6 @@ msgstr "Nastavit číslo extruderu pro objekty a díly" msgid "Delete objects, parts, modifiers " msgstr "Smazat objekty, díly, modifikátory " -msgid "Space" -msgstr "Mezerník" - msgid "Select the object/part and press space to change the name" msgstr "Vyberte objekt/díl a stiskněte mezerník pro změnu názvu" @@ -7702,13 +8465,13 @@ msgid "Hostname, IP or URL" msgstr "Název serveru, IP nebo URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r může nahrávat G-kódy do tiskového serveru. Toto pole by mělo " +"Orca Slicer může nahrávat G-kódy do tiskového serveru. Toto pole by mělo " "obsahovat název hostitele, IP adresu nebo URL tiskového serveru. K " "tiskovému serveru za HAProxy se zapnutým ověřením basic auth lze přistupovat " "zadáním uživatelského jména a hesla do adresy URL v následujícím formátu: " @@ -7727,11 +8490,11 @@ msgid "API Key / Password" msgstr "API klíč / Heslo" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r může nahrát soubory do tiskového serveru. Toto pole by mělo obsahovat " -"klíč API požadovaný pro ověření." +"Orca Slicer může nahrát soubory do tiskového serveru. Toto pole by mělo " +"obsahovat klíč API požadovaný pro ověření." msgid "Name of the printer" msgstr "Název tiskárny" @@ -8745,14 +9508,14 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "Po výměně nástroje nemusí být známa přesná poloha nově zavedeného filamentu " "uvnitř trysky a tlak filamentu pravděpodobně ještě není stabilní. Před " -"vyčištěním tiskové hlavy do výplně nebo do objektu bude Slic3r toto množství " -"materiálu vždy vytlačovat do čistící věže, aby se spolehlivě vytvořily " -"následné výplně nebo objekty." +"vyčištěním tiskové hlavy do výplně nebo do objektu bude Orca Slicer toto " +"množství materiálu vždy vytlačovat do čistící věže, aby se spolehlivě " +"vytvořily následné výplně nebo objekty." msgid "Speed of the last cooling move" msgstr "Rychlost posledního pohybu chlazení" @@ -8933,17 +9696,18 @@ msgstr "Délka kotvy vnitřní výplně" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" "Připojení výplně k vnitřnímu perimetru krátkým segmentem dalšího perimetru. " "Pokud je vyjádřeno v procentech (příklad: 15%), vypočítává se z šířky " -"extruze výplně. PrusaSlicer se pokouší spojit dvě blízké výplňová čáry " +"extruze výplně. Orca Slicer se pokouší spojit dvě blízké výplňová čáry " "krátkým obvodovým perimetrem. Pokud není nalezen žádný takový obvodový " "perimetr kratší než infill_anchor_max, je výplňová čára spojena s obvodovým " "perimetrem pouze na jedné straně a délka odebraného obvodového perimetru je " @@ -8963,11 +9727,12 @@ msgstr "Maximální délka výplňové kotvy" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -9152,9 +9917,6 @@ msgstr "" "Náhodné chvění při tisku na stěnu, takže povrch má hrubý vzhled. Toto " "nastavení řídí neostrou polohu" -msgid "None" -msgstr "Žádné" - msgid "Contour" msgstr "Obrys" @@ -9545,6 +10307,17 @@ msgstr "" "Zda stroj podporuje tichý režim, ve kterém stroj používá k tisku nižší " "zrychlení" +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "Limity stroje" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9567,9 +10340,6 @@ msgstr "Maximální rychlost Z" msgid "Maximum speed E" msgstr "Maximální rychlost E" -msgid "Machine limits" -msgstr "Limity stroje" - msgid "Maximum X speed" msgstr "Maximální rychlost X" @@ -9817,10 +10587,10 @@ msgid "Host Type" msgstr "Typ tiskového serveru" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r může nahrát soubory G-kódu do tiskového serveru. Toto pole musí " +"Orca Slicer může nahrát soubory G-kódu do tiskového serveru. Toto pole musí " "obsahovat druh tiskového serveru." msgid "Nozzle volume" @@ -9961,17 +10731,31 @@ msgstr "Rychlost vnitřní stěny" msgid "Number of walls of every layer" msgstr "Počet perimetrů/stěn každé vrstvy" +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" "Pokud chcete výstupní G-kód zpracovat pomocí vlastních skriptů, stačí zde " "uvést jejich absolutní cesty. Více skriptů oddělte středníkem. Skriptu bude " "předána absolutní cesta k souboru G-kódu jako první argument a mohou přístup " -"k nastavení konfigurace Slic3r čtením proměnných prostředí." +"k nastavení konfigurace Orca Slicer čtením proměnných prostředí." msgid "Printer notes" msgstr "Poznámky o tiskárně" @@ -10046,9 +10830,6 @@ msgstr "Retrakce při změně vrstvy" msgid "Force a retraction when changes layer" msgstr "Vynutit retrakci při změně vrstvy" -msgid "Length" -msgstr "Vzdálenost" - msgid "Retraction Length" msgstr "Vzdálenost retrakce" @@ -10256,6 +11037,21 @@ msgstr "" "Aby byla minimalizována viditelnost švu při extruzi s uzavřenou smyčkou, je " "proveden malý pohyb dovnitř předtím, než vytlačovací stroj opustí smyčku." +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "Rychlost čištění" @@ -11007,9 +11803,6 @@ msgstr "Základní objem" msgid "The volume of material to prime extruder on tower." msgstr "Objem materiálu k naplnění extruderu na věži." -msgid "Width" -msgstr "Šířka" - msgid "Width of prime tower" msgstr "Šířka pro čistící věž" @@ -11182,13 +11975,9 @@ msgstr "Použít relativní E vzdálenosti" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" -"Při použití volby \"label_objects\" se doporučuje relativní extruzi. Některé " -"extrudery fungují lépe, když je tato možnost odškrtnuta (režim absolutní " -"extruze). Čistící věž je kompatibilní pouze s relativním režimem. Na " -"tiskárnách BambuLab je vždy povolen. Výchozí je zaškrtnuto" msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -12453,9 +13242,6 @@ msgstr "" msgid "Create Based on Current Printer" msgstr "" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "" @@ -12628,10 +13414,10 @@ msgstr "" msgid "Export Configs" msgstr "" -msgid "Printer config bundle(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" msgstr "" -msgid "Filament bundle(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" @@ -12670,7 +13456,7 @@ msgid "" msgstr "" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" @@ -13001,6 +13787,19 @@ msgid "" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -13008,6 +13807,13 @@ msgid "" "3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -13278,6 +14084,51 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "" +#~ "Relative extrusion is recommended when using \"label_objects\" option." +#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "mode). Wipe tower is only compatible with relative mode. It is always " +#~ "enabled on BambuLab printers. Default is checked" +#~ msgstr "" +#~ "Při použití volby \"label_objects\" se doporučuje relativní extruzi. " +#~ "Některé extrudery fungují lépe, když je tato možnost odškrtnuta (režim " +#~ "absolutní extruze). Čistící věž je kompatibilní pouze s relativním " +#~ "režimem. Na tiskárnách BambuLab je vždy povolen. Výchozí je zaškrtnuto" + +#~ msgid "Movement:" +#~ msgstr "Přejezd:" + +#~ msgid "Movement" +#~ msgstr "Přejezd" + +#~ msgid "Auto Segment" +#~ msgstr "Automatický segment" + +#~ msgid "Depth ratio" +#~ msgstr "Poměr hloubky" + +#~ msgid "Prizm" +#~ msgstr "Hranol" + +#~ msgid "connector is out of cut contour" +#~ msgstr "spojka je mimo obrys řezu" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "spojky jsou mimo obrys řezu" + +#~ msgid "connector is out of object" +#~ msgstr "spojka je mimo objekt" + +#~ msgid "connectors is out of object" +#~ msgstr "spojky jsou mimo objekt" + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Neplatný stav. \n" +#~ "Není vybrána žádná část pro zachování po řezu" + #~ msgid "Edit Text" #~ msgstr "Upravit text" @@ -13311,18 +14162,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Rychlé" -#~ msgid "Auto-Calc" -#~ msgstr "Automatický výpočet" - -#~ msgid "unloaded" -#~ msgstr "vyjmuto" - -#~ msgid "loaded" -#~ msgstr "zaváděn" - -#~ msgid "Filament #" -#~ msgstr "Filament #" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 57a787a3b1..81d080690e 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -217,6 +217,9 @@ msgstr "mm" msgid "Position" msgstr "Position" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Drehung" @@ -256,6 +259,7 @@ msgstr "Weltkoordinaten" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Größe" @@ -265,6 +269,113 @@ msgstr "%" msgid "uniform scale" msgstr "einheitliche Skalierung" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "Automatisch" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "Einstecken" + +msgid "Dowel" +msgstr "Dübel" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Frustum" + +msgid "Square" +msgstr "Quadrat" + +msgid "Hexagon" +msgstr "Sechseck" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "auf den Schnitt legen" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "Verbinder" + +msgid "Type" +msgstr "Typ" + +msgid "Style" +msgstr "Stil" + +msgid "Shape" +msgstr "Form" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "Breite" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "Teil" + +msgid "Object" +msgstr "Objekt" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Toleranz" + +msgid "Drag" +msgstr "Ziehen" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Linksklick" @@ -277,9 +388,6 @@ msgstr "Rechtsklick" msgid "Remove connector" msgstr "Verbinder entfernen" -msgid "Drag" -msgstr "Ziehen" - msgid "Move connector" msgstr "Verbinder bewegen" @@ -295,23 +403,51 @@ msgstr "Alle Verbinder auswählen" msgid "Cut" msgstr "Schneiden" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "Modellobjekt reparieren" +msgid "Remove connectors" +msgstr "Verbinder entfernen" -msgid "Connector" -msgstr "Verbinder" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "Bewegung:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "Bewegung" +msgid "Space" +msgstr "Platz" -msgid "Height" -msgstr "Höhe" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Bestätige Verbinder" + +msgid "Cancel" +msgstr "Abbrechen" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "Zurücksetzen" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Verbinder ändern" @@ -319,6 +455,12 @@ msgstr "Verbinder ändern" msgid "Add connectors" msgstr "Verbinder zufügen" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Oberes Teil" @@ -328,9 +470,6 @@ msgstr "Unteres Teil" msgid "Keep" msgstr "Behalten" -msgid "Place on cut" -msgstr "auf den Schnitt legen" - msgid "Flip" msgstr "umdrehen" @@ -340,87 +479,56 @@ msgstr "nach dem Schnitt" msgid "Cut to parts" msgstr "In Teile schneiden" -msgid "Auto Segment" -msgstr "Automatische Segmentierung" - msgid "Perform cut" msgstr "Schnitt ausführen" -msgid "Reset" -msgstr "Zurücksetzen" - -msgid "Connectors" -msgstr "Verbinder" - -msgid "Type" -msgstr "Typ" - -msgid "Style" -msgstr "Stil" - -msgid "Shape" -msgstr "Form" - -msgid "Depth ratio" -msgstr "Tiefenverhältnis" - -msgid "Remove connectors" -msgstr "Verbinder entfernen" - -msgid "Prizm" -msgstr "Prisma" - -msgid "Frustum" -msgstr "Frustum" - -msgid "Square" -msgstr "Quadrat" - -msgid "Hexagon" -msgstr "Sechseck" - -msgid "Confirm connectors" -msgstr "Bestätige Verbinder" - -msgid "Cancel" -msgstr "Abbrechen" - msgid "Warning" msgstr "Warnung" msgid "Invalid connectors detected" msgstr "Fehlerhafte Verbinder gefunden" -msgid "connector is out of cut contour" -msgstr "Der Verbinder ist außerhalb des Schnittfläche" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" -msgid "connectors are out of cut contour" -msgstr "Verbinder sind außerhalb des Schnittfläche" - -msgid "connector is out of object" -msgstr "Der Verbinder ist außerhalb des Objekts" - -msgid "connectors is out of object" -msgstr "Verbinder sind außerhalb des Objekts" +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" msgid "Some connectors are overlapped" msgstr "Einige Verbinder überlappen sich" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"Ungültiger Zustand. \n" -"Kein Teil ist ausgewählt, was nach dem Schneiden behalten wird." -msgid "Plug" -msgstr "Einstecken" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "Dübel" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "Toleranz" +msgid "Connector" +msgstr "Verbinder" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "Modellobjekt reparieren" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Netzname" @@ -518,6 +626,8 @@ msgstr "Verlasse Naht aufmalen" msgid "Paint-on seam editing" msgstr "Aufgemalte Naht bearbeiten" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Schiftart" @@ -555,6 +665,675 @@ msgstr "Text drehen" msgid "Text shape" msgstr "Text zufügen" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "Erweiterte Einstellungen" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" +"Der Text kann nicht mit der ausgewählten Schriftart geschrieben werden. " +"Versuchen Sie es mit einer anderen Schriftart." + +msgid "Embossed text cannot contain only white spaces." +msgstr "Der geprägte Text darf nicht nur Leerzeichen enthalten." + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "Text enthält ein Zeichen, das von der Schriftart nicht erkannt wird." + +msgid "Text input doesn't show font skew." +msgstr "Texteingabe zeigt keine Schriftneigung an." + +msgid "Text input doesn't show font boldness." +msgstr "Texteingabe zeigt keine Schriftstärke an." + +msgid "Text input doesn't show gap between lines." +msgstr "Texteingabe zeigt keinen Abstand zwischen den Zeilen." + +msgid "Too tall, diminished font height inside text input." +msgstr "Zu groß, verkleinerte Schriftgröße innerhalb der Texteingabe." + +msgid "Too small, enlarged font height inside text input." +msgstr "Zu klein, vergrößerte Schriftgröße innerhalb der Texteingabe." + +msgid "Text doesn't show current horizontal alignment." +msgstr "Text zeigt aktuelle horizontale Ausrichtung nicht an." + +msgid "Revert font changes." +msgstr "Rückgängig machen der Schriftartänderungen." + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "Schriftart \"%1%\" kann nicht ausgewählt werden." + +msgid "Operation" +msgstr "Operation" + +msgid "Join" +msgstr "Zusammenfügen" + +msgid "Click to change text into object part." +msgstr "Klicken Sie hier, um den Text in ein Objektteil zu ändern." + +msgid "You can't change a type of the last solid part of the object." +msgstr "Sie können den Typ des letzten festen Teils des Objekts nicht ändern." + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "Ausschneiden" + +msgid "Click to change part type into negative volume." +msgstr "Klicken Sie hier, um den Teiltyp in ein negatives Volumen zu ändern." + +msgid "Modifier" +msgstr "Modifizierer" + +msgid "Click to change part type into modifier." +msgstr "Klicken Sie hier, um den Teiltyp in einen Modifizierer zu ändern." + +msgid "Change Text Type" +msgstr "Ändere Texttyp" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "Umbenennen des Stils (%1%) für geprägten Text" + +msgid "Name can't be empty." +msgstr "Name darf nicht leer sein." + +msgid "Name has to be unique." +msgstr "Name muss eindeutig sein." + +msgid "OK" +msgstr "OK" + +msgid "Rename style" +msgstr "Benenne Stil um" + +msgid "Rename current style." +msgstr "Benenne aktuellen Stil um." + +msgid "Can't rename temporary style." +msgstr "Kann temporären Stil nicht umbenennen." + +msgid "First Add style to list." +msgstr "Erst Stil zur Liste hinzufügen." + +#, boost-format +msgid "Save %1% style" +msgstr "Speichere %1% Stil" + +msgid "No changes to save." +msgstr "Keine Änderungen zum Speichern." + +msgid "New name of style" +msgstr "Neuer Name des Stils" + +msgid "Save as new style" +msgstr "Speichern als neuen Stil" + +msgid "Only valid font can be added to style." +msgstr "Nur gültige Schriftarten können dem Stil hinzugefügt werden." + +msgid "Add style to my list." +msgstr "Addiere Stil zu meiner Liste." + +msgid "Save as new style." +msgstr "Speichern als neuen Stil." + +msgid "Remove style" +msgstr "Entferne Stil" + +msgid "Can't remove the last existing style." +msgstr "Kann den letzten vorhandenen Stil nicht entfernen." + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "Sie möchten den Stil \"%1%\" wirklich dauerhaft entfernen?" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "Lösche \"%1%\" Stil." + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "Kann \"%1%\" nicht löschen. Es ist der letzte Stil." + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "Kann temporären Stil \"%1%\" nicht löschen." + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "Modifizierter Stil \"%1%\"" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "Aktueller Stil ist \"%1%\"" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" +"Das Ändern des Stils zu \"%1%\" verwirft die aktuelle Stiländerung.\n" +"\n" +"Möchten Sie trotzdem fortfahren?" + +msgid "Not valid style." +msgstr "Kein gültiger Stil." + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" +"Stil \"%1%\" kann nicht verwendet werden und wird aus der Liste entfernt." + +msgid "Unset italic" +msgstr "Kursiven Text aufheben" + +msgid "Set italic" +msgstr "Setze kursiven Text" + +msgid "Unset bold" +msgstr "Schriftstärke aufheben" + +msgid "Set bold" +msgstr "Setze fette Schrift" + +msgid "Revert text size." +msgstr "Rückgängig machen der Textgröße." + +msgid "Revert embossed depth." +msgstr "Rückgängig machen der geprägten Tiefe." + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" +"Erweiterte Optionen können für die ausgewählte Schriftart nicht geändert " +"werden.\n" +"Wählen Sie eine andere Schriftart." + +msgid "Revert using of model surface." +msgstr "Benutzen der Oberfläche des Modells rückgängig machen." + +msgid "Revert Transformation per glyph." +msgstr "Transformation pro Zeichen rückgängig machen." + +msgid "Set global orientation for whole text." +msgstr "Setze globale Ausrichtung für den gesamten Text." + +msgid "Set position and orientation per glyph." +msgstr "Setze Position und Ausrichtung pro Zeichen." + +msgctxt "Alignment" +msgid "Left" +msgstr "Links" + +msgctxt "Alignment" +msgid "Center" +msgstr "Zentriert" + +msgctxt "Alignment" +msgid "Right" +msgstr "Rechts" + +msgctxt "Alignment" +msgid "Top" +msgstr "Oben" + +msgctxt "Alignment" +msgid "Middle" +msgstr "Mitte" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "Boden" + +msgid "Revert alignment." +msgstr "Ausrichtung rückgängig machen." + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "Punkte" + +msgid "Revert gap between characters" +msgstr "Abstand zwischen den Zeichen rückgängig machen" + +msgid "Distance between characters" +msgstr "Abstand zwischen den Zeichen" + +msgid "Revert gap between lines" +msgstr "Abstand zwischen den Zeilen rückgängig machen" + +msgid "Distance between lines" +msgstr "Abstand zwischen den Zeilen" + +msgid "Undo boldness" +msgstr "Dicke rückgängig machen" + +msgid "Tiny / Wide glyphs" +msgstr "Tiny / Wide glyphs" + +msgid "Undo letter's skew" +msgstr "Rückgängig machen der Schriftneigung" + +msgid "Italic strength ratio" +msgstr "Neigungsverhältnis" + +msgid "Undo translation" +msgstr "Übersetzung rückgängig machen" + +msgid "Distance of the center of the text to the model surface." +msgstr "Abstand des Textmittelpunkts zur Modell-Oberfläche." + +msgid "Undo rotation" +msgstr "Rotation rückgängig machen" + +msgid "Rotate text Clock-wise." +msgstr "im Uhrzeigersinn drehen." + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" +"Entsperren Sie die Rotation des Textes beim Verschieben des Textes entlang " +"der Oberfläche des Objekts." + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" +"Verriegeln Sie die Rotation des Textes beim Verschieben des Textes entlang " +"der Oberfläche des Objekts." + +msgid "Select from True Type Collection." +msgstr "Sammlung von True Type auswählen." + +msgid "Set text to face camera" +msgstr "Setze Text zur Kamera" + +msgid "Orient the text towards the camera." +msgstr "Ortne den Text zur Kamera aus." + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "Lade" + +msgid "In queue" +msgstr "In Warteschlange" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Höhe" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "Benutze Oberfläche" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "pro Zeichen" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "Ausrichtung" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "Zeichenabstand" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "Linienabstand" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "Durchschlag" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "Winkelverhältnis" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "Von Oberfläche" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "Behalte oben" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "Sammlung" + +msgid "Enter SVG gizmo" +msgstr "SVG-Gizmo eingeben" + +msgid "Leave SVG gizmo" +msgstr "SVG-Gizmo verlassen" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "SVG" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "SVG-Drehen" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "Deckkraft (%1%)" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "Farbverlauf (%1%)" + +msgid "Undefined fill type" +msgstr "Unbestimmter Fülltyp" + +msgid "Linear gradient" +msgstr "Linearer Farbverlauf" + +msgid "Radial gradient" +msgstr "Radialer Farbverlauf" + +msgid "Open filled path" +msgstr "ausgefüllten Pfad öffnen" + +msgid "Undefined stroke type" +msgstr "Undefinierter Strich-Typ" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" +"Pfad kann nicht von Selbstüberschneidungen und mehreren Punkten geheilt " +"werden." + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" +"Die endgültige Form enthält Selbstüberschneidungen oder mehrere Punkte mit " +"den gleichen Koordinaten." + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "Shape ist als unsichtbar markiert (%1%)." + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "Füllung der Form (%1%) enthält nicht unterstützte: %2%." + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "Striche der Form (%1%) ist zu dünn (minimale Breite ist %2% mm)." + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "Striche der Form (%1%) enthält nicht unterstützte: %2%." + +msgid "Face the camera" +msgstr "Gesicht zur Kamera" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "Unbekannter Dateiname" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "SVG-Dateipfad ist \"%1%\"" + +msgid "Reload SVG file from disk." +msgstr "Neu laden der SVG-Datei von der Festplatte." + +msgid "Change file" +msgstr "Datei wechseln" + +msgid "Change to another .svg file" +msgstr "Wechsel zu einer anderen .svg-Datei" + +msgid "Forget the file path" +msgstr "Dateipfad vergessen" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" +"Lokalen Pfad nicht in 3MF-Datei speichern.\n" +"Deaktiviert auch die Option 'Von Festplatte neu laden'." + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "Einbrennen" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "Einbrennen in das Modell als nicht editierbares Teil" + +msgid "Save as" +msgstr "Speichern als" + +msgid "Save SVG file" +msgstr "SVG-Datei speichern" + +msgid "Save as '.svg' file" +msgstr "Speichern als '.svg'-Datei" + +msgid "Size in emboss direction." +msgstr "Größe in Prägerichtung." + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "Skalierung ändert auch die Anzahl der Kurvensamples (%1%)" + +msgid "Width of SVG." +msgstr "Weite des SVG." + +msgid "Height of SVG." +msgstr "Höhe des SVG." + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "Verriegeln/Entriegeln des Seitenverhältnisses des SVG." + +msgid "Reset scale" +msgstr "Skalierung zurücksetzen" + +msgid "Resize" +msgstr "Größe zurücksetzen" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "Distanz des SVG-Mittelpunkts zur Modell-Oberfläche." + +msgid "Reset distance" +msgstr "Distanz zurücksetzen" + +msgid "Reset rotation" +msgstr "Rotation zurücksetzen" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" +"Verriegeln/Entriegeln des Rotationswinkels beim Ziehen über die Oberfläche." + +msgid "Mirror vertically" +msgstr "Spiegeln vertikal" + +msgid "Mirror horizontally" +msgstr "Spiegeln horizontal" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "Wechsel SVG-Typ" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Spiegeln" + +msgid "Choose SVG file for emboss:" +msgstr "Wählen sie eine SVG-Datei zum Prägen:" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "Datei existiert nicht (%1%)." + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "Dateiname muss mit \".svg\" enden, aber Sie haben %1% ausgewählt" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "Nano SVG-Parser kann nicht aus Datei laden (%1%)." + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "Löschen" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "Keine" + +msgid "Diameter" +msgstr "Durchmesser" + +msgid "Length" +msgstr "Länge" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "In Zwischenablage kopieren" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Strg +" @@ -753,9 +1532,6 @@ msgstr "" msgid "Sync user presets" msgstr "Benutzerprofile synchronisieren" -msgid "Loading" -msgstr "Lade" - msgid "Loading user preset" msgstr "Benutzerprofil wird geladen" @@ -786,9 +1562,6 @@ msgstr "Wähle eine G-Code Datei:" msgid "Import File" msgstr "Datei importieren" -msgid "Delete" -msgstr "Löschen" - msgid "Choose files" msgstr "Dateien auswählen" @@ -859,9 +1632,6 @@ msgstr "Wischoptionen" msgid "Bed adhension" msgstr "Druckbetthaftung" -msgid "Advanced" -msgstr "Erweiterte Einstellungen" - msgid "Add part" msgstr "Teil hinzufügen" @@ -913,6 +1683,21 @@ msgstr "Ausgewähltes Objekt löschen" msgid "Load..." msgstr "Laden..." +msgid "Cube" +msgstr "Würfel" + +msgid "Cylinder" +msgstr "Zylinder" + +msgid "Cone" +msgstr "Kegel" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "Orca Würfel" @@ -925,21 +1710,12 @@ msgstr "Autodesk FDM Test" msgid "Voron Cube" msgstr "Voron Würfel" -msgid "Cube" -msgstr "Würfel" - -msgid "Cylinder" -msgstr "Zylinder" - -msgid "Cone" -msgstr "Kegel" +msgid "Stanford Bunny" +msgstr "" msgid "Text" msgstr "T" -msgid "SVG" -msgstr "SVG" - msgid "Height range Modifier" msgstr "Höhen Modifizieren" @@ -1069,9 +1845,6 @@ msgstr "Entlang der Z Achse" msgid "Mirror along the Z axis" msgstr "An der Z-Achse spiegeln" -msgid "Mirror" -msgstr "Spiegeln" - msgid "Mirror object" msgstr "Objekt spiegeln" @@ -1093,6 +1866,9 @@ msgstr "Fehlerhafte Schnitt Info" msgid "Add Primitive" msgstr "Primitiv hinzufügen" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "Bezeichnung anzeigen" @@ -1352,12 +2128,6 @@ msgstr "Höhenbereiche" msgid "Settings for height range" msgstr "Einstellungen für den Höhenbereich" -msgid "Object" -msgstr "Objekt" - -msgid "Part" -msgstr "Teil" - msgid "Layer" msgstr "Schicht" @@ -1383,9 +2153,6 @@ msgstr "Der Typ des letzten festen Objektteils darf nicht geändert werden." msgid "Negative Part" msgstr "Negatives Teil" -msgid "Modifier" -msgstr "Modifizierer" - msgid "Support Blocker" msgstr "Stützblocker" @@ -1461,9 +2228,6 @@ msgstr "Füllungsdichte(%)" msgid "Auto Brim" msgstr "Automatische Umrandung" -msgid "Auto" -msgstr "Automatisch" - msgid "Mouse ear" msgstr "Mausohren" @@ -1541,9 +2305,6 @@ msgstr "" "Den auf der aktuellen Ebene zu verwendeten benutzerdefinierten G-Code " "eingeben:" -msgid "OK" -msgstr "OK" - msgid "Jump to Layer" msgstr "Wechsle zu Layer" @@ -1600,15 +2361,15 @@ msgstr "Kein Drucker" msgid "..." msgstr "..." -msgid "Failed to connect to the server" -msgstr "Verbindung zum Server fehlgeschlagen" - msgid "Check the status of current system services" msgstr "Überprüfen Sie den Status der aktuellen Systemdienste" msgid "code" msgstr "Code" +msgid "Failed to connect to the server" +msgstr "Verbindung zum Server fehlgeschlagen" + msgid "Failed to connect to cloud service" msgstr "Verbindung zum Cloud-Dienst fehlgeschlagen" @@ -2472,9 +3233,6 @@ msgstr "" msgid "Origin" msgstr "Nullpunkt" -msgid "Diameter" -msgstr "Durchmesser" - msgid "Size in X and Y of the rectangular plate." msgstr "Größe der rechteckigen Druckplatte in X und Y." @@ -2660,6 +3418,18 @@ msgstr "" "Ja - Diese Einstellungen ändern und den Spiralmodus automatisch aktivieren\n" "Nein - Spiralmodus nicht aktivieren" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3048,6 +3818,9 @@ msgstr "Zeit" msgid "Percent" msgstr "Prozent" +msgid "Used filament" +msgstr "Genutztes Filament" + msgid "Layer Height (mm)" msgstr "Schichthöhe (mm)" @@ -3066,9 +3839,6 @@ msgstr "Temperatur (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Volumetrische Flussrate (mm³/s)" -msgid "Used filament" -msgstr "Genutztes Filament" - msgid "Travel" msgstr "Eilgang" @@ -5323,6 +6093,9 @@ msgstr "Login-Region" msgid "Stealth Mode" msgstr "Unsichtbarer Modus" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "Metrisch" @@ -6241,6 +7014,11 @@ msgstr "" "dieunabhängige Einstellung der Support-Lagenhöhe (independent support layer " "height)." +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6907,19 +7685,22 @@ msgstr "Ramming-Linienbreite" msgid "Ramming line spacing" msgstr "Ramming-Linienabstand" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "Automatisch berechnen" + +msgid "Re-calculate" msgstr "Neu berechnen" msgid "Flushing volumes for filament change" msgstr "Reinigungsvolumen für Filamentwechsel" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" -"Orca berechnet Ihre Reinigungsvolumen jedes Mal neu, wenn sich die " -"Filamentfarben ändern. Sie können dieses Verhalten in den Einstellungen " -"ändern." +"Orca würde jedes Mal die Reinigungsvolumen neu berechnen, wenn sich die " +"Farbe des Filaments ändert. Sie können die automatische Berechnung in Orca " +"Slicer > Einstellungen deaktivieren" msgid "Flushing volume (mm³) for each filament pair." msgstr "Reinigungsvolumen (mm³) für jedes Filamentpaar." @@ -6935,6 +7716,15 @@ msgstr "Der Multiplikator sollte im Bereich [%.2f, %.2f] liegen." msgid "Multiplier" msgstr "Multiplikator " +msgid "unloaded" +msgstr "entladen" + +msgid "loaded" +msgstr "geladen" + +msgid "Filament #" +msgstr "Filament #" + msgid "From" msgstr "Von" @@ -6972,9 +7762,6 @@ msgstr "⌘+Umschalttaste+G" msgid "Ctrl+Shift+G" msgstr "Strg+Umschalt+G" -msgid "Copy to clipboard" -msgstr "In Zwischenablage kopieren" - msgid "Paste from clipboard" msgstr "Aus Zwischenablage einfügen" @@ -7087,9 +7874,6 @@ msgstr "Umschalt+beliebige Pfeiltaste" msgid "Movement step set to 1 mm" msgstr "Bewegungsschritt auf 1 mm eingestellt" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "Tastatur 1-9: Filament für Objekt/Teil einstellen" @@ -7138,7 +7922,7 @@ msgstr "SLA Stützpunkte" msgid "Gizmo FDM paint-on seam" msgstr "FDM Naht aufmalen" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "Zwischen Vorbereiten/ Vorschau wechseln" msgid "Plater" @@ -7174,9 +7958,6 @@ msgstr "Extrudernummer für die Objekte und Teile einstellen" msgid "Delete objects, parts, modifiers " msgstr "Objekte, Teile, Modifikatoren löschen " -msgid "Space" -msgstr "Platz" - msgid "Select the object/part and press space to change the name" msgstr "" "Wähle das Objekt/Teil aus und drücke die Leertaste, um den Namen zu ändern" @@ -7920,15 +8701,15 @@ msgid "Hostname, IP or URL" msgstr "Hostname, IP oder URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r kann G-Code-Dateien auf einen Drucker-Host hochladen. Dieses Feld " -"sollte den Hostnamen, die IP-Adresse oder die URL der Drucker-Host-Instanz " -"enthalten. Auf einen Drucker-Host hinter HAProxy mit aktivierter " +"Orca Slicer kann G-Code-Dateien auf einen Drucker-Host hochladen. Dieses " +"Feld sollte den Hostnamen, die IP-Adresse oder die URL der Drucker-Host-" +"Instanz enthalten. Auf einen Drucker-Host hinter HAProxy mit aktivierter " "Basisauthentifizierung kann zugegriffen werden, indem Benutzername und " "Passwort in die URL in folgendem Format eingegeben werden: https://username:" "password@Ihre-octopi-Adresse/" @@ -7947,12 +8728,12 @@ msgid "API Key / Password" msgstr "API-Schlüssel / Passwort" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r kann G-Code-Dateien auf einen Drucker-Host hochladen. Dieses Feld " -"sollte den API-Schlüssel oder das für die Authentifizierung erforderliche " -"Passwort enthalten." +"Orca Slicer kann G-Code-Dateien auf einen Drucker-Host hochladen. Dieses " +"Feld sollte den API-Schlüssel oder das für die Authentifizierung " +"erforderliche Passwort enthalten." msgid "Name of the printer" msgstr "Name des Druckers" @@ -9060,14 +9841,14 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "Nach einem Werkzeugwechsel ist die genaue Position des neu geladenen " "Filaments im Düsenkopf möglicherweise unbekannt und der Filamentdruck ist " -"wahrscheinlich noch nicht stabil. Bevor Slic3r den Druckkopf in ein Infill " -"oder ein opferbares Objekt spült, wird immer diese Menge Material in den " -"Wipe-Turm gefüllt, um zuverlässige nachfolgende Infill- oder opferbare " +"wahrscheinlich noch nicht stabil. Bevor Orca Slicer den Druckkopf in ein " +"Infill oder ein opferbares Objekt spült, wird immer diese Menge Material in " +"den Wipe-Turm gefüllt, um zuverlässige nachfolgende Infill- oder opferbare " "Objekt-Extrusionen zu erzeugen. So wird sichergestellt, dass das Drucken " "nicht gestört wird und die Qualität des Drucks erhalten bleibt." @@ -9257,11 +10038,12 @@ msgstr "Länge des Infill-Ankers" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -9289,11 +10071,12 @@ msgstr "Maximale Länge des Infill-Ankers" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -9494,9 +10277,6 @@ msgstr "" "zufällig zittert, so dass die Oberfläche ein raues, strukturiertes Aussehen " "erhält. Diese Einstellung steuert die Fuzzy-Position." -msgid "None" -msgstr "Keine" - msgid "Contour" msgstr "Kontur" @@ -9902,6 +10682,17 @@ msgstr "" "Ob das Gerät den Leisen-Modus unterstützt, bei dem das Gerät eine geringere " "Beschleunigung zum Drucken verwendet" +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "Maschinengrenzen" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9924,9 +10715,6 @@ msgstr "Maximale Geschwindigkeit Z" msgid "Maximum speed E" msgstr "Maximale Geschwindigkeit E" -msgid "Machine limits" -msgstr "Maschinengrenzen" - msgid "Maximum X speed" msgstr "Maximale Geschwindigkeit X" @@ -10171,11 +10959,11 @@ msgid "Host Type" msgstr "Host-Typ" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r kann G-Code-Dateien auf einen Drucker-Host hochladen. Dieses Feld " -"muss die Art des Hosts enthalten." +"Orca Slicer kann G-Code-Dateien auf einen Drucker-Host hochladen. Dieses " +"Feld muss die Art des Hosts enthalten." msgid "Nozzle volume" msgstr "Volumen der Düse" @@ -10322,17 +11110,31 @@ msgstr "Druckgeschwindigkeit der Innenwand" msgid "Number of walls of every layer" msgstr "Anzahl der Wände jeder Schicht" +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" "Wenn Sie die Ausgabe-G-Code-Datei durch benutzerdefinierte Skripts " "verarbeiten möchten, geben Sie hier die absoluten Pfade auf. Trennen Sie " "mehrere Skripts durch ein Semikolon. Die Skripts erhalten den absoluten Pfad " -"zur G-Code-Datei als erstes Argument und können die Slic3r-" +"zur G-Code-Datei als erstes Argument und können die Orca Slicer-" "Konfigurationseinstellungen durch Lesen von Umgebungsvariablen abrufen." msgid "Printer notes" @@ -10411,9 +11213,6 @@ msgstr "Zurückziehen beim Schichtwechsel" msgid "Force a retraction when changes layer" msgstr "Erzwingen eines Rückzugs beim Schichtwechsel" -msgid "Length" -msgstr "Länge" - msgid "Retraction Length" msgstr "Rückzugslänge" @@ -10631,6 +11430,21 @@ msgstr "" "minimieren, wird vor dem Verlassen der Schleife eine kleine Bewegung nach " "innen ausgeführt." +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "Wipe Geschwindigkeit" @@ -11432,9 +12246,6 @@ msgstr "Reinigungsvolumen" msgid "The volume of material to prime extruder on tower." msgstr "Das Volumen des Materials, das der Extruder am Turm entladen soll." -msgid "Width" -msgstr "Breite" - msgid "Width of prime tower" msgstr "Breite des Reinigungsturms." @@ -11613,13 +12424,9 @@ msgstr "Relative Extrusion" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" -"Die relative Extrusion wird empfohlen, wenn die Option „label_objects“ " -"verwendet wird. Einige Extruder funktionieren besser, wenn diese Option " -"deaktiviert ist (Absolute Extrusion). Der Wipe-Turm ist nur im relativen " -"Modus kompatibel. Er ist immer auf BambuLab-Druckern aktiviert" msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -12663,7 +13470,7 @@ msgstr "" #, fuzzy msgid "Upload" -msgstr "Entladen" +msgstr "Hochladen" msgid "Print host upload queue" msgstr "Druck-Host-Upload-Warteschlange" @@ -12941,9 +13748,6 @@ msgstr "Aus Vorlage erstellen" msgid "Create Based on Current Printer" msgstr "Erstellen Sie basierend auf dem aktuellen Drucker" -msgid "wiki" -msgstr "wiki" - msgid "Import Preset" msgstr "Voreinstellung importieren" @@ -13147,11 +13951,11 @@ msgstr "Druckereinstellung" msgid "Export Configs" msgstr "Konfigurationen exportieren" -msgid "Printer config bundle(.bbscfg)" -msgstr "Drucker-Konfigurationsbündel (.bbscfg)" +msgid "Printer config bundle(.orca_printer)" +msgstr "Drucker-Konfigurationsbündel (.orca_printer)" -msgid "Filament bundle(.bbsflmt)" -msgstr "Filament-Bündel (.bbsflmt)" +msgid "Filament bundle(.orca_filament)" +msgstr "Filament-Bündel (.orca_filament)" msgid "Printer presets(.zip)" msgstr "Druckervoreinstellungen (.zip)" @@ -13193,7 +13997,7 @@ msgstr "" "der Erstellung ändern." msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" "Drucker und alle Filament- und Prozessvoreinstellungen, die zum Drucker " @@ -13578,6 +14382,25 @@ msgstr "" "Wussten Sie, dass OrcaSlicer eine Luftfiltration/Abluftventilator " "unterstützen kann?" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" +"G-Code-Fenster\n" +"Sie können das G-Code-Fenster ein- und ausschalten, indem Sie die Taste " +"C drücken." + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" +"Arbeitsbereiche wechseln\n" +"Sie können zwischen den Arbeitsbereichen Vorbereiten und Preview wechseln, indem Sie die Taste Tab drücken." + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -13588,6 +14411,16 @@ msgstr "" "Wussten Sie, dass Orca Slicer eine Vielzahl von Tastenkombinationen und 3D-" "Szenenoperationen bietet." +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" +"Umkehrung bei ungeraden\n" +"Wussten Sie, dass die Funktion Umkehrung bei ungeraden die " +"Oberflächenqualität Ihrer Überhänge erheblich verbessern kann?" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -13884,6 +14717,65 @@ msgstr "" "wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die " "Wahrscheinlichkeit von Verwerfungen verringert werden kann." +#~ msgid "wiki" +#~ msgstr "wiki" + +#~ msgid "" +#~ "Relative extrusion is recommended when using \"label_objects\" option." +#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "mode). Wipe tower is only compatible with relative mode. It is always " +#~ "enabled on BambuLab printers. Default is checked" +#~ msgstr "" +#~ "Die relative Extrusion wird empfohlen, wenn die Option „label_objects“ " +#~ "verwendet wird. Einige Extruder funktionieren besser, wenn diese Option " +#~ "deaktiviert ist (Absolute Extrusion). Der Wipe-Turm ist nur im relativen " +#~ "Modus kompatibel. Er ist immer auf BambuLab-Druckern aktiviert" + +#~ msgid "Movement:" +#~ msgstr "Bewegung:" + +#~ msgid "Movement" +#~ msgstr "Bewegung" + +#~ msgid "Auto Segment" +#~ msgstr "Automatische Segmentierung" + +#~ msgid "Depth ratio" +#~ msgstr "Tiefenverhältnis" + +#~ msgid "Prizm" +#~ msgstr "Prisma" + +#~ msgid "connector is out of cut contour" +#~ msgstr "Der Verbinder ist außerhalb des Schnittfläche" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "Verbinder sind außerhalb des Schnittfläche" + +#~ msgid "connector is out of object" +#~ msgstr "Der Verbinder ist außerhalb des Objekts" + +#~ msgid "connectors is out of object" +#~ msgstr "Verbinder sind außerhalb des Objekts" + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Ungültiger Zustand. \n" +#~ "Kein Teil ist ausgewählt, was nach dem Schneiden behalten wird." + +#~ msgid "Recalculate" +#~ msgstr "Neu berechnen" + +#~ msgid "" +#~ "Orca recalculates your flushing volumes everytime the filament colors " +#~ "change. You can change this behavior in Preferences." +#~ msgstr "" +#~ "Orca berechnet Ihre Reinigungsvolumen jedes Mal neu, wenn sich die " +#~ "Filamentfarben ändern. Sie können dieses Verhalten in den Einstellungen " +#~ "ändern." + #~ msgid "" #~ "The printer timed out while receiving a print job. Please check if the " #~ "network is functioning properly and send the print again." @@ -13929,30 +14821,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Schnell" -#~ msgid "Auto-Calc" -#~ msgstr "Automatisch berechnen" - -#~ msgid "Re-calculate" -#~ msgstr "Neu berechnen" - -#~ msgid "" -#~ "Studio would re-calculate your flushing volumes everytime the filaments " -#~ "color changed. You could disable the auto-calculate in Bambu Studio > " -#~ "Preferences" -#~ msgstr "" -#~ "Studio würde jedes Mal die Reinigungsvolumen neu berechnen, wenn sich die " -#~ "Farbe des Filaments ändert. Sie können die automatische Berechnung in " -#~ "Bambu Studio > Einstellungen deaktivieren" - -#~ msgid "unloaded" -#~ msgstr "entladen" - -#~ msgid "loaded" -#~ msgstr "geladen" - -#~ msgid "Filament #" -#~ msgstr "Filament #" - #~ msgid "Print sequence of inner wall and outer wall. " #~ msgstr "Druckreihenfolge der Innen- und Außenwand." @@ -14019,7 +14887,7 @@ msgstr "" #~ msgstr "Diese Slicer-Dateiversion %s ist neuer als die Version von %s:" #~ msgid "" -#~ "Would you like to update your Bambu Studio software to enable all " +#~ "Would you like to update your Orca Slicer software to enable all " #~ "functionality in this slicer file?\n" #~ msgstr "" #~ "Möchten Sie Ihre Software aktualisieren, um alle Funktionen in dieser " @@ -14032,7 +14900,7 @@ msgstr "" #~ msgid "" #~ "This slicer file version %s is newer than %s's version.\n" #~ "\n" -#~ "Would you like to update your Bambu Studio software to enable all " +#~ "Would you like to update your Orca Slicer software to enable all " #~ "functionality in this slicer file?" #~ msgstr "" #~ "Diese Slicer-Dateiversion %s ist neuer als die Version von %s.\n" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index d4409c8e25..90d017ce73 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -215,6 +215,9 @@ msgstr "mm" msgid "Position" msgstr "Position" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Rotation" @@ -254,6 +257,7 @@ msgstr "World coordinates" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Size" @@ -263,6 +267,113 @@ msgstr "%" msgid "uniform scale" msgstr "Uniform scale" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "Auto" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "Plug" + +msgid "Dowel" +msgstr "Dowel" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Frustum" + +msgid "Square" +msgstr "Square" + +msgid "Hexagon" +msgstr "Hexagon" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "Place on cut" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "Connectors" + +msgid "Type" +msgstr "Type" + +msgid "Style" +msgstr "Style" + +msgid "Shape" +msgstr "Shape" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "Width" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "Part" + +msgid "Object" +msgstr "Object" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Tolerance" + +msgid "Drag" +msgstr "Drag" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Left click" @@ -275,9 +386,6 @@ msgstr "Right click" msgid "Remove connector" msgstr "Remove connector" -msgid "Drag" -msgstr "Drag" - msgid "Move connector" msgstr "Move connector" @@ -293,23 +401,51 @@ msgstr "Select all connectors" msgid "Cut" msgstr "Cut" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "Repairing model object" +msgid "Remove connectors" +msgstr "Remove connectors" -msgid "Connector" -msgstr "Connector" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "Movement:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "Movement" +msgid "Space" +msgstr "Space" -msgid "Height" -msgstr "Height" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Confirm connectors" + +msgid "Cancel" +msgstr "Cancel" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "Reset" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Edit connectors" @@ -317,6 +453,12 @@ msgstr "Edit connectors" msgid "Add connectors" msgstr "Add connectors" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Upper part" @@ -326,9 +468,6 @@ msgstr "Lower part" msgid "Keep" msgstr "Keep" -msgid "Place on cut" -msgstr "Place on cut" - msgid "Flip" msgstr "Flip" @@ -338,87 +477,56 @@ msgstr "After cut" msgid "Cut to parts" msgstr "Cut to parts" -msgid "Auto Segment" -msgstr "Auto Segment" - msgid "Perform cut" msgstr "Perform cut" -msgid "Reset" -msgstr "Reset" - -msgid "Connectors" -msgstr "Connectors" - -msgid "Type" -msgstr "Type" - -msgid "Style" -msgstr "Style" - -msgid "Shape" -msgstr "Shape" - -msgid "Depth ratio" -msgstr "Depth ratio" - -msgid "Remove connectors" -msgstr "Remove connectors" - -msgid "Prizm" -msgstr "Prizm" - -msgid "Frustum" -msgstr "Frustum" - -msgid "Square" -msgstr "Square" - -msgid "Hexagon" -msgstr "Hexagon" - -msgid "Confirm connectors" -msgstr "Confirm connectors" - -msgid "Cancel" -msgstr "Cancel" - msgid "Warning" msgstr "Warning" msgid "Invalid connectors detected" msgstr "Invalid connectors detected" -msgid "connector is out of cut contour" -msgstr "connector is out of cut contour" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" -msgid "connectors are out of cut contour" -msgstr "connectors are out of cut contour" - -msgid "connector is out of object" -msgstr "connector is out of object" - -msgid "connectors is out of object" -msgstr "Connectors must be on object surface." +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" msgid "Some connectors are overlapped" msgstr "Some connectors are overlapped" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"Invalid state. \n" -"No one part is selected to keep after cut" -msgid "Plug" -msgstr "Plug" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "Dowel" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "Tolerance" +msgid "Connector" +msgstr "Connector" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "Repairing model object" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Mesh name" @@ -515,6 +623,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Font" @@ -550,6 +660,655 @@ msgstr "Rotate text" msgid "Text shape" msgstr "Text shape" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "Advanced" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "Modifier" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "Loading" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Height" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Mirror" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "Delete" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "None" + +msgid "Diameter" +msgstr "Diameter" + +msgid "Length" +msgstr "Length" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "Copy to clipboard" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -725,9 +1484,6 @@ msgstr "" msgid "Sync user presets" msgstr "" -msgid "Loading" -msgstr "Loading" - msgid "Loading user preset" msgstr "Loading user preset" @@ -758,9 +1514,6 @@ msgstr "Select a G-code file:" msgid "Import File" msgstr "Import File" -msgid "Delete" -msgstr "Delete" - msgid "Choose files" msgstr "Choose files" @@ -831,9 +1584,6 @@ msgstr "Wipe options" msgid "Bed adhension" msgstr "Bed adhesion" -msgid "Advanced" -msgstr "Advanced" - msgid "Add part" msgstr "Add Part" @@ -885,6 +1635,21 @@ msgstr "Delete the selected object" msgid "Load..." msgstr "Load..." +msgid "Cube" +msgstr "Cube" + +msgid "Cylinder" +msgstr "Cylinder" + +msgid "Cone" +msgstr "Cone" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "" @@ -897,19 +1662,10 @@ msgstr "" msgid "Voron Cube" msgstr "" -msgid "Cube" -msgstr "Cube" - -msgid "Cylinder" -msgstr "Cylinder" - -msgid "Cone" -msgstr "Cone" - -msgid "Text" +msgid "Stanford Bunny" msgstr "" -msgid "SVG" +msgid "Text" msgstr "" msgid "Height range Modifier" @@ -1039,9 +1795,6 @@ msgstr "Along Z Axis" msgid "Mirror along the Z axis" msgstr "Mirror along the Z Axis" -msgid "Mirror" -msgstr "Mirror" - msgid "Mirror object" msgstr "Mirror object" @@ -1063,6 +1816,9 @@ msgstr "Invalidate cut info" msgid "Add Primitive" msgstr "Add Primitive" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "Show Labels" @@ -1306,12 +2062,6 @@ msgstr "Height ranges" msgid "Settings for height range" msgstr "Settings for height range" -msgid "Object" -msgstr "Object" - -msgid "Part" -msgstr "Part" - msgid "Layer" msgstr "Layer" @@ -1337,9 +2087,6 @@ msgstr "The type of the last solid object part cannot be changed." msgid "Negative Part" msgstr "Negative Part" -msgid "Modifier" -msgstr "Modifier" - msgid "Support Blocker" msgstr "Support Blocker" @@ -1413,9 +2160,6 @@ msgstr "Infill density(%)" msgid "Auto Brim" msgstr "Auto Brim" -msgid "Auto" -msgstr "Auto" - msgid "Mouse ear" msgstr "" @@ -1491,9 +2235,6 @@ msgstr "Custom G-code" msgid "Enter Custom G-code used on current layer:" msgstr "Enter Custom G-code used on current layer:" -msgid "OK" -msgstr "OK" - msgid "Jump to Layer" msgstr "Jump to layer" @@ -1548,15 +2289,15 @@ msgstr "No printer" msgid "..." msgstr "" -msgid "Failed to connect to the server" -msgstr "Failed to connect to the server" - msgid "Check the status of current system services" msgstr "Check the status of current system services" msgid "code" msgstr "code" +msgid "Failed to connect to the server" +msgstr "Failed to connect to the server" + msgid "Failed to connect to cloud service" msgstr "Failed to connect to cloud service" @@ -2380,9 +3121,6 @@ msgstr "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgid "Origin" msgstr "Origin" -msgid "Diameter" -msgstr "Diameter" - msgid "Size in X and Y of the rectangular plate." msgstr "Size in X and Y of the rectangular plate." @@ -2551,6 +3289,18 @@ msgstr "" "Yes - Change these settings and enable spiral/vase mode automatically\n" "No - Cancel enabling spiral mode" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2920,6 +3670,9 @@ msgstr "Time" msgid "Percent" msgstr "Percent" +msgid "Used filament" +msgstr "Used filament" + msgid "Layer Height (mm)" msgstr "Layer height (mm)" @@ -2938,9 +3691,6 @@ msgstr "Temperature (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Volumetric flow rate (mm³/s)" -msgid "Used filament" -msgstr "Used filament" - msgid "Travel" msgstr "Travel" @@ -5096,6 +5846,9 @@ msgstr "Login Region" msgid "Stealth Mode" msgstr "" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "Metric" @@ -5969,6 +6722,11 @@ msgstr "" "0 top z distance, 0 interface spacing, concentric pattern and disable " "independent support layer height" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6601,15 +7359,18 @@ msgstr "" msgid "Ramming line spacing" msgstr "" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "Auto-Calc" + +msgid "Re-calculate" msgstr "" msgid "Flushing volumes for filament change" msgstr "Flushing volumes for filament change" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6626,6 +7387,15 @@ msgstr "The multiplier should be in range [%.2f, %.2f]." msgid "Multiplier" msgstr "Multiplier" +msgid "unloaded" +msgstr "unloaded" + +msgid "loaded" +msgstr "loaded" + +msgid "Filament #" +msgstr "Filament #" + msgid "From" msgstr "From" @@ -6662,9 +7432,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "Copy to clipboard" - msgid "Paste from clipboard" msgstr "Paste from clipboard" @@ -6776,9 +7543,6 @@ msgstr "Shift+Any arrow" msgid "Movement step set to 1 mm" msgstr "Movement step set to 1mm" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "Keyboard 1-9: set filament for object/part" @@ -6827,7 +7591,7 @@ msgstr "Gizmo SLA support points" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM paint-on seam" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "" msgid "Plater" @@ -6863,9 +7627,6 @@ msgstr "Set extruder number for the objects and parts" msgid "Delete objects, parts, modifiers " msgstr "Delete objects, parts, modifiers" -msgid "Space" -msgstr "Space" - msgid "Select the object/part and press space to change the name" msgstr "Select the object/part and press space to change the name" @@ -7552,17 +8313,17 @@ msgid "Hostname, IP or URL" msgstr "Hostname, IP or URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgid "Device UI" msgstr "" @@ -7575,11 +8336,11 @@ msgid "API Key / Password" msgstr "API Key / Password" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgid "Name of the printer" msgstr "Name of the printer" @@ -8543,8 +9304,8 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" msgid "Speed of the last cooling move" @@ -8711,11 +9472,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -8732,11 +9494,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -8896,9 +9659,6 @@ msgstr "" "the surface has a rough textured look. This setting controls the fuzzy " "position." -msgid "None" -msgstr "None" - msgid "Contour" msgstr "Contour" @@ -9254,6 +10014,17 @@ msgstr "" "Whether the machine supports silent mode in which machine uses lower " "acceleration to print more quietly" +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "Machine limits" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9276,9 +10047,6 @@ msgstr "Maximum speed Z" msgid "Maximum speed E" msgstr "Maximum speed E" -msgid "Machine limits" -msgstr "Machine limits" - msgid "Maximum X speed" msgstr "Maximum X speed" @@ -9483,11 +10251,11 @@ msgid "Host Type" msgstr "Host Type" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgid "Nozzle volume" msgstr "Nozzle volume" @@ -9610,11 +10378,25 @@ msgstr "This is the speed for inner walls." msgid "Number of walls of every layer" msgstr "This is the number of walls per layer." +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" @@ -9694,9 +10476,6 @@ msgstr "Retract on layer change" msgid "Force a retraction when changes layer" msgstr "This forces a retraction on layer changes." -msgid "Length" -msgstr "Length" - msgid "Retraction Length" msgstr "Retraction Length" @@ -9877,6 +10656,21 @@ msgid "" "inward movement is executed before the extruder leaves the loop." msgstr "" +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "" @@ -10579,9 +11373,6 @@ msgid "The volume of material to prime extruder on tower." msgstr "" "This is the volume of material to prime the extruder with on the tower." -msgid "Width" -msgstr "Width" - msgid "Width of prime tower" msgstr "This is the width of prime towers." @@ -10734,8 +11525,8 @@ msgstr "" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" msgid "" @@ -11891,9 +12682,6 @@ msgstr "" msgid "Create Based on Current Printer" msgstr "" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "" @@ -12066,10 +12854,10 @@ msgstr "" msgid "Export Configs" msgstr "" -msgid "Printer config bundle(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" msgstr "" -msgid "Filament bundle(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" @@ -12108,7 +12896,7 @@ msgid "" msgstr "" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" @@ -12429,6 +13217,19 @@ msgid "" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -12436,12 +13237,22 @@ msgid "" "3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" "Did you know that you can cut a model at any angle and position with the " "cutting tool?" msgstr "" +"Cut Tool\n" +"Did you know that you can cut a model at any angle and position with the " +"cutting tool?" #: resources/data/hints.ini: [hint:Fix Model] msgid "" @@ -12455,12 +13266,16 @@ msgid "" "Timelapse\n" "Did you know that you can generate a timelapse video during each print?" msgstr "" +"Timelapse\n" +"Did you know that you can generate a timelapse video during each print?" #: resources/data/hints.ini: [hint:Auto-Arrange] msgid "" "Auto-Arrange\n" "Did you know that you can auto-arrange all objects in your project?" msgstr "" +"Auto-Arrange\n" +"Did you know that you can auto-arrange all the objects in your project?" #: resources/data/hints.ini: [hint:Auto-Orient] msgid "" @@ -12468,6 +13283,9 @@ msgid "" "Did you know that you can rotate objects to an optimal orientation for " "printing by a simple click?" msgstr "" +"Auto-Orient\n" +"Did you know that you can rotate objects to an optimal orientation for " +"printing with a simple click?" #: resources/data/hints.ini: [hint:Lay on Face] msgid "" @@ -12476,6 +13294,10 @@ msgid "" "sits on the print bed? Select the \"Place on face\" function or press the " "F key." msgstr "" +"Lay on Face\n" +"Did you know that you can quickly orient a model so that one of its faces " +"sits on the print bed? Select the \"Place on face\" function or press the " +"F key." #: resources/data/hints.ini: [hint:Object List] msgid "" @@ -12483,6 +13305,9 @@ msgid "" "Did you know that you can view all objects/parts in a list and change " "settings for each object/part?" msgstr "" +"Object List\n" +"Did you know that you can view all objects/parts in a list and change " +"settings for each object/part?" #: resources/data/hints.ini: [hint:Search Functionality] msgid "" @@ -12504,6 +13329,9 @@ msgid "" "Did you know that you can view all objects/parts on a table and change " "settings for each object/part?" msgstr "" +"Slicing Parameter Table\n" +"Did you know that you can view all objects/parts on a table and change " +"settings for each object/part?" #: resources/data/hints.ini: [hint:Split to Objects/Parts] msgid "" @@ -12511,6 +13339,9 @@ msgid "" "Did you know that you can split a big object into small ones for easy " "colorizing or printing?" msgstr "" +"Split to Objects/Parts\n" +"Did you know that you can split a big object into small ones for easy " +"colorizing or printing?" #: resources/data/hints.ini: [hint:Subtract a Part] msgid "" @@ -12536,6 +13367,10 @@ msgid "" "paint it on your print, to have it in a less visible location? This improves " "the overall look of your model. Check it out!" msgstr "" +"Z seam location\n" +"Did you know that you can customize the location of the Z seam, and even " +"paint it on your print, to have it in a less visible location? This improves " +"the overall look of your model. Check it out!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" @@ -12544,6 +13379,10 @@ msgid "" "prints? Depending on the material, you can improve the overall finish of the " "printed model by doing some fine-tuning." msgstr "" +"Fine-tuning for flow rate\n" +"Did you know that flow rate can be fine-tuned for even better-looking " +"prints? Depending on the material, you can improve the overall finish of the " +"printed model by doing some fine-tuning." #: resources/data/hints.ini: [hint:Split your prints into plates] msgid "" @@ -12552,6 +13391,10 @@ msgid "" "individual plates ready to print? This will simplify the process of keeping " "track of all the parts." msgstr "" +"Split your prints into plates\n" +"Did you know that you can split a model that has a lot of parts into " +"individual plates ready to print? This will simplify the process of keeping " +"track of all the parts." #: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer #: Height] @@ -12560,6 +13403,9 @@ msgid "" "Did you know that you can print a model even faster, by using the Adaptive " "Layer Height option? Check it out!" msgstr "" +"Speed up your print with Adaptive Layer Height\n" +"Did you know that you can print a model even faster by using the Adaptive " +"Layer Height option? Check it out!" #: resources/data/hints.ini: [hint:Support painting] msgid "" @@ -12568,6 +13414,10 @@ msgid "" "makes it easy to place the support material only on the sections of the " "model that actually need it." msgstr "" +"Support painting\n" +"Did you know that you can paint the location of your supports? This feature " +"makes it easy to place the support material only on the sections of the " +"model that actually need it." #: resources/data/hints.ini: [hint:Different types of supports] msgid "" @@ -12576,6 +13426,10 @@ msgid "" "supports work great for organic models, while saving filament and improving " "print speed. Check them out!" msgstr "" +"Different types of supports\n" +"Did you know that you can choose from multiple types of supports? Tree " +"supports work great for organic models while saving filament and improving " +"print speed. Check them out!" #: resources/data/hints.ini: [hint:Printing Silk Filament] msgid "" @@ -12584,6 +13438,10 @@ msgid "" "successfully? Higher temperature and lower speed are always recommended for " "the best results." msgstr "" +"Printing Silk Filament\n" +"Did you know that Silk filament needs special consideration to print " +"successfully? A higher temperature and lower speed are always recommended " +"for the best results." #: resources/data/hints.ini: [hint:Brim for better adhesion] msgid "" @@ -12591,6 +13449,9 @@ msgid "" "Did you know that when printing models have a small contact interface with " "the printing surface, it's recommended to use a brim?" msgstr "" +"Brim for better adhesion\n" +"Did you know that when printed models have a small contact interface with " +"the printing surface, it's recommended to use a brim?" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] msgid "" @@ -12598,12 +13459,17 @@ msgid "" "Did you know that you can set slicing parameters for all selected objects at " "one time?" msgstr "" +"Set parameters for multiple objects\n" +"Did you know that you can set slicing parameters for all selected objects at " +"once?" #: resources/data/hints.ini: [hint:Stack objects] msgid "" "Stack objects\n" "Did you know that you can stack objects as a whole one?" msgstr "" +"Stack objects\n" +"Did you know that you can stack objects as a whole one?" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" @@ -12611,6 +13477,9 @@ msgid "" "Did you know that you can save the wasted filament by flushing them into " "support/objects/infill during filament change?" msgstr "" +"Flush into support/objects/infill\n" +"Did you know that you can reduce wasted filament by flushing it into support/" +"objects/infill during filament changes?" #: resources/data/hints.ini: [hint:Improve strength] msgid "" @@ -12618,6 +13487,9 @@ msgid "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" msgstr "" +"Improve strength\n" +"Did you know that you can use more wall loops and higher sparse infill " +"density to improve the strength of the model?" #: resources/data/hints.ini: [hint:When need to print with the printer door #: opened] @@ -12636,6 +13508,40 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Movement:" +#~ msgstr "Movement:" + +#~ msgid "Movement" +#~ msgstr "Movement" + +#~ msgid "Auto Segment" +#~ msgstr "Auto Segment" + +#~ msgid "Depth ratio" +#~ msgstr "Depth ratio" + +#~ msgid "Prizm" +#~ msgstr "Prizm" + +#~ msgid "connector is out of cut contour" +#~ msgstr "connector is out of cut contour" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "connectors are out of cut contour" + +#~ msgid "connector is out of object" +#~ msgstr "connector is out of object" + +#~ msgid "connectors is out of object" +#~ msgstr "Connectors must be on object surface." + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Invalid state. \n" +#~ "No one part is selected to keep after cut" + #~ msgid "Edit Text" #~ msgstr "Edit Text" @@ -12669,18 +13575,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Quick" -#~ msgid "Auto-Calc" -#~ msgstr "Auto-Calc" - -#~ msgid "unloaded" -#~ msgstr "unloaded" - -#~ msgid "loaded" -#~ msgstr "loaded" - -#~ msgid "Filament #" -#~ msgstr "Filament #" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index c16143b26a..24d16f3f63 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: \n" "Last-Translator: Carlos Fco. Caruncho Serrano \n" "Language-Team: \n" @@ -102,7 +102,7 @@ msgid "Support Generated" msgstr "Soportes Generados" msgid "Gizmo-Place on Face" -msgstr "" +msgstr "Situación-Gizmo enfrente" msgid "Lay on face" msgstr "Tumbar boca abajo" @@ -153,7 +153,7 @@ msgid "Height range" msgstr "Rango de altura" msgid "Alt + Shift + Enter" -msgstr "" +msgstr "Alt + Shift + Intro" msgid "Toggle Wireframe" msgstr "Alternar Malla Alámbrica" @@ -184,13 +184,13 @@ msgid "Move" msgstr "Mover" msgid "Gizmo-Move" -msgstr "" +msgstr "Movimiento-Gizmo" msgid "Rotate" msgstr "Rotar" msgid "Gizmo-Rotate" -msgstr "" +msgstr "Rotación-Gizmo" msgid "Optimize orientation" msgstr "Optimizar orientación" @@ -202,7 +202,7 @@ msgid "Scale" msgstr "Escalar" msgid "Gizmo-Scale" -msgstr "" +msgstr "Reescalar-Gizmo" msgid "Error: Please close all toolbar menus first" msgstr "" @@ -217,6 +217,9 @@ msgstr "mm" msgid "Position" msgstr "Posición" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Rotación" @@ -256,6 +259,7 @@ msgstr "Coordenadas cartesianas" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Tamaño" @@ -265,6 +269,113 @@ msgstr "%" msgid "uniform scale" msgstr "Escala uniforme" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "Automático" + +msgid "Manual" +msgstr "Manual" + +msgid "Plug" +msgstr "Conectar" + +msgid "Dowel" +msgstr "Filamento" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Cono" + +msgid "Square" +msgstr "Cuadrado" + +msgid "Hexagon" +msgstr "Hexágono" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "Colocar en la posición de corte" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "Conectores" + +msgid "Type" +msgstr "Tipo" + +msgid "Style" +msgstr "Estilo" + +msgid "Shape" +msgstr "Forma" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "Ancho" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "Pieza" + +msgid "Object" +msgstr "Objeto" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Toleráncia" + +msgid "Drag" +msgstr "Soltar" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Click izquierdo" @@ -277,9 +388,6 @@ msgstr "Click derecho" msgid "Remove connector" msgstr "Borrar conector" -msgid "Drag" -msgstr "Soltar" - msgid "Move connector" msgstr "Mover conector" @@ -295,23 +403,51 @@ msgstr "Seleccionar todos los conectores" msgid "Cut" msgstr "Cortar" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "Reparación de un objeto modelo" +msgid "Remove connectors" +msgstr "Borrar conectores" -msgid "Connector" -msgstr "Conector" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "Movimiento:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "Movimiento" +msgid "Space" +msgstr "Espacio" -msgid "Height" -msgstr "Altura" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Confirmar conectores" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "Reiniciar" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Editar conectores" @@ -319,6 +455,12 @@ msgstr "Editar conectores" msgid "Add connectors" msgstr "Añadir conectores" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Parte alta" @@ -328,9 +470,6 @@ msgstr "Parte baja" msgid "Keep" msgstr "Mantener" -msgid "Place on cut" -msgstr "Colocar en la posición de corte" - msgid "Flip" msgstr "Girar" @@ -338,89 +477,60 @@ msgid "After cut" msgstr "Después del corte" msgid "Cut to parts" -msgstr "Cortar en piezas" - -msgid "Auto Segment" -msgstr "Auto Segmentar" +msgstr "Separar en piezas" msgid "Perform cut" msgstr "Realizar corte" -msgid "Reset" -msgstr "Reiniciar" - -msgid "Connectors" -msgstr "Conectores" - -msgid "Type" -msgstr "Tipo" - -msgid "Style" -msgstr "Estilo" - -msgid "Shape" -msgstr "Forma" - -msgid "Depth ratio" -msgstr "Relación de profundidad" - -msgid "Remove connectors" -msgstr "Borrar conectores" - -msgid "Prizm" -msgstr "Prisma" - -msgid "Frustum" -msgstr "Cono" - -msgid "Square" -msgstr "Cuadrado" - -msgid "Hexagon" -msgstr "Hexágono" - -msgid "Confirm connectors" -msgstr "Confirmar conectores" - -msgid "Cancel" -msgstr "Cancelar" - msgid "Warning" msgstr "Peligro" msgid "Invalid connectors detected" msgstr "Conectores inválidos detectados" -msgid "connector is out of cut contour" -msgstr "el conector está fuera del contorno de corte" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" -msgid "connectors are out of cut contour" -msgstr "los conectores están fuera del contorno de corte" - -msgid "connector is out of object" -msgstr "el conector está fuera del objeto" - -msgid "connectors is out of object" -msgstr "los conectores están fuera del objeto" +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" msgid "Some connectors are overlapped" msgstr "Algunos conectores están solapados" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"Estado inválido. \n" -"No se ha seleccionado ninguna pieza para conservar después del corte" -msgid "Plug" -msgstr "Conectar" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "Filamento" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "Toleráncia" +msgid "Connector" +msgstr "Conector" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" +"Los bordes con pliegues pueden ser causados por la herramienta de corte, " +"¿quieres arreglarlo ahora?" + +msgid "Repairing model object" +msgstr "Reparación de un objeto modelo" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Nombre de la malla" @@ -518,6 +628,8 @@ msgstr "Saliendo de la sección de pintado de la costura" msgid "Paint-on seam editing" msgstr "Edición de costuras pintadas" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Fuente" @@ -555,6 +667,655 @@ msgstr "Rotar texto" msgid "Text shape" msgstr "Forma de texto" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "Avanzado" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "Modificador" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "Cargando" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Altura" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Reflejar" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "Borrar" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "Ninguno" + +msgid "Diameter" +msgstr "Diámetro" + +msgid "Length" +msgstr "Largo" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "Copiar al portapapeles" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -699,7 +1460,7 @@ msgid "Rebuild" msgstr "Reconstruir" msgid "Loading current presets" -msgstr "Carga de los preajustes actuales" +msgstr "Carga de los perfiles actuales" msgid "Loading a mode view" msgstr "Cargar un modo de vista" @@ -708,7 +1469,7 @@ msgid "Choose one file (3mf):" msgstr "Elija un archivo (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" -msgstr "Elige uno o más archivos (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" +msgstr "Escoja uno o más archivos (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Elige uno o más archivos (3mf/step/stl/svg/obj/amf):" @@ -717,14 +1478,14 @@ msgid "Choose one file (gcode/3mf):" msgstr "Elegir un archivo (gcode/3mf):" msgid "Some presets are modified." -msgstr "Algunos preajustes se modificaron." +msgstr "Algunos perfiles se modificaron." msgid "" "You can keep the modifield presets to the new project, discard or save " "changes as new presets." msgstr "" -"Puede mantener los preajustes modificados en el nuevo proyecto, descartar o " -"guardar los cambios como nuevos preajustes." +"Puede mantener los perfiles modificados en el nuevo proyecto, descartar o " +"guardar los cambios como nuevos perfiles." msgid "User logged out" msgstr "Usuario desconectado" @@ -751,12 +1512,12 @@ msgid "" "The number of user presets cached in the cloud has exceeded the upper limit, " "newly created user presets can only be used locally." msgstr "" +"El número de perfiles de usuario almacenados en caché en la nube ha superado " +"el límite superior, los perfiles de usuario recién creados sólo pueden " +"utilizarse localmente." msgid "Sync user presets" -msgstr "" - -msgid "Loading" -msgstr "Cargando" +msgstr "Sincronizar perfiles de usuario" msgid "Loading user preset" msgstr "Cargando la preselección del usuario" @@ -788,9 +1549,6 @@ msgstr "Seleccione un archivo de G-Code:" msgid "Import File" msgstr "Importar Archivo" -msgid "Delete" -msgstr "Borrar" - msgid "Choose files" msgstr "Elija los archivos" @@ -861,9 +1619,6 @@ msgstr "Opciones de limpieza" msgid "Bed adhension" msgstr "Adhesión a la cama" -msgid "Advanced" -msgstr "Avanzado" - msgid "Add part" msgstr "Añadir pieza" @@ -880,22 +1635,22 @@ msgid "Add support enforcer" msgstr "Añadir refuerzo de soportes" msgid "Add text" -msgstr "" +msgstr "Añadir texto" msgid "Add negative text" -msgstr "" +msgstr "Añadir texto negativo" msgid "Add text modifier" -msgstr "" +msgstr "Añadir modificador de texto" msgid "Add SVG part" -msgstr "" +msgstr "Añadir parte SVG" msgid "Add negative SVG" -msgstr "" +msgstr "Añadir SVG negativo" msgid "Add SVG modifier" -msgstr "" +msgstr "Añadir modificador SVG" msgid "Select settings" msgstr "Seleccione los ajustes" @@ -915,6 +1670,21 @@ msgstr "Eliminar el objeto seleccionado" msgid "Load..." msgstr "Cargar..." +msgid "Cube" +msgstr "Cubo" + +msgid "Cylinder" +msgstr "Cilindro" + +msgid "Cone" +msgstr "Cono" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "Cubo Orca" @@ -927,20 +1697,11 @@ msgstr "Prueba Autodesk FDM" msgid "Voron Cube" msgstr "Cubo de Vorón" -msgid "Cube" -msgstr "Cubo" - -msgid "Cylinder" -msgstr "Cilindro" - -msgid "Cone" -msgstr "Cono" +msgid "Stanford Bunny" +msgstr "" msgid "Text" -msgstr "" - -msgid "SVG" -msgstr "" +msgstr "Texto" msgid "Height range Modifier" msgstr "Modificador de rango de Altura" @@ -970,10 +1731,10 @@ msgid "Fix model" msgstr "Reparar el modelo" msgid "Export as one STL" -msgstr "" +msgstr "Exportar como STL único" msgid "Export as STLs" -msgstr "" +msgstr "Exportar como STLs" msgid "Reload from disk" msgstr "Recargar desde el disco" @@ -1069,23 +1830,20 @@ msgstr "A lo largo del eje Z" msgid "Mirror along the Z axis" msgstr "Espejo a lo largo del eje Z" -msgid "Mirror" -msgstr "Reflejar" - msgid "Mirror object" msgstr "Objeto reflejado" msgid "Edit text" -msgstr "" +msgstr "Editar texto" msgid "Ability to change text, font, size, ..." -msgstr "" +msgstr "Habilidad para cambiar texto, fuente, tamaño, ..." msgid "Edit SVG" -msgstr "" +msgstr "Editar SVG" msgid "Change SVG source file, projection, size, ..." -msgstr "" +msgstr "Cambiar archivo fuente SVG, proyección, tamaño, ..." msgid "Invalidate cut info" msgstr "Invalidar información de corte" @@ -1093,6 +1851,9 @@ msgstr "Invalidar información de corte" msgid "Add Primitive" msgstr "Añadir Primitivo" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "Mostrar Etiquetas" @@ -1346,12 +2107,6 @@ msgstr "Rangos de altura" msgid "Settings for height range" msgstr "Ajustes de rango de altura" -msgid "Object" -msgstr "Objeto" - -msgid "Part" -msgstr "Pieza" - msgid "Layer" msgstr "Capa" @@ -1377,9 +2132,6 @@ msgstr "El tipo de la última pieza del objeto sólido no debe cambiarse." msgid "Negative Part" msgstr "Parte negativa" -msgid "Modifier" -msgstr "Modificador" - msgid "Support Blocker" msgstr "Bloqueador de soporte" @@ -1454,9 +2206,6 @@ msgstr "Densidad de relleno(%)" msgid "Auto Brim" msgstr "Borde de Adherencia Automático" -msgid "Auto" -msgstr "Automático" - msgid "Mouse ear" msgstr "Oreja de ratón" @@ -1512,7 +2261,7 @@ msgid "Pause" msgstr "Pausa" msgid "Template" -msgstr "" +msgstr "Plantilla" msgid "Custom" msgstr "Personalizado" @@ -1532,9 +2281,6 @@ msgstr "G-Code personalizado" msgid "Enter Custom G-code used on current layer:" msgstr "Inserta el G-Code personalizado usado en la capa actual:" -msgid "OK" -msgstr "OK" - msgid "Jump to Layer" msgstr "Salta a la Capa" @@ -1589,15 +2335,15 @@ msgstr "Sin impresión" msgid "..." msgstr "..." -msgid "Failed to connect to the server" -msgstr "No se ha podido conectar con el servidor" - msgid "Check the status of current system services" msgstr "Check the status of current system services" msgid "code" msgstr "code" +msgid "Failed to connect to the server" +msgstr "No se ha podido conectar con el servidor" + msgid "Failed to connect to cloud service" msgstr "Failed to connect to cloud service" @@ -1685,13 +2431,13 @@ msgid "Purge old filament" msgstr "Purgar el filamento viejo" msgid "Feed Filament" -msgstr "Cargar filamento" +msgstr "Cargar Filamento" msgid "Confirm extruded" -msgstr "Confirmar extrusión" +msgstr "Confirmación de extrusión" msgid "Check filament location" -msgstr "Compruebe la ubicación del filamento" +msgstr "Probar localización de filamento" msgid "Grab new filament" msgstr "Grab new filament" @@ -1778,10 +2524,10 @@ msgid "Orienting" msgstr "Orientación" msgid "Orienting canceled." -msgstr "" +msgstr "Orientación cancelada." msgid "Filling" -msgstr "" +msgstr "Relleno" msgid "Bed filling canceled." msgstr "Bed filling canceled." @@ -1790,13 +2536,13 @@ msgid "Bed filling done." msgstr "Bed filling done." msgid "Searching for optimal orientation" -msgstr "" +msgstr "Buscando una orientación óptima" msgid "Orientation search canceled." -msgstr "" +msgstr "Búsqueda de orientación cancelada." msgid "Orientation found." -msgstr "" +msgstr "Orientación encontrada." msgid "Logging in" msgstr "Iniciando sesión" @@ -1867,7 +2613,7 @@ msgid "Sending print job through cloud service" msgstr "Enviando trabajo de impresión a través del servicio en la nube" msgid "Print task sending times out." -msgstr "" +msgstr "Tarea de envío de impresión fallida." msgid "Service Unavailable" msgstr "Servicio No Disponible" @@ -1910,8 +2656,8 @@ msgid "" "The SLA archive doesn't contain any presets. Please activate some SLA " "printer preset first before importing that SLA archive." msgstr "" -"El SLA importado no contiene ningún preajuste. Por favor active algunos " -"preajustes de la impresora primero antes de importar ese archivo SLA." +"El SLA importado no contiene ningún perfil. Por favor active algunos " +"perfiles de la impresora primero antes de importar ese archivo SLA." msgid "Importing canceled." msgstr "Importación cancelada." @@ -1923,15 +2669,14 @@ msgid "" "The imported SLA archive did not contain any presets. The current SLA " "presets were used as fallback." msgstr "" -"El SLA importado no contiene ningún preajuste. Los preajustes de SLA " -"actuales serán usados como alternativa." +"El SLA importado no contiene ningún perfil. Los perfiles de SLA actuales " +"serán usados como alternativa." msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "No puedes cargar un proyecto SLA con objetos multi-pieza en la cama" msgid "Please check your object list before preset changing." -msgstr "" -"Por favor comprueba tu lista de objectos antes de cambiar el preajuste." +msgstr "Por favor comprueba tu lista de objectos antes de cambiar el perfil." msgid "Attention!" msgstr "¡Atención!" @@ -2076,10 +2821,10 @@ msgid "You need to select the material type and color first." msgstr "Necesitas seleccionar el tipo y el color del material primero." msgid "Please input a valid value (K in 0~0.3)" -msgstr "" +msgstr "Por favor, introduzca un valor válido (K en 0~0.3)" msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" -msgstr "" +msgstr "Por favor, introduzca un valor válido (K en 0~0.3, N en 0.6~2.0))" msgid "Other Color" msgstr "Otro color" @@ -2097,8 +2842,8 @@ msgid "" msgstr "" "La temperatura y la velocidad volumétrica máxima de la boquilla afectará a " "los resultados de los ajustes. Por favor, rellena los mismos valores de la " -"actual impresión. Ellos pueden ser auto-rellenados seleccionando un " -"preajuste de filamento." +"actual impresión. Ellos pueden ser auto-rellenados seleccionando un perfil " +"de filamento." msgid "Nozzle Diameter" msgstr "Diámetro" @@ -2257,7 +3002,7 @@ msgid "Group" msgstr "Agrupar" msgid "The printer does not currently support auto refill." -msgstr "La impresora no soporta la auto carga actualmente." +msgstr "La impresora no soporta auto recarga actualmente." msgid "" "AMS filament backup is not enabled, please enable it in the AMS settings." @@ -2451,9 +3196,6 @@ msgstr "" msgid "Origin" msgstr "Origen" -msgid "Diameter" -msgstr "Diámetro" - msgid "Size in X and Y of the rectangular plate." msgstr "Tamaño en X e Y de la bandeja rectangular." @@ -2632,6 +3374,18 @@ msgstr "" "Sí - Cambiar estos ajustes y activar el modo espiral automáticamente\n" "No - Dejar de usar el modo espiral esta vez" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2775,16 +3529,16 @@ msgid "Motor noise showoff" msgstr "Ruido notable del motor" msgid "Nozzle filament covered detected pause" -msgstr "" +msgstr "Pausa de detección de filamento de boquilla cubierta" msgid "Cutter error pause" -msgstr "" +msgstr "Pausa de error de cortador" msgid "First layer error pause" -msgstr "" +msgstr "Pausa de error de primera capa" msgid "Nozzle clog pause" -msgstr "" +msgstr "Pausa de obstrucción de boquilla" msgid "MC" msgstr "MC" @@ -2994,7 +3748,7 @@ msgid "Total" msgstr "Total" msgid "Tower" -msgstr "" +msgstr "Torre" msgid "Total Estimation" msgstr "Estimación total" @@ -3023,6 +3777,9 @@ msgstr "Tiempo" msgid "Percent" msgstr "Porcentaje" +msgid "Used filament" +msgstr "Filamento usado" + msgid "Layer Height (mm)" msgstr "Altura de la capa (mm)" @@ -3041,9 +3798,6 @@ msgstr "Temperatura (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Tasa de caudal volumétrico (mm³/seg)" -msgid "Used filament" -msgstr "Filamento usado" - msgid "Travel" msgstr "Recorrido" @@ -3090,10 +3844,10 @@ msgid "Print settings" msgstr "Configuración de impresión" msgid "Custom g-code" -msgstr "" +msgstr "G-Code personalizado" msgid "ToolChange" -msgstr "" +msgstr "Cambio de Herramienta" msgid "Time Estimation" msgstr "Estimación de Tiempo" @@ -3222,7 +3976,7 @@ msgid "Arrange objects on selected plates" msgstr "Colocar los objetos en las bandejas seleccionadas" msgid "Split to objects" -msgstr "Partir en varias piezas" +msgstr "Separar en objetos" msgid "Split to parts" msgstr "Separar en piezas" @@ -3379,7 +4133,7 @@ msgid "Application is closing" msgstr "La aplicación se está cerrando" msgid "Closing Application while some presets are modified." -msgstr "Cerrando la aplicación mientras se modifican algunos preajustes." +msgstr "Cerrando la aplicación mientras se modifican algunos perfiles." msgid "Logging" msgstr "Registrando" @@ -3550,10 +4304,10 @@ msgid "Import" msgstr "Importar" msgid "Export all objects as one STL" -msgstr "" +msgstr "Exportar todos los objetos como un único STL" msgid "Export all objects as STLs" -msgstr "" +msgstr "Exportar todos los objetos como varios STL" msgid "Export Generic 3MF" msgstr "Exportar 3MF genérico" @@ -3643,16 +4397,16 @@ msgid "Use Orthogonal View" msgstr "Utilizar Vista Octogonal" msgid "Show &G-code Window" -msgstr "" +msgstr "Mostrar Ventana &G-Code" msgid "Show g-code window in Previce scene" -msgstr "" +msgstr "Mostrar ventana de G-Code en escena previa" msgid "Reset Window Layout" -msgstr "" +msgstr "Reiniciar Capa de Ventana" msgid "Reset to default window layout" -msgstr "" +msgstr "Restablecer el diseño de ventana por defecto" msgid "Show &Labels" msgstr "Mostrar &Etiquetas" @@ -3829,8 +4583,8 @@ msgid "" msgstr "" "¿Quieres sincronizar tus datos personales desde la Bambú Cloud? \n" "Esta contiene la siguiente información:\n" -"1. Los Preajustes de Proceso\n" -"2. Los Preajustes de Filamento3. Los preajustes de la Impressora" +"1. Los Perfiles de Proceso\n" +"2. Los Perfiles de Filamento3. Los perfiles de la Impressora" msgid "Synchronization" msgstr "Sincronización" @@ -4034,16 +4788,16 @@ msgid "Downloading %d%%..." msgstr "Descargando %d%%..." msgid "Connection lost. Please retry." -msgstr "" +msgstr "Conexión perdida. Por favor, reinténtelo." msgid "The device cannot handle more conversations. Please retry later." msgstr "" msgid "File not exists." -msgstr "" +msgstr "El archivo no existe." msgid "File checksum error. Please retry." -msgstr "" +msgstr "Checksum de archivo erróneo. Por favor, reinténtelo." msgid "Not supported on the current printer version." msgstr "No soportado en la actual versión de la impresora." @@ -4053,7 +4807,7 @@ msgstr "Almacenamiento no disponible, inserte la tarjeta SD." #, c-format, boost-format msgid "Error code: %d" -msgstr "" +msgstr "Código de error: %d" msgid "Speed:" msgstr "Velocidad:" @@ -4202,6 +4956,8 @@ msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." msgstr "" +"Por favor, caliente la boquilla por encima de 170 grados antes de cargar o " +"descargar filamento." msgid "Still unload" msgstr "Aún descargado" @@ -4260,7 +5016,7 @@ msgid "Please click on the star first." msgstr "Por favor presione en las estrellas primero." msgid "InFo" -msgstr "" +msgstr "Información" msgid "Get oss config failed." msgstr "Falló la obtención de la configuración de oss." @@ -4410,7 +5166,7 @@ msgid "Details" msgstr "Detalles" msgid "New printer config available." -msgstr "" +msgstr "Nueva configuración de impresora disponible." msgid "Wiki" msgstr "Wiki" @@ -4666,7 +5422,7 @@ msgid "Set filaments to use" msgstr "Elegir filamentos para usar" msgid "Search plate, object and part." -msgstr "" +msgstr "Buscar placa, objeto y parte." msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." @@ -4681,8 +5437,8 @@ msgid "" "Sync filaments with AMS will drop all current selected filament presets and " "colors. Do you want to continue?" msgstr "" -"Sincronizar filamentos con AMS descartará todos los preajustes de filamento " -"y colores. ¿Desea continuar?" +"Sincronizar filamentos con AMS descartará todos los perfiles de filamento y " +"colores. ¿Desea continuar?" msgid "" "Already did a synchronization, do you want to sync only changes or resync " @@ -4705,9 +5461,9 @@ msgid "" "Orca Slicer or restart Orca Slicer to check if there is an update to system " "presets." msgstr "" -"Hay algunos filamentos desconocidos mapeados en el preajuste genérico. Por " +"Hay algunos filamentos desconocidos mapeados en el perfil genérico. Por " "favor actualice o reinicie Orca Slicer para comprobar si hay una " -"actualización de preajustes del sistema." +"actualización de perfiles del sistema." #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -4759,10 +5515,10 @@ msgstr "" "la superficie. Se recomienda cambiar al modo suave." msgid "Expand sidebar" -msgstr "" +msgstr "Expandir barra lateral" msgid "Collapse sidebar" -msgstr "" +msgstr "Colapsar barra lateral" #, c-format, boost-format msgid "Loading file: %s" @@ -4790,25 +5546,33 @@ msgstr "Por favor, corrijalos en las pestañas de parámetros" msgid "The 3mf has following modified G-codes in filament or printer presets:" msgstr "" +"El archivo 3mf ha realizado las siguientes modificaciones en el G-Code de " +"filamento o impresora:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" msgstr "" +"¡Por favor, confirme que esas modificaciones de G-Code son seguras para " +"evitar cualquier daño a la máquina!" msgid "Modified G-codes" -msgstr "" +msgstr "G-Code modificado" msgid "The 3mf has following customized filament or printer presets:" msgstr "" +"El archivo 3mf tiene los siguientes perfiles personalizados de filamento o " +"impresora:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" msgstr "" +"¡Por favor, confirme que el G-Code dentro de los perfiles son seguros para " +"evitar cualquier daño a la máquina!" msgid "Customized Preset" -msgstr "" +msgstr "Perfil Personalizado" msgid "Name of components inside step file is not UTF8 format!" msgstr "" @@ -4890,12 +5654,14 @@ msgid "" "The file %s already exists\n" "Do you want to replace it?" msgstr "" +"El archivo %s ya existe\n" +"¿Desea reemplazarlo?" msgid "Comfirm Save As" -msgstr "" +msgstr "Salvar Como" msgid "Delete object which is a part of cut object" -msgstr "Borrar objetos los cuales son piezas del objeto cortado" +msgstr "Borrar objeto el cual es una pieza del objeto cortado" msgid "" "You try to delete an object which is a part of a cut object.\n" @@ -4982,8 +5748,7 @@ msgstr "" msgid "You can keep the modified presets to the new project or discard them" msgstr "" -"Puedes mantener los preajustes modificados en el nuevo proyecto o " -"descartarlos" +"Puedes mantener los perfiles modificados en el nuevo proyecto o descartarlos" msgid "Creating a new project" msgstr "Creando un nuevo proyecto" @@ -5020,11 +5785,11 @@ msgid "" "Importing to Orca Slicer failed. Please download the file and manually " "import it." msgstr "" -"La importación a Bambu Studio ha fallado. Descargue el archivo e impórtelo " +"La importación a Orca Slicer ha fallado. Descargue el archivo e impórtelo " "manualmente." msgid "Import SLA archive" -msgstr "" +msgstr "Importar archivo SLA" msgid "The selected file" msgstr "El archivo seleccionado" @@ -5114,9 +5879,12 @@ msgid "" "3MF file?\n" "If you hit 'NO', all SVGs in the project will not be editable any more." msgstr "" +"¿Está seguro que quiere almacenar SVGs originales con sus rutas locales " +"dentro del archivo 3MF?\n" +"Si pulsa 'NO', todos los SVGs en el proyecto no serán editables nunca más." msgid "Private protection" -msgstr "" +msgstr "Protección privada" msgid "Is the printer ready? Is the print sheet in place, empty and clean?" msgstr "" @@ -5144,7 +5912,7 @@ msgstr "" "reparación." msgid "Optimize Rotation" -msgstr "" +msgstr "Optimizar Rotación" msgid "Invalid number" msgstr "Número inválido" @@ -5266,6 +6034,9 @@ msgstr "Región de inicio de sesión" msgid "Stealth Mode" msgstr "Modo invisible" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "Métrico" @@ -5315,30 +6086,30 @@ msgid "If enabled, useful hints are displayed at startup." msgstr "Si está activado, las sugerencias útiles serán mostradas al inicio." msgid "Flushing volumes: Auto-calculate everytime the color changed." -msgstr "" +msgstr "Volumenes de descarga: Auto calcular en cada cambio de color." msgid "If enabled, auto-calculate everytime the color changed." -msgstr "" +msgstr "Si está activado, auto calcula en cada cambio de color." msgid "Presets" -msgstr "Preajustes" +msgstr "Perfiles" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" -"Sincronización automática de los preajustes del usuario (Impresora/Filamento/" +"Sincronización automática de los perfiles del usuario (Impresora/Filamento/" "Proceso)" msgid "User Sync" msgstr "Sincronización de usuario" msgid "Update built-in Presets automatically." -msgstr "Actualizar preajustes integrados automaticamente." +msgstr "Actualizar perfiles integrados automáticamente." msgid "System Sync" msgstr "Sincronizar sistema" msgid "Clear my choice on the unsaved presets." -msgstr "Limpiar mi selección de preajustes no guardados." +msgstr "Limpiar mi selección de perfiles no guardados." msgid "Associate files to OrcaSlicer" msgstr "Asociar archivos a OrcaSlicer" @@ -5377,7 +6148,7 @@ msgid "Clear my choice on the unsaved projects." msgstr "Limpiar mi elección de proyectos no guardados." msgid "No warnings when loading 3MF with modified G-codes" -msgstr "" +msgstr "No avisar cuando cargue archivos 3MF con G-Codes modificados" msgid "Auto-Backup" msgstr "Copia de seguridad automática" @@ -5524,7 +6295,7 @@ msgid "Edit preset" msgstr "Editar ajuste preestablecido" msgid "Project-inside presets" -msgstr "Preajustes internos del proyecto" +msgstr "Perfiles internos del proyecto" msgid "Add/Remove filaments" msgstr "Añadir/Borrar filamentos" @@ -5533,10 +6304,10 @@ msgid "Add/Remove materials" msgstr "Añadir/Borrar materiales" msgid "Select/Remove printers(system presets)" -msgstr "" +msgstr "Seleccionar/Borrar impresoras (perfiles del sistema)" msgid "Create printer" -msgstr "" +msgstr "Crear impresora" msgid "Incompatible" msgstr "Incompatible" @@ -5615,10 +6386,10 @@ msgid "Save %s as" msgstr "Guardar %s como" msgid "User Preset" -msgstr "Preajuste de usuario" +msgstr "Perfil de usuario" msgid "Preset Inside Project" -msgstr "Preajuste interno del proyecto" +msgstr "Perfil interno del proyecto" msgid "Name is invalid;" msgstr "El nombre no es válido;" @@ -5637,15 +6408,14 @@ msgstr "No se permite sobrescribir un perfil del sistema" #, boost-format msgid "Preset \"%1%\" already exists." -msgstr "El preajuste \"%1%\" ya existe." +msgstr "El perfil \"%1%\" ya existe." #, boost-format msgid "Preset \"%1%\" already exists and is incompatible with current printer." -msgstr "" -"El preajuste \"%1%\" ya existe y es incompatible con la impresora actual." +msgstr "El perfil \"%1%\" ya existe y es incompatible con la impresora actual." msgid "Please note that saving action will replace this preset" -msgstr "Tenga en cuenta que la acción de guardar reemplazará este preajuste" +msgstr "Tenga en cuenta que la acción de guardar reemplazará este perfil" msgid "The name is not allowed to be empty." msgstr "No se permite que el nombre esté vacío." @@ -5668,7 +6438,7 @@ msgstr "Copiar" #, boost-format msgid "Printer \"%1%\" is selected with preset \"%2%\"" -msgstr "La impresora \"%1%\" está seleccionada con el preajuste \"%2%\"" +msgstr "La impresora \"%1%\" está seleccionada con el perfil \"%2%\"" #, boost-format msgid "Please choose an action with \"%1%\" preset after saving." @@ -5681,7 +6451,7 @@ msgstr "Para \"%1%\", cambia \"%2%\" por \"%3%\" " #, boost-format msgid "For \"%1%\", add \"%2%\" as a new preset" -msgstr "Para \"%1%\", añada \"%2%\" como un nuevo preajuste" +msgstr "Para \"%1%\", añada \"%2%\" como un nuevo perfil" #, boost-format msgid "Simply switch to \"%1%\"" @@ -5694,7 +6464,7 @@ msgid "(LAN)" msgstr "(Red local)" msgid "Search" -msgstr "" +msgstr "Buscar" msgid "My Device" msgstr "Mi dispositivo" @@ -5874,6 +6644,8 @@ msgstr "" msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" +"El timelapse no está soportado porque la secuencia de impresión está " +"configurada \"Por objeto\"." msgid "Errors" msgstr "Errores" @@ -5901,20 +6673,22 @@ msgstr "" #, c-format, boost-format msgid "nozzle in preset: %s %s" -msgstr "" +msgstr "Boquilla preestablecida: %s %s" #, c-format, boost-format msgid "nozzle memorized: %.1f %s" -msgstr "" +msgstr "Boquilla memorizada: %.1f %s" msgid "" "Your nozzle diameter in preset is not consistent with memorized nozzle " "diameter. Did you change your nozzle lately?" msgstr "" +"¿El diámetro de la boquilla en su configuración no corresponde con el " +"diámetro memorizado? ¿Hizo un cambio de boquilla?" #, c-format, boost-format msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "" +msgstr "*El material de impresión %s con %s podría causar daños en la boquilla" msgid "" "Please click the confirm button if you still want to proceed with printing." @@ -5923,10 +6697,10 @@ msgstr "" "impresión." msgid "Hardened Steel" -msgstr "" +msgstr "Acero endurecido" msgid "Stainless Steel" -msgstr "" +msgstr "Acero Inoxidable" msgid "" "Connecting to the printer. Unable to cancel during the connection process." @@ -5978,7 +6752,7 @@ msgid "Slice ok." msgstr "Laminado correcto." msgid "View all Daily tips" -msgstr "" +msgstr "Mostrar todos los consejos del día" msgid "Failed to create socket" msgstr "Failed to create socket" @@ -6127,7 +6901,7 @@ msgstr "" "defectos en el modelo sin torre de purga. ¿Desea activar la torre de purga?" msgid "Still print by object?" -msgstr "" +msgstr "¿Seguir imprimiendo por objeto?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " @@ -6168,19 +6942,27 @@ msgstr "" "distancia z0, espaciado de interfaz 0, patrón concéntrico y desactivar " "altura de soporte independiente de altura de capa" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." msgstr "" +"La altura de la capa excede el límite en Ajustes de la Impresora -> Extrusor " +"-> Limite de Altura de Capa ,esto puede causar problemas de calidad de " +"impresión." msgid "Adjust to the set range automatically? \n" -msgstr "" +msgstr "¿Desea ajustar el rango automáticamente?\n" msgid "Adjust" -msgstr "" +msgstr "Ajustar" msgid "Ignore" -msgstr "" +msgstr "Ignorar" msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -6206,13 +6988,13 @@ msgid "Wall generator" msgstr "Generador de perímetros" msgid "Walls and surfaces" -msgstr "" +msgstr "Paredes y superficies" msgid "Bridging" -msgstr "" +msgstr "Puentes" msgid "Overhangs" -msgstr "" +msgstr "Voladizos" msgid "Walls" msgstr "Perímetros" @@ -6473,7 +7255,7 @@ msgid "Machine end G-code" msgstr "G-Code final" msgid "Printing by object G-code" -msgstr "" +msgstr "G-Code de impresión por objeto" msgid "Before layer change G-code" msgstr "G-Code para antes del cambio de capa" @@ -6550,14 +7332,16 @@ msgid "" "%d Filament Preset and %d Process Preset is attached to this printer. Those " "presets would be deleted if the printer is deleted." msgstr "" +"El perfil de Filamento %d y el perfil de Proceso %d están adjuntos a esta " +"impresora." msgid "Presets inherited by other presets can not be deleted!" -msgstr "" +msgstr "¡Los perfiles heredados de otros perfiles no pueden borrarse!" msgid "The following presets inherit this preset." msgid_plural "The following preset inherits this preset." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "El siguiente perfil hereda de este otro." +msgstr[1] "Los siguientes perfiles heredan de este otro." #. TRN Remove/Delete #, boost-format @@ -6566,18 +7350,21 @@ msgstr "%1% Preestablecido" msgid "Following preset will be deleted too." msgid_plural "Following presets will be deleted too." -msgstr[0] "El siguiente preajuste también se eliminará." -msgstr[1] "Los siguientes preajustes también se eliminarán." +msgstr[0] "El siguiente perfil también se eliminará." +msgstr[1] "Los siguientes perfiles también se eliminarán." msgid "" "Are you sure to delete the selected preset? \n" "If the preset corresponds to a filament currently in use on your printer, " "please reset the filament information for that slot." msgstr "" +"¿Está seguro de que desea eliminar el perfil seleccionado? \n" +"Si el perfil corresponde a un filamento actualmente en uso en su impresora, " +"restablezca la información del filamento para esa ranura." #, boost-format msgid "Are you sure to %1% the selected preset?" -msgstr "¿Está seguro de %1% el preajuste seleccionado?" +msgstr "¿Está seguro de %1% el perfil seleccionado?" msgid "All" msgstr "Todo" @@ -6644,7 +7431,7 @@ msgid "" "Save the selected options to preset \n" "\"%1%\"." msgstr "" -"Guardar las opciones seleccionadas en el preajuste \n" +"Guardar las opciones seleccionadas en el perfil \n" "\"%1%\"." #, boost-format @@ -6652,7 +7439,7 @@ msgid "" "Transfer the selected options to the newly selected preset \n" "\"%1%\"." msgstr "" -"Transfiere las opciones seleccionadas al nuevo preajuste seleccionado \n" +"Transfiere las opciones seleccionadas al nuevo perfil seleccionado \n" "\"%1%\"." #, boost-format @@ -6664,7 +7451,7 @@ msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it " "contains the following unsaved changes:" msgstr "" -"El preajuste \"%1%\" no es compatible con el nuevo perfil de la impresora y " +"El perfil \"%1%\" no es compatible con el nuevo perfil de la impresora y " "contiene los siguientes cambios no guardados:" #, boost-format @@ -6672,8 +7459,8 @@ msgid "" "Preset \"%1%\" is not compatible with the new process profile and it " "contains the following unsaved changes:" msgstr "" -"El preajuste \"%1%\" no es compatible con el nuevo perfil de proceso y " -"contiene los siguientes cambios no guardados:" +"El perfil \"%1%\" no es compatible con el nuevo perfil de proceso y contiene " +"los siguientes cambios no guardados:" #, boost-format msgid "" @@ -6821,15 +7608,18 @@ msgstr "Ancho de línea de Ramming" msgid "Ramming line spacing" msgstr "Espaciado de línea de moldeado de extremo" -msgid "Recalculate" -msgstr "" +msgid "Auto-Calc" +msgstr "Auto-Calc" + +msgid "Re-calculate" +msgstr "Recalcular" msgid "Flushing volumes for filament change" msgstr "Volúmenes de limpieza para el cambio de filamentos" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6846,6 +7636,15 @@ msgstr "El multiplicador debería estar en el rango [%.2f, %.2f]." msgid "Multiplier" msgstr "Multiplicador" +msgid "unloaded" +msgstr "descargado" + +msgid "loaded" +msgstr "cargado" + +msgid "Filament #" +msgstr "Filamento #" + msgid "From" msgstr "Desde" @@ -6853,10 +7652,10 @@ msgid "To" msgstr "A" msgid "Bambu Network plug-in not detected." -msgstr "" +msgstr "Plugin Red Bambú no detectado." msgid "Click here to download it." -msgstr "" +msgstr "Presione aquí para descargarlo." msgid "Login" msgstr "Inicio de sesión" @@ -6883,9 +7682,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "Copiar al portapapeles" - msgid "Paste from clipboard" msgstr "Pegar desde el portapapeles" @@ -6893,7 +7689,7 @@ msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "Mostrar/Ocultar el diálogo de ajustes de los dispositivos 3Dconnexion" msgid "Switch table page" -msgstr "" +msgstr "Cambiar de página de tabla" msgid "Show keyboard shortcuts list" msgstr "Muestra lista de atajos de teclado" @@ -6997,9 +7793,6 @@ msgstr "Mayúsculas+Cualquier flecha" msgid "Movement step set to 1 mm" msgstr "Paso de movimiento configurado a 1 mm" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "teclado 1-9: ajustar el filamento para el objeto/pieza" @@ -7048,7 +7841,7 @@ msgstr "Puntos de soporte SLA Gizmo" msgid "Gizmo FDM paint-on seam" msgstr "Costura de pintura Gizmo FDM" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "Cambiar entre Preparar/Previsualizar" msgid "Plater" @@ -7084,9 +7877,6 @@ msgstr "Ajustar el número de extrusor para los objetos y las piezas" msgid "Delete objects, parts, modifiers " msgstr "Eliminar objetos, piezas, modificadores " -msgid "Space" -msgstr "Espacio" - msgid "Select the object/part and press space to change the name" msgstr "" "Seleccione el objeto/pieza y pulse la barra espaciadora para cambiar el " @@ -7152,13 +7942,13 @@ msgid "New version of Orca Slicer" msgstr "Nueva versión de Orca Slicer" msgid "Skip this Version" -msgstr "" +msgstr "Saltar esta Versión" msgid "Done" msgstr "Hecho" msgid "Confirm and Update Nozzle" -msgstr "" +msgstr "Confirmar y Actualizar la Boquilla" msgid "LAN Connection Failed (Sending print file)" msgstr "Conexión de red fallida (Mandando archivo de impresión)" @@ -7187,20 +7977,25 @@ msgstr "¿Dónde encontrar la IP de su impresora y el Código de Acceso?" msgid "Step 3: Ping the IP address to check for packet loss and latency." msgstr "" +"Paso 3: Haga ping a la dirección IP para comprobar la perdida de paquetes y " +"la latencia." msgid "Test" msgstr "Test" msgid "IP and Access Code Verified! You may close the window" -msgstr "" +msgstr "¡Ip y Código de Acceso Verificadas! ¡Debería cerrar esta ventana" msgid "Connection failed, please double check IP and Access Code" msgstr "" +"Conexión fallida, por favor, compruebe la dirección IP y el Código de Acceso" msgid "" "Connection failed! If your IP and Access Code is correct, \n" "please move to step 3 for troubleshooting network issues" msgstr "" +"¡Conexión fallida!, si su dirección IP y el Código de Acceso son correctos.\n" +"por favor, pase al paso 3 para corregir problemas de red" msgid "Model:" msgstr "Modelo:" @@ -7221,7 +8016,7 @@ msgid "Idle" msgstr "Inactivo" msgid "Beta version" -msgstr "" +msgstr "Versión beta" msgid "Latest version" msgstr "Última versión" @@ -7606,20 +8401,27 @@ msgid "" "Different nozzle diameters and different filament diameters is not allowed " "when prime tower is enabled." msgstr "" +"Diámetros de boquillas diferentes y diámetros de filamento diferentes no " +"están permitidos cuando la torre de purga está activada." msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" +"Actualmente, la torre de limpieza sólo es compatible con el direccionamiento " +"relativo del extrusor (use_relative_e_distances=1)." msgid "" "Ooze prevention is currently not supported with the prime tower enabled." msgstr "" +"Actualmente no se puede evitar el rezume con la torre principal activada." msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" +"Actualmente, la torre de purga sólo es compatible con las versiones Marlin, " +"RepRap/Sprinter, RepRapFirmware y Repetier G-Code." msgid "The prime tower is not supported in \"By object\" print." msgstr "La torre de purga no es compatible con la impresión \"Por objeto\"." @@ -7806,23 +8608,24 @@ msgid "Maximum printable height which is limited by mechanism of printer" msgstr "Altura máxima imprimible limitada por el mecanismo de la impresora" msgid "Preferred orientation" -msgstr "" +msgstr "Orientación preferida" msgid "Automatically orient stls on the Z-axis upon initial import" msgstr "" +"Orientar automáticamente los stls en el eje Z en la importación inicial" msgid "Printer preset names" -msgstr "Nombres de ajustes de la impresora" +msgstr "Nombres de perfiles de la impresora" msgid "Hostname, IP or URL" msgstr "Nombre de host, IP o URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" "OrcaSlicer puede subir archivos G-Code a una impresora. Este campo debería " "contener el nombre de host, la dirección IP o la URL de la instancia de la " @@ -7844,8 +8647,8 @@ msgid "API Key / Password" msgstr "Clave API / Contraseña" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" "OrcaSlicer puede cargar archivos G-Cpde a un host de impresora. Este campo " "debería contener una clave API o una contraseña requerida para la " @@ -7885,7 +8688,7 @@ msgstr "" "certificados autofirmados si la conexión falla." msgid "Names of presets related to the physical printer" -msgstr "Nombres de preajustes relacionados por la impresora física" +msgstr "Nombres de perfiles relacionados por la impresora física" msgid "Authorization Type" msgstr "Tipo de autorización" @@ -8107,13 +8910,16 @@ msgstr "" "de material para el puente, para mejorar el hundimiento" msgid "Internal bridge flow ratio" -msgstr "" +msgstr "Ratio de flujo de puentes internos" msgid "" "This value governs the thickness of the internal bridge layer. This is the " "first layer over sparse infill. Decrease this value slightly (for example " "0.9) to improve surface quality over sparse infill." msgstr "" +"Este valor regula el grosor de la capa puente interna. Es la primera capa " +"sobre el relleno poco denso. Disminuya ligeramente este valor (por ejemplo, " +"0,9) para mejorar la calidad de la superficie sobre el relleno disperso." msgid "Top surface flow ratio" msgstr "Ratio de caudal en superficie superior" @@ -8211,9 +9017,15 @@ msgid "" "This setting can also help reduce part warping due to the reduction of " "stresses in the part walls." msgstr "" +"Extruya los perímetros que tienen una parte sobre un voladizo en sentido " +"inverso en las capas impares. Este patrón alterno puede mejorar " +"drásticamente los voladizos pronunciados.\n" +"\n" +"Este ajuste también puede ayudar a reducir el alabeo de la pieza debido a la " +"reducción de tensiones en las paredes de la pieza." msgid "Reverse only internal perimeters" -msgstr "" +msgstr "Invertir solo los perímetros internos" msgid "" "Apply the reverse perimeters logic only on internal perimeters. \n" @@ -8229,6 +9041,19 @@ msgid "" "Reverse Threshold to 0 so that all internal walls print in alternating " "directions on odd layers irrespective of their overhang degree." msgstr "" +"Aplique la lógica de perímetros inversos sólo en los perímetros internos. \n" +"\n" +"Esta configuración reduce en gran medida las tensiones de la pieza, ya que " +"ahora se distribuyen en direcciones alternas. Esto debería reducir " +"deformaciones de la pieza mientras se mantiene la calidad de la pared " +"externa. Esta característica puede ser muy útil para materiales propensos al " +"alabeo, como ABS/ASA, y también para filamentos elásticos, como TPU y Silk " +"PLA. También puede ayudar a reducir deformaciones en regiones flotantes " +"sobre soportes.\n" +"\n" +"Para que este ajuste sea más eficaz, se recomienda establecer el Umbral " +"inverso en 0 para que todas las paredes internas se impriman en direcciones " +"alternas en las capas impares, independientemente de su grado de voladizo." msgid "Reverse threshold" msgstr "Umbral inverso" @@ -8472,13 +9297,16 @@ msgstr "" "puentes se ven mejor pero son fiables sólo para distancias más cortas." msgid "Thick internal bridges" -msgstr "" +msgstr "Puentes gruesos internos" msgid "" "If enabled, thick internal bridges will be used. It's usually recommended to " "have this feature turned on. However, consider turning it off if you are " "using large nozzles." msgstr "" +"Si está activada, se utilizarán puentes internos gruesos. Normalmente se " +"recomienda tener esta función activada. Sin embargo, considera desactivarla " +"si utilizas boquillas grandes." msgid "Max bridge length" msgstr "Distancia máxima de puentes" @@ -8499,12 +9327,14 @@ msgid "End G-code when finish the whole printing" msgstr "Finalizar el G-Code cuando termine la impresión completa" msgid "Between Object Gcode" -msgstr "" +msgstr "Entre Objetos G-Code" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" msgstr "" +"Insertar G-Code entre objetos. Este parámetro sólo tendrá efecto cuando " +"imprima sus modelos objeto por objeto" msgid "End G-code when finish the printing of this filament" msgstr "Terminar el G-Code cuando se termine de imprimir este filamento" @@ -8607,7 +9437,7 @@ msgstr "" "defecto es 0mm" msgid "Walls printing order" -msgstr "" +msgstr "Orden de impresión de paredes" msgid "" "Print sequence of the internal (inner) and external (outer) walls. \n" @@ -8633,18 +9463,43 @@ msgid "" "\n" " " msgstr "" +"Imprima la secuencia de las paredes internas (interiores) y externas " +"(exteriores). \n" +"\n" +"Utilice Interior/Exterior para obtener los mejores voladizos. Esto se debe a " +"que las paredes salientes pueden adherirse a un perímetro vecino durante la " +"impresión. Sin embargo, esta opción da como resultado una calidad de " +"superficie ligeramente reducida, ya que el perímetro externo se deforma al " +"aplastarse contra el perímetro interno.\n" +"\n" +"Utilice Interior/Exterior/Interior para obtener el mejor acabado de " +"superficie exterior y precisión dimensional, ya que la pared exterior se " +"imprime sin perturbaciones desde un perímetro interior. Sin embargo, el " +"rendimiento del voladizo se reducirá al no haber un perímetro interno contra " +"el que imprimir la pared externa. Esta opción requiere un mínimo de 3 " +"paredes para ser efectiva, ya que imprime primero las paredes interiores a " +"partir del 3er perímetro, después el perímetro exterior y, finalmente, el " +"primer perímetro interior. En la mayoría de los casos, se recomienda " +"utilizar esta opción en lugar de la opción Exterior/Interior. \n" +"\n" +"Utilice Exterior/Interior para obtener la misma calidad en las paredes " +"exteriores y la misma precisión dimensional que con la opción Interior/" +"Exterior/Interior. Sin embargo, las uniones Z parecerán menos consistentes " +"ya que la primera extrusión de una nueva capa comienza en una superficie " +"visible.\n" +" " msgid "Inner/Outer" -msgstr "" +msgstr "Interno/Externo" msgid "Outer/Inner" -msgstr "" +msgstr "Externo/Interno" msgid "Inner/Outer/Inner" -msgstr "" +msgstr "Interno/Externo/Interno" msgid "Print infill first" -msgstr "" +msgstr "Imprimir relleno primero" msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " @@ -8656,6 +9511,14 @@ msgid "" "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" +"Orden de las paredes/relleno. Cuando la casilla no está marcada, los muros " +"se imprimen primero, lo que funciona mejor en la mayoría de los casos.\n" +"\n" +"Imprimir primero los muros puede ayudar con salientes extremos ya que los " +"muros tienen el relleno vecino al que adherirse. Sin embargo, el relleno " +"empujará ligeramente hacia fuera las paredes impresas donde se une a ellos, " +"lo que resulta en un peor acabado de la superficie exterior. También puede " +"hacer que el relleno brille a través de las superficies externas de la pieza." msgid "Height to rod" msgstr "Altura a la barra" @@ -8896,8 +9759,8 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "Tras un cambio de herramienta, es posible que no se conozca la posición " "exacta del filamento recién cargado dentro de la boquilla y que la presión " @@ -9051,6 +9914,9 @@ msgid "" "Density of internal sparse infill, 100% turns all sparse infill into solid " "infill and internal solid infill pattern will be used" msgstr "" +"Densidad del relleno de baja densidad interno, convierte el 100%tu relleno " +"de baja densidad en relleno sólido y se utilizará el patrón de relleno " +"sólido interno." msgid "Sparse infill pattern" msgstr "Patrón de relleno de baja densidad" @@ -9094,11 +9960,12 @@ msgstr "Longitud del anclaje de relleno de baja densidad" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -9125,11 +9992,12 @@ msgstr "Máxima longitud del relleno del anclaje" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -9321,9 +10189,6 @@ msgstr "" "Se puede imprimir el perímetro de forma aleatoria, de modo que la superficie " "tenga un aspecto rugoso. Este ajuste controla la posición difusa" -msgid "None" -msgstr "Ninguno" - msgid "Contour" msgstr "Contorno" @@ -9354,10 +10219,10 @@ msgstr "" "de línea" msgid "Apply fuzzy skin to first layer" -msgstr "" +msgstr "Aplicar piel difusa a la primera capa" msgid "Whether to apply fuzzy skin on the first layer" -msgstr "" +msgstr "Si se aplica piel difusa en la primera capa" msgid "Filter out tiny gaps" msgstr "Filtrar pequeños huecos" @@ -9641,16 +10506,19 @@ msgstr "" "translúcidos o material de soporte soluble manualmente" msgid "Maximum width of a segmented region" -msgstr "" +msgstr "Máximo ancho de una región segmentada" msgid "Maximum width of a segmented region. Zero disables this feature." msgstr "" +"Máximo ancho de una región segmentada. Zero desactiva está característica." msgid "Interlocking depth of a segmented region" -msgstr "" +msgstr "Profundidad de entrelazado de una región segmentada" msgid "Interlocking depth of a segmented region. Zero disables this feature." msgstr "" +"Profundidad de entrelazado de una región segmentada. Zero desactiva esta " +"característica." msgid "Ironing Type" msgstr "Tipo de alisado" @@ -9728,6 +10596,17 @@ msgstr "" "Si la máquina admite el modo silencioso en el que la máquina utiliza una " "menor aceleración para imprimir" +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "Límites de la máquina" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9750,9 +10629,6 @@ msgstr "Velocidad máxima Z" msgid "Maximum speed E" msgstr "Velocidad máxima E" -msgid "Machine limits" -msgstr "Límites de la máquina" - msgid "Maximum X speed" msgstr "Velocidad máxima X" @@ -9854,7 +10730,7 @@ msgstr "" "velocidad máxima del ventilador de refrigeración parcial" msgid "Max" -msgstr "" +msgstr "Max" msgid "" "The largest printable layer height for extruder. Used tp limits the maximum " @@ -9967,7 +10843,7 @@ msgstr "" "utilizar esta función. Comando G-code: M106 P2 S(0-255)" msgid "Min" -msgstr "" +msgstr "Min" msgid "" "The lowest printable layer height for extruder. Used tp limits the minimum " @@ -10009,8 +10885,8 @@ msgid "Host Type" msgstr "Tipo de host" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" "Orca Slicer puede cargar archivos G-Code a un host de impresora. Este campo " "puede contener el tipo de host." @@ -10135,7 +11011,7 @@ msgstr "" "cónico. El valor 0 llenará todos los huecos en la base del modelo." msgid "mm²" -msgstr "" +msgstr "mm²" msgid "Detect overhang wall" msgstr "Detectar el voladizo del perímetro" @@ -10162,11 +11038,25 @@ msgstr "Velocidad del perímetro interior" msgid "Number of walls of every layer" msgstr "Número de perímetros de cada capa" +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" "Si desea procesar el G-Code de salida a través de scripts personalizados, " @@ -10253,9 +11143,6 @@ msgstr "Retracción al cambiar de capa" msgid "Force a retraction when changes layer" msgstr "Forzar una retracción al cambiar de capa" -msgid "Length" -msgstr "Largo" - msgid "Retraction Length" msgstr "Longitud de retracción" @@ -10401,7 +11288,7 @@ msgid "Show auto-calibration marks" msgstr "Muestra marcas de autocalibración" msgid "Disable set remaining print time" -msgstr "" +msgstr "Desactivar tiempo de impresión restante" msgid "Seam position" msgstr "Posición de la costura" @@ -10469,6 +11356,21 @@ msgstr "" "ejecuta un pequeño movimiento hacia dentro antes de que el extrusor abandone " "la curva." +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "Velocidad de limpieza" @@ -10551,20 +11453,26 @@ msgstr "" "sólidas. El modelo final generado no tiene costura" msgid "Smooth Spiral" -msgstr "" +msgstr "Suavizar Espiral" msgid "" "Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " "at all, even in the XY directions on walls that are not vertical" msgstr "" +"Suavizar Espiral suaviza también los movimientos X e Y, con lo que no se " +"aprecia ninguna costura, ni siquiera en las direcciones XY en paredes que no " +"son verticales" msgid "Max XY Smoothing" -msgstr "" +msgstr "Suavizado XY Máximo" msgid "" "Maximum distance to move points in XY to try to achieve a smooth spiralIf " "expressed as a %, it will be computed over nozzle diameter" msgstr "" +"Distancia máxima a desplazar los puntos en XY para intentar conseguir una " +"espiral suave, si se expresa en %, se calculará sobre el diámetro de la " +"tobera" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -10788,11 +11696,13 @@ msgstr "" "utiliza el filamento actual" msgid "Avoid interface filament for base" -msgstr "" +msgstr "Evitar el interfaz de filamento para la base" msgid "" "Avoid using support interface filament to print support base if possible." msgstr "" +"Evite utilizar filamento de interfaz de soporte para imprimir la base de " +"soporte si es posible." msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -10831,10 +11741,10 @@ msgid "Bottom interface layers" msgstr "Capas de la interfaz inferior" msgid "Number of bottom interface layers" -msgstr "" +msgstr "Número de capas de la interfaz inferior" msgid "Same as top" -msgstr "" +msgstr "Lo mismo que la superior" msgid "Top interface spacing" msgstr "Distancia de la interfaz superior" @@ -11072,10 +11982,10 @@ msgstr "" "cero para no tener doble pared." msgid "Support wall loops" -msgstr "" +msgstr "Bucles de pared de apoyo" msgid "This setting specify the count of walls around support" -msgstr "" +msgstr "Este ajuste especifica el número de paredes alrededor del soporte" msgid "Tree support with infill" msgstr "Soporte para árboles con relleno" @@ -11214,6 +12124,16 @@ msgid "" "Setting a value in the retract amount before wipe setting below will perform " "any excess retraction before the wipe, else it will be performed after." msgstr "" +"Describa cuánto tiempo se moverá la boquilla a lo largo de la última " +"trayectoria al retraerse. \n" +"\n" +"Dependiendo de la duración de la operación de barrido y de la velocidad y " +"longitud de los ajustes de retracción del extrusor/filamento, puede ser " +"necesario un movimiento de retracción para retraer el filamento restante. \n" +"\n" +"Fijando un valor en la cantidad de retracción antes del barrido se realizará " +"cualquier exceso de retracción antes del barrido, de lo contrario se " +"realizará después." msgid "" "The wiping tower can be used to clean up the residue on the nozzle and " @@ -11243,9 +12163,6 @@ msgstr "Tamaño de purga" msgid "The volume of material to prime extruder on tower." msgstr "El volumen de material para cebar la extrusora en la torre." -msgid "Width" -msgstr "Ancho" - msgid "Width of prime tower" msgstr "Anchura de la torre de purga" @@ -11423,14 +12340,9 @@ msgstr "Usar distancias relativas E" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" -"Se recomienda la extrusión relativa cuando se utiliza la opción " -"\"label_objects\". Algunos extrusores funcionan mejor con esta opción " -"desactivada (modo de extrusión absoluta). La torre de purga sólo es " -"compatible con el modo relativo. Siempre activa en las impresoras BambuLab. " -"Marcada por defecto" msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -11445,7 +12357,7 @@ msgid "Classic" msgstr "Clásico" msgid "Arachne" -msgstr "" +msgstr "Aracne" msgid "Wall transition length" msgstr "Anchura de transición de perímetro" @@ -11598,7 +12510,7 @@ msgstr "" "por defecto" msgid "Orient Options" -msgstr "Opciones de Orientación" +msgstr "Opciones de orientación" msgid "Orient options: 0-disable, 1-enable, others-auto" msgstr "Opciones de orientación: 0-deshabilitar. 1-habilitar. otros-auto" @@ -11844,16 +12756,16 @@ msgstr "El nombre no puede estar vacío." #, c-format, boost-format msgid "The selected preset: %s is not found." -msgstr "" +msgstr "El perfil seleccionado: %s no encontrado." msgid "The name cannot be the same as the system preset name." -msgstr "El nombre no puede ser el mismo que el nombre de ajuste del sistema." +msgstr "El nombre no puede ser el mismo que el nombre de perfil del sistema." msgid "The name is the same as another existing preset name" -msgstr "El nombre coincide con el de otro ajuste" +msgstr "El nombre coincide con el de otro perfil" msgid "create new preset failed." -msgstr "crear un nuevo ajuste fallido." +msgstr "crear un nuevo perfil fallido." msgid "" "Are you sure to cancel the current calibration and return to the home page?" @@ -11893,12 +12805,12 @@ msgstr "Por favor, selecciona al menos un filamento por calibración" msgid "Flow rate calibration result has been saved to preset" msgstr "" "El resultado de la calibración del ratio de caudal se ha guardado en los " -"ajustes" +"perfiles" msgid "Max volumetric speed calibration result has been saved to preset" msgstr "" "El resultado de la calibración de velocidad volumétrica máxima se ha salvado " -"en los ajustes" +"en los perfiles" msgid "When do you need Flow Dynamics Calibration" msgstr "Cuando necesita la Calibración de Dinámicas de Flujo" @@ -12117,10 +13029,10 @@ msgid "Input Value" msgstr "Valor de entrada" msgid "Save to Filament Preset" -msgstr "Salvar en Ajustes de Filamento" +msgstr "Salvar Perfil de Filamento" msgid "Preset" -msgstr "Preajuste" +msgstr "Perfil" msgid "Record Factor" msgstr "Factor de guardado" @@ -12135,7 +13047,7 @@ msgid "Please input a valid value (0.0 < flow ratio < 2.0)" msgstr "Por favor, introduzca un valor válido (0.0 < ratio de caudal <2.0)" msgid "Please enter the name of the preset you want to save." -msgstr "Por favor, introduzca el nombre del preajuste que quiera guardar." +msgstr "Por favor, introduzca el nombre del perfil que quiera guardar." msgid "Calibration1" msgstr "Calibración1" @@ -12553,211 +13465,228 @@ msgid "Delete input" msgstr "Borrado de entrada" msgid "Network Test" -msgstr "" +msgstr "Prueba de Red" msgid "Start Test Multi-Thread" -msgstr "" +msgstr "Iniciar Pruebas Multitarea" msgid "Start Test Single-Thread" -msgstr "" +msgstr "Iniciar Prueba Monotarea" msgid "Export Log" -msgstr "" +msgstr "Exportar Registro" msgid "Studio Version:" -msgstr "" +msgstr "Versión de Orca:" msgid "System Version:" -msgstr "" +msgstr "Versión de Sistema:" msgid "DNS Server:" -msgstr "" +msgstr "Servidor DNS:" msgid "Test BambuLab" -msgstr "" +msgstr "Prueba OrcaSlicer" msgid "Test BambuLab:" -msgstr "" +msgstr "Prueba OrcaSlicer:" msgid "Test Bing.com" -msgstr "" +msgstr "Prueba Bing.com" msgid "Test bing.com:" -msgstr "" +msgstr "Prueba Bing,.com:" msgid "Test HTTP" -msgstr "" +msgstr "Prueba HTTP" msgid "Test HTTP Service:" -msgstr "" +msgstr "Prueba Servicio HTTP:" msgid "Test storage" -msgstr "" +msgstr "Prueba de almacenamiento" msgid "Test Storage Upload:" -msgstr "" +msgstr "Prueba de Carga de Almacenamiento:" msgid "Test storage upgrade" -msgstr "" +msgstr "Prueba de actualización de almacenamiento" msgid "Test Storage Upgrade:" -msgstr "" +msgstr "Prueba de Actualización de Almacenamiento:" msgid "Test storage download" -msgstr "" +msgstr "Prueba de descarga de almacenamiento" msgid "Test Storage Download:" -msgstr "" +msgstr "Prueba de Descarga de Almacenamiento:" msgid "Test plugin download" -msgstr "" +msgstr "Prueba de descarga de plugin" msgid "Test Plugin Download:" -msgstr "" +msgstr "Prueba de Descarga de Plugin:" msgid "Test Storage Upload" -msgstr "" +msgstr "Prueba de Carga de Almacenamiento" msgid "Log Info" -msgstr "" +msgstr "Información de Registro" msgid "Select filament preset" -msgstr "" +msgstr "Seleccionar Filamento Preestablecido" msgid "Create Filament" -msgstr "" +msgstr "Crear Filamento" msgid "Create Based on Current Filament" -msgstr "" +msgstr "Crear basándose en e Filamento Actual" msgid "Copy Current Filament Preset " -msgstr "" +msgstr "Copiar Perfil Actual de Filamento " msgid "Basic Information" -msgstr "" +msgstr "Información básica" msgid "Add Filament Preset under this filament" -msgstr "" +msgstr "Añadir Perfil de Filamento debajo de este filamento" msgid "We could create the filament presets for your following printer:" msgstr "" +"Somos capaces de crear los perfiles de filamento para la siguiente impresora:" msgid "Select Vendor" -msgstr "" +msgstr "Seleccionar Proveedor" msgid "Input Custom Vendor" -msgstr "" +msgstr "Introducor Proveedor Personalizado" msgid "Can't find vendor I want" -msgstr "" +msgstr "No es posible encontrar el proveedor que deseamos" msgid "Select Type" -msgstr "" +msgstr "Seleccionar Tipo" msgid "Select Filament Preset" -msgstr "" +msgstr "Seleccionar Perfil de Filamento" msgid "Serial" msgstr "" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "" +msgstr "Por ejemplo, Básico, Mate, Seda, Mármol" msgid "Filament Preset" -msgstr "" +msgstr "Perfil de Filamento" msgid "Create" -msgstr "" +msgstr "Crear" msgid "Vendor is not selected, please reselect vendor." msgstr "" +"El proveedor no ha sido seleccionado, por favor, seleccione el proveedor." msgid "Custom vendor is not input, please input custom vendor." msgstr "" +"El proveedor personalizado no ha sido introducido, vuelva a seleccionarlo." msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." msgstr "" +"\"Bambu\" o \"Genérico\" no pueden ser usados como Proveedor para filamentos " +"personalizados." msgid "Filament type is not selected, please reselect type." -msgstr "" +msgstr "No se ha seleccionado el tipo de filamento, vuelva a seleccionarlo." msgid "Filament serial is not inputed, please input serial." msgstr "" +"No se ha seleccionado el número de serie de filamento, vuelva a " +"seleccionarlo." msgid "" "There may be escape characters in the vendor or serial input of filament. " "Please delete and re-enter." msgstr "" +"Puede haber caracteres de escape en la entrada del proveedor o de la serie " +"del filamento. Por favor, elimínelos y vuelva a introducirlos." msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." msgstr "" +"Todas las entradas en el proveedor personalizado o serie son espacios. " +"Vuelva a introducirlos." msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "El proveedor no puede ser un número. Vuelva a introducirlos." msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "" +"Aún no ha seleccionado una impresora o un perfil. Por favor, seleccione al " +"menos uno." msgid "Some existing presets have failed to be created, as follows:\n" msgstr "" +"Algunos perfiles existentes no se han podido crear, como se indica a " +"continuación:\n" msgid "" "\n" "Do you want to rewrite it?" msgstr "" +"\n" +"¿Quieres reescribirlo?" msgid "" "We would rename the presets as \"Vendor Type Serial @printer you selected" "\". \n" "To add preset for more prinetrs, Please go to printer selection" msgstr "" +"Cambiaremos el nombre de los perfiles a \"Tipo Número de Serie @impresora " +"seleccionados\". \n" +"Para añadir perfiles para más impresoras, vaya a la selección de impresoras" msgid "Create Printer/Nozzle" -msgstr "" +msgstr "Crear Impresora/Boquilla" msgid "Create Printer" -msgstr "" +msgstr "Crear Impresora" msgid "Create Nozzle for Existing Printer" -msgstr "" +msgstr "Crear Boquilla para una Impresora Existente" msgid "Create from Template" -msgstr "" +msgstr "Crear desde Plantilla" msgid "Create Based on Current Printer" -msgstr "" - -msgid "wiki" -msgstr "" +msgstr "Crear basándose en la Impresora Actual" msgid "Import Preset" -msgstr "" +msgstr "Importar Perfil" msgid "Create Type" -msgstr "" +msgstr "Crear Tipo" msgid "The model is not fond, place reselect vendor." -msgstr "" +msgstr "No se encuentra el modelo, vuelva a seleccionar proveedor." msgid "Select Model" -msgstr "" +msgstr "Seleccionar Modelo" msgid "Select Printer" -msgstr "" +msgstr "Seleccionar Impresora" msgid "Input Custom Model" -msgstr "" +msgstr "Introducir Modelo Personalizado" msgid "Can't find my printer model" -msgstr "" +msgstr "No se puede encontrar el modelo de la impresora" msgid "Rectangle" -msgstr "" +msgstr "Rectángulo" msgid "Printable Space" -msgstr "" +msgstr "Espacio Imprimible" msgid "X" msgstr "" @@ -12766,66 +13695,77 @@ msgid "Y" msgstr "" msgid "Hot Bed STL" -msgstr "" +msgstr "Cama Caliente STL" msgid "Load stl" -msgstr "" +msgstr "Cargar stl" msgid "Hot Bed SVG" -msgstr "" +msgstr "Cama Caliente SVG" msgid "Load svg" -msgstr "" +msgstr "Cargar svg" msgid "Max Print Height" -msgstr "" +msgstr "Altura Máxima de Impresión" #, c-format, boost-format msgid "The file exceeds %d MB, please import again." -msgstr "" +msgstr "El archivo excede %d MB, por favor impórtelo de nuevo." msgid "Exception in obtaining file size, please import again." msgstr "" +"Se ha producido una excepción obteniendo el tamaño de archivo, por favor, " +"impórtelo de nuevo." msgid "Preset path is not find, please reselect vendor." msgstr "" +"No se encuentra la ruta preestablecida, vuelva a seleccionar el proveedor." msgid "The printer model was not found, please reselect." -msgstr "" +msgstr "No se ha encontrado el modelo de impresora, vuelva a seleccionarlo." msgid "The nozzle diameter is not fond, place reselect." msgstr "" +"El diámetro de la boquilla no es adecuado, vuelva a seleccionar el lugar." msgid "The printer preset is not fond, place reselect." msgstr "" +"El perfil de impresora se ha encontrado, por favor, vuelva a seleccionarlo." msgid "Printer Preset" -msgstr "" +msgstr "Perfil de Impresora" msgid "Filament Preset Template" -msgstr "" +msgstr "Plantilla de Perfil de Filamento" msgid "Deselect All" -msgstr "" +msgstr "Deseleccionar Todo" msgid "Process Preset Template" -msgstr "" +msgstr "Plantilla de Perfil de Proceso" msgid "Back Page 1" -msgstr "" +msgstr "Volver a la Página 1" msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" msgstr "" +"Aún no ha elegido el perfil de impresora que desea crear. Por favor, elija " +"el proveedor y el modelo de la impresora" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" +"Ha introducido una entrada ilegal en la sección de área imprimible de la " +"primera página. Por favor, compruébelo antes de crearla." msgid "The custom printer or model is not inputed, place input." msgstr "" +"No se ha introducido la impresora personalizada o el modelo, por favor, " +"introdúzcalo." msgid "" "The printer preset you created already has a preset with the same name. Do " @@ -12836,60 +13776,76 @@ msgid "" "reserve.\n" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" +"El perfil de impresora que ha creado ya tiene un perfil con el mismo nombre. " +"¿Desea sobrescribirlo?\n" +"\tSí: sobrescriba el perfil de impresora con el mismo nombre, y los perfiles " +"de filamento y proceso con el mismo nombre de perfil se volverán a crear \n" +"y los perfiles de filamento y proceso sin el mismo nombre de perfil se " +"reservarán.\n" +"\tCancelar: No crear perfil y volver a la interfaz de creación." msgid "You need to select at least one filament preset." -msgstr "" +msgstr "Necesita seleccionar al menos un perfil de filamento." msgid "You need to select at least one process preset." -msgstr "" +msgstr "Necesita seleccionar al menos un perfil de proceso." msgid "Create filament presets failed. As follows:\n" -msgstr "" +msgstr "Fallo crenado perfiles de filamento de la siguiente manera:\n" msgid "Create process presets failed. As follows:\n" -msgstr "" +msgstr "Fallo crenado perfiles de proceso de la siguiente manera:\n" msgid "Vendor is not find, please reselect." -msgstr "" +msgstr "Proveedor no encontrado, por favor seleccione uno." msgid "Current vendor has no models, please reselect." -msgstr "" +msgstr "El proveedor actual no tiene modelos, seleccionar otro." msgid "" "You have not selected the vendor and model or inputed the custom vendor and " "model." msgstr "" +"No ha seleccionado el proveedor y el modelo o no ha introducido el proveedor " +"y el modelo personalizados." msgid "" "There may be escape characters in the custom printer vendor or model. Please " "delete and re-enter." msgstr "" +"Puede haber caracteres de escape en el proveedor o modelo de impresora " +"personalizado. Por favor, elimínelos y vuelva a introducirlos." msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." msgstr "" +"Todas las entradas en el proveedor o modelo de impresora personalizado son " +"espacios. Vuelva a introducirlos." msgid "Please check bed printable shape and origin input." msgstr "" +"Por favor, compruebe la forma imprimible de la cama y la entrada de origen." msgid "" "You have not yet selected the printer to replace the nozzle, please choose." msgstr "" +"Todavía no ha seleccionado impresora para sustituir la boquilla, por favor, " +"selecciónela." msgid "Create Printer Successful" -msgstr "" +msgstr "Éxito Creando la Impresora" msgid "Create Filament Successful" -msgstr "" +msgstr "Éxito Creando el Filamento" msgid "Printer Created" -msgstr "" +msgstr "Impresora Creada" msgid "Please go to printer settings to edit your presets" -msgstr "" +msgstr "Vaya a la configuración de la impresora para editar los perfiles" msgid "Filament Created" -msgstr "" +msgstr "Filamento Creado" msgid "" "Please go to filament setting to edit your presets if you need.\n" @@ -12897,45 +13853,50 @@ msgid "" "volumetric speed have a significant impact on printing quality. Please set " "them carefully." msgstr "" +"Por favor, vaya a la configuración de filamento para editar sus perfiles si " +"lo necesita.\n" +"Tenga en cuenta que la temperatura de la boquilla, la temperatura de la cama " +"caliente, y la velocidad volumétrica máxima tienen un impacto significativo " +"en la calidad de impresión. Por favor, ajústelas con cuidado." msgid "Printer Setting" -msgstr "" +msgstr "Ajustes de Impresora" msgid "Export Configs" -msgstr "" +msgstr "Configuración de Exportación" -msgid "Printer config bundle(.bbscfg)" -msgstr "" +msgid "Printer config bundle(.orca_printer)" +msgstr "Paquete de configuración de impresora(.orca_printer)" -msgid "Filament bundle(.bbsflmt)" -msgstr "" +msgid "Filament bundle(.orca_filament)" +msgstr "Paquete de filamento(.orca_filament)" msgid "Printer presets(.zip)" -msgstr "" +msgstr "Perfiles de Impresora(.zip)" msgid "Filament presets(.zip)" -msgstr "" +msgstr "Perfiles de Filamento(.zip)" msgid "Process presets(.zip)" -msgstr "" +msgstr "Perfiles de Proceso(.zip)" msgid "initialize fail" -msgstr "" +msgstr "fallo inicializando" msgid "add file fail" -msgstr "" +msgstr "fallo añadiendo el archivo" msgid "add bundle structure file fail" -msgstr "" +msgstr "fallo añadiendo paquete de estructura de archivo" msgid "finalize fail" -msgstr "" +msgstr "fallo finalizando" msgid "open zip written fail" -msgstr "" +msgstr "fallo escritura zip" msgid "Export successful" -msgstr "" +msgstr "Éxito de exportación" #, c-format, boost-format msgid "" @@ -12944,114 +13905,142 @@ msgid "" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" +"La carpeta '%s' ya existe en el directorio actual. ¿Desea borrarla y " +"reescribirla?\n" +"Si no es así, se añadirá un sufijo de tiempo y podrá modificar el nombre " +"después de la creación." msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" +"Impresora y todos los perfiles de filamento&proceso que pertenecen a la " +"impresora. \n" +"Se puede compartir con otros." msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" +"Conjunto de perfiles de relleno del usuario. \n" +"Se puede compartir con otros." msgid "" "Only display printer names with changes to printer, filament, and process " "presets." msgstr "" +"Mostrar sólo los nombres de impresora con cambios en los perfiles de " +"impresora, filamento y proceso." msgid "Only display the filament names with changes to filament presets." msgstr "" +"Mostrar sólo los nombres de impresora con cambios en los perfiles de " +"impresora, filamento y proceso." msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" +"Sólo se mostrarán los nombres de impresoras con perfiles de impresora de " +"usuario, y cada perfil que elija se exportará como un archivo zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" "and all user filament presets in each filament name you select will be " "exported as a zip." msgstr "" +"Sólo se mostrarán los nombres de filamento con perfiles de filamento de " +"usuario, y todos los perfiles de filamento de usuario de cada nombre de " +"filamento que seleccione se exportarán como un archivo zip." msgid "" "Only printer names with changed process presets will be displayed, \n" "and all user process presets in each printer name you select will be " "exported as a zip." msgstr "" +"Sólo se mostrarán los nombres de impresoras con perfiles de procesos " +"modificados, \n" +"y todos los perfiles de procesos de usuario de cada nombre de impresora que " +"seleccione se exportarán como un archivo zip." msgid "Please select at least one printer or filament." -msgstr "" +msgstr "Seleccione al menos una impresora o filamento." msgid "Please select a type you want to export" -msgstr "" +msgstr "Seleccione el tipo que desea exportar" msgid "Edit Filament" -msgstr "" +msgstr "Editar Filamento" msgid "Filament presets under this filament" -msgstr "" +msgstr "Perfiles de filamento bajo este filamento" msgid "" "Note: If the only preset under this filament is deleted, the filament will " "be deleted after exiting the dialog." msgstr "" +"Nota: Si el único perfil bajo este filamento es borrado, el filamento se " +"borrará después de salir del diálogo." msgid "Presets inherited by other presets can not be deleted" -msgstr "" +msgstr "Los perfiles heredados de otros perfiles no pueden borrarse" msgid "The following presets inherits this preset." msgid_plural "The following preset inherits this preset." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "El siguiente perfil hereda de este perfil." +msgstr[1] "Los siguientes perfiles heredan de este perfil." msgid "Delete Preset" -msgstr "" +msgstr "Borrar Perfil" msgid "Are you sure to delete the selected preset?" -msgstr "" +msgstr "¿Está seguro de borrar el perfil seleccionado?" msgid "Delete preset" -msgstr "" +msgstr "Borrar perfil" msgid "+ Add Preset" -msgstr "" +msgstr "+ Añadir Perfil" msgid "Delete Filament" -msgstr "" +msgstr "Borrar Filamento" msgid "" "All the filament presets belong to this filament would be deleted. \n" "If you are using this filament on your printer, please reset the filament " "information for that slot." msgstr "" +"Se eliminarán todos los perfiles de filamento que pertenezcan a este " +"filamento. \n" +"Si está utilizando este filamento en su impresora, restablezca la " +"información del filamento para esa ranura." msgid "Delete filament" -msgstr "" +msgstr "Borrar filamento" msgid "Add Preset" -msgstr "" +msgstr "Añadir Perfil" msgid "Add preset for new printer" -msgstr "" +msgstr "Añadir perfil para nueva impresora" msgid "Copy preset from filament" -msgstr "" +msgstr "Copiar perfil desde filamento" msgid "The filament choice not find filament preset, please reselect it" -msgstr "" +msgstr "Perfil de filamento no encontrado, por favor, seleccione otro" msgid "Edit Preset" -msgstr "" +msgstr "Editar Perfil" msgid "For more information, please check out Wiki" -msgstr "" +msgstr "Para más información, consulte la Wiki" msgid "Collapse" -msgstr "" +msgstr "Colapsar" msgid "Daily Tips" -msgstr "" +msgstr "Consejos Diarios" msgid "Need select printer" msgstr "Necesario seleccionar impresora" @@ -13117,111 +14106,117 @@ msgstr "" #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "" +msgstr "Tipo de host de impresión no coincidente: %s" msgid "Connection to AstroBox works correctly." -msgstr "" +msgstr "La conexión a AstroBox funciona correctamente." msgid "Could not connect to AstroBox" -msgstr "" +msgstr "No se ha podido conectar con AstroBox" msgid "Note: AstroBox version at least 1.1.0 is required." -msgstr "" +msgstr "Nota: Se requiere la versión 1.1.0 de AstroBox como mínimo." msgid "Connection to Duet works correctly." -msgstr "" +msgstr "La conexión con Duet funciona correctamente." msgid "Could not connect to Duet" -msgstr "" +msgstr "No se puede conectar a Duet" msgid "Unknown error occured" -msgstr "" +msgstr "Se ha producido un error desconocido" msgid "Wrong password" -msgstr "" +msgstr "Contraseña incorrecta" msgid "Could not get resources to create a new connection" -msgstr "" +msgstr "No se han podido obtener recursos para crear una nueva conexión" msgid "Upload not enabled on FlashAir card." -msgstr "" +msgstr "La carga no está activada en la tarjeta FlashAir." msgid "Connection to FlashAir works correctly and upload is enabled." msgstr "" +"La conexión a FlashAir funciona correctamente y la carga está activada." msgid "Could not connect to FlashAir" -msgstr "" +msgstr "No se ha podido conectar a FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." msgstr "" +"Nota: Se requiere FlashAir con firmware 2.00.02 o más reciente y función de " +"carga activada." msgid "Connection to MKS works correctly." -msgstr "" +msgstr "La conexión con MKS funciona correctamente." msgid "Could not connect to MKS" -msgstr "" +msgstr "No se ha podido conectar con MKS" msgid "Connection to OctoPrint works correctly." -msgstr "" +msgstr "La conexión con OctoPrint funciona correctamente." msgid "Could not connect to OctoPrint" -msgstr "" +msgstr "No se ha podido conectar con OctoPrint" msgid "Note: OctoPrint version at least 1.1.0 is required." -msgstr "" +msgstr "Nota: Se requiere una versión de OctoPrint al menos 1.1.0." msgid "Connection to Prusa SL1 / SL1S works correctly." -msgstr "" +msgstr "La conexión a Prusa SL1 / SL1S funciona correctamente." msgid "Could not connect to Prusa SLA" -msgstr "" +msgstr "No se ha podido conectar con Prusa SLA" msgid "Connection to PrusaLink works correctly." -msgstr "" +msgstr "La conexión a PrusaLink funciona correctamente." msgid "Could not connect to PrusaLink" -msgstr "" +msgstr "No se pudo conectar a PrusaLink" msgid "Storages found" -msgstr "" +msgstr "Almacenes encontrados" #. TRN %1% = storage path #, boost-format msgid "%1% : read only" -msgstr "" +msgstr "%1% : sólo lectura" #. TRN %1% = storage path #, boost-format msgid "%1% : no free space" -msgstr "" +msgstr "%1% : no hay espacio libre" #. TRN %1% = host #, boost-format msgid "Upload has failed. There is no suitable storage found at %1%." msgstr "" +"La carga ha fallado. No se ha encontrado almacenamiento adecuado en %1%." msgid "Connection to Prusa Connect works correctly." -msgstr "" +msgstr "La conexión a Prusa Connect funciona correctamente." msgid "Could not connect to Prusa Connect" -msgstr "" +msgstr "No se pudo conectar a Prusa Connect" msgid "Connection to Repetier works correctly." -msgstr "" +msgstr "La conexión con Repetier funciona correctamente." msgid "Could not connect to Repetier" -msgstr "" +msgstr "No se ha podido conectar con Repetier" msgid "Note: Repetier version at least 0.90.0 is required." -msgstr "" +msgstr "Nota: Se requiere la versión 0.90.0 de Repetier como mínimo." #, boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" msgstr "" +"Estado HTTP: %1% \n" +"Cuerpo del mensaje: \"%2%\"" #, boost-format msgid "" @@ -13229,6 +14224,9 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Falló el análisis de la respuesta del host. \n" +"Cuerpo del mensaje: \"%1%\" \n" +"Error: \"%2%\"" #, boost-format msgid "" @@ -13236,6 +14234,9 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Fallo en la enumeración de impresoras host. \n" +"Cuerpo del mensaje: \"%1%\" \n" +"Error: \"%2%\"" #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -13243,6 +14244,9 @@ msgid "" "Did you know that turning on precise wall can improve precision and layer " "consistency?" msgstr "" +"Pared precisa \n" +"¿Sabía que activar la pared precisa puede mejorar la precisión y la " +"uniformidad de las capas?" #: resources/data/hints.ini: [hint:Sandwich mode] msgid "" @@ -13251,12 +14255,18 @@ msgid "" "precision and layer consistency if your model doesn't have very steep " "overhangs?" msgstr "" +"Modo sándwich \n" +"¿Sabías que puedes utilizar el modo sándwich (interior-exterior-interior) " +"para mejorar la precisión y la consistencia de las capas si tu modelo no " +"tiene voladizos muy pronunciados?" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" "Chamber temperature\n" "Did you know that OrcaSlicer supports chamber temperature?" msgstr "" +"Temperatura de la cámara \n" +"¿Sabía que OrcaSlicer admite la temperatura de la cámara?" #: resources/data/hints.ini: [hint:Calibration] msgid "" @@ -13264,18 +14274,39 @@ msgid "" "Did you know that calibrating your printer can do wonders? Check out our " "beloved calibration solution in OrcaSlicer." msgstr "" +"Calibración \n" +"¿Sabías que calibrar tu impresora puede hacer maravillas? Echa un vistazo a " +"nuestra querida solución de calibración en OrcaSlicer." #: resources/data/hints.ini: [hint:Auxiliary fan] msgid "" "Auxiliary fan\n" "Did you know that OrcaSlicer supports Auxiliary part cooling fan?" msgstr "" +"Ventilador auxiliar\n" +"¿Sabía que OrcaSlicer admite un ventilador auxiliar de refrigeración de " +"piezas?" #: resources/data/hints.ini: [hint:Air filtration] msgid "" "Air filtration/Exhuast Fan\n" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +"Filtración de aire/ventilador Exhuast \n" +"¿Sabías que OrcaSlicer admite filtración de aire/ventilador Exhuast?" + +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" @@ -13283,6 +14314,16 @@ msgid "" "Did you know that Orca Slicer offers a wide range of keyboard shortcuts and " "3D scene operations." msgstr "" +"Cómo utilizar los atajos de teclado \n" +"¿Sabías que Orca Slicer ofrece una amplia gama de atajos de teclado y " +"operaciones de escenas 3D." + +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -13300,6 +14341,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems on the Windows system?" msgstr "" +"Arreglar modelo \n" +"¿Sabías que puedes arreglar un modelo 3D dañado para evitar muchos problemas " +"de corte en el sistema Windows?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -13356,6 +14400,9 @@ msgid "" "Did you know that you use the Search tool to quickly find a specific Orca " "Slicer setting?" msgstr "" +"Funcionalidad de búsqueda \n" +"¿Sabía que puede utilizar la herramienta de búsqueda para encontrar " +"rápidamente un ajuste específico de Orca Slicer?" #: resources/data/hints.ini: [hint:Simplify Model] msgid "" @@ -13363,6 +14410,10 @@ msgid "" "Did you know that you can reduce the number of triangles in a mesh using the " "Simplify mesh feature? Right-click the model and select Simplify model." msgstr "" +"Simplificar modelo \n" +"¿Sabía que puede reducir el número de triángulos de una malla utilizando la " +"función Simplificar malla? Haga clic con el botón derecho del ratón en el " +"modelo y seleccione Simplificar modelo." #: resources/data/hints.ini: [hint:Slicing Parameter Table] msgid "" @@ -13391,6 +14442,10 @@ msgid "" "part modifier? That way you can, for example, create easily resizable holes " "directly in Orca Slicer." msgstr "" +"Sustraer una parte \n" +"¿Sabías que puedes sustraer una malla de otra utilizando el modificador " +"Parte negativa? De esta forma puedes, por ejemplo, crear agujeros fácilmente " +"redimensionables directamente en Orca Slicer." #: resources/data/hints.ini: [hint:STEP] msgid "" @@ -13546,6 +14601,11 @@ msgid "" "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature. More info about this in the Wiki." msgstr "" +"Cuando es necesario imprimir con la puerta de la impresora abierta \n" +"¿Sabía usted que la apertura de la puerta de la impresora puede reducir la " +"probabilidad de obstrucción del extrusor / hotend al imprimir filamento de " +"baja temperatura con una temperatura más alta de la carcasa. Más información " +"sobre esto en la Wiki." #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -13554,6 +14614,145 @@ msgid "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping." msgstr "" +"Evite la deformación\n" +"Sabías que al imprimir materiales propensos a la deformación como el ABS, " +"aumentar adecuadamente la temperatura del lecho térmico puede reducir la " +"probabilidad de deformaciones." + +#~ msgid "" +#~ "Relative extrusion is recommended when using \"label_objects\" option." +#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "mode). Wipe tower is only compatible with relative mode. It is always " +#~ "enabled on BambuLab printers. Default is checked" +#~ msgstr "" +#~ "Se recomienda la extrusión relativa cuando se utiliza la opción " +#~ "\"label_objects\". Algunos extrusores funcionan mejor con esta opción " +#~ "desactivada (modo de extrusión absoluta). La torre de purga sólo es " +#~ "compatible con el modo relativo. Siempre activa en las impresoras " +#~ "BambuLab. Marcada por defecto" + +#~ msgid "Fan Speed: " +#~ msgstr "Velocidad del ventilador:" + +#~ msgid "The 3mf is not from Bambu Lab, load geometry data only." +#~ msgstr "El 3mf no es Bambu lab, solo se carga datos de geometría." + +#~ msgid "Bamabu Engineering Plate" +#~ msgstr "Placa de Ingenieria Bambu" + +#~ msgid "Bridge flow" +#~ msgstr "Flujo del puente" + +#~ msgid "" +#~ "Acceleration of initial layer. Using a lower value can improve build " +#~ "plate adhensive" +#~ msgstr "" +#~ "Aceleración de la capa inicial. El uso de un valor más bajo puede mejorar " +#~ "la adherencia de la placa de impresión" + +#~ msgid "Maximum acceleration for travel (M204 T)" +#~ msgstr "Aceleración máxima para el desplazamiento (M204 T)" + +#~ msgid "Movement:" +#~ msgstr "Movimiento:" + +#~ msgid "Movement" +#~ msgstr "Movimiento" + +#~ msgid "Auto Segment" +#~ msgstr "Auto Despiece" + +#~ msgid "Depth ratio" +#~ msgstr "Relación de profundidad" + +#~ msgid "Prizm" +#~ msgstr "Prisma" + +#~ msgid "connector is out of cut contour" +#~ msgstr "el conector está fuera del contorno de corte" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "los conectores están fuera del contorno de corte" + +#~ msgid "connector is out of object" +#~ msgstr "el conector está fuera del objeto" + +#~ msgid "connectors is out of object" +#~ msgstr "los conectores están fuera del objeto" + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Estado inválido. \n" +#~ "No se ha seleccionado ninguna pieza para conservar después del corte" + +#~ msgid " search results" +#~ msgstr "Buscar resultados" + +#~ msgid "" +#~ "The printer timed out while receiving a print job. Please check if the " +#~ "network is functioning properly and send the print again." +#~ msgstr "" +#~ "La impresora falló al recibir un trabajo de impresión. Por favor, " +#~ "compruebe si la red está funcionando adecuadamente y mande la impresión " +#~ "de nuevo." + +#~ msgid "Fliament Tangle Detect" +#~ msgstr "Detectado Enredo de Filamento" + +#, c-format, boost-format +#~ msgid "This slicer file version %s is newer than %s's version:" +#~ msgstr "Esta versión de archivo %s es más nueva que la versión %s:" + +#~ msgid "" +#~ "Would you like to update your Orca Slicer software to enable all " +#~ "functionality in this slicer file?\n" +#~ msgstr "" +#~ "¿Le gustaría actualizar su versión de Bambú Studio para activar todas las " +#~ "funcionalidades en este archivo de laminador?\n" + +#~ msgid "Newer 3mf version" +#~ msgstr "Nueva versión 3mf" + +#~ msgid "" +#~ "you can always update Orca Slicer at your convenience. The slicer file " +#~ "will now be loaded without full functionality." +#~ msgstr "" +#~ "Siempre puede actualizar Bambú Studio si le interesa. El archivo del " +#~ "laminador estará cargado sin todas las funcionalidades." + +#, c-format, boost-format +#~ msgid "" +#~ "This slicer file version %s is newer than %s's version.\n" +#~ "\n" +#~ "Would you like to update your Orca Slicer software to enable all " +#~ "functionality in this slicer file?" +#~ msgstr "" +#~ "Esta versión de archivo %s es más nueva que la versión %s:\n" +#~ "¿Le gustaría actualizar su versión de Bambú Studio para activar todas las " +#~ "funcionalidades en este archivo de laminador?" + +#~ msgid "Bamabu Smooth PEI Plate" +#~ msgstr "Bandeja Lisa PEI Bambú" + +#~ msgid "Bamabu Textured PEI Plate" +#~ msgstr "Bandeja Texturizada PEI Bambú" + +#~ msgid "" +#~ "Orca recalculates your flushing volumes everytime the filament colors " +#~ "change. You can change this behavior in Preferences." +#~ msgstr "" +#~ "Orcaslicer podría recalcular su volumen de descarga todas las veces que " +#~ "el color cambie. Podría deshabilitar el auto calculo en Orcaslicer > " +#~ "Preferencias." + +#~ msgid "" +#~ "Layer height cannot exceed the limit in Printer Settings -> Extruder -> " +#~ "Layer height limits" +#~ msgstr "" +#~ "La altura de capa no puede exceder del limite en Configuración de " +#~ "Impresora -> Extrusor -> Limites de altura de capa" #~ msgid "Edit Text" #~ msgstr "Editar Texto" @@ -13588,18 +14787,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Rápido" -#~ msgid "Auto-Calc" -#~ msgstr "Auto-Calc" - -#~ msgid "unloaded" -#~ msgstr "descargado" - -#~ msgid "loaded" -#~ msgstr "cargado" - -#~ msgid "Filament #" -#~ msgstr "Filamento #" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "" @@ -13650,9 +14837,6 @@ msgstr "" #~ msgstr "" #~ "Caliente la boquilla a más de 170 grados antes de cargar el filamento." -#~ msgid "Newer 3mf version" -#~ msgstr "Nueva versión 3mf" - #~ msgid "Show g-code window" #~ msgstr "Mostrar la ventana de G-Code" @@ -13986,33 +15170,6 @@ msgstr "" #~ "Mostrar modelos en línea seleccionados por el personal en la página de " #~ "inicio" -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "Hay otra cámara virtual en funcionamiento.\n" -#~ "Bambu Studio solo admite una cámara virtual.\n" -#~ "¿Quieres detener esta cámara virtual?" - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "La impresora debe estar en la misma LAN que Bambu Studio." - -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "" -#~ "Haga clic en Aceptar para actualizar el complemento de red la próxima vez " -#~ "que se inicie Bambu Studio." - -#~ msgid "New version of Bambu Studio" -#~ msgstr "Nueva versión de Bambu Studio" - -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "" -#~ "Paso 1: confirme que Bambu Studio y su impresora estén en la misma LAN." - #~ msgid "Empty layers around bottom are replaced by nearest normal layers." #~ msgstr "" #~ "Las capas vacías del fondo se sustituyen por las capas normales más " @@ -14228,9 +15385,6 @@ msgstr "" #~ msgid "Set Printable" #~ msgstr "Hacer Imprimible" -#~ msgid "Manual" -#~ msgstr "Manual" - #~ msgid "Ams filament backup" #~ msgstr "Copia de Seguridad del Filamento AMS" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index d697fcf2f4..6d4aed301c 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -15,13 +15,13 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==0 || n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" msgid "Supports Painting" -msgstr "Prend en charge la peinture" +msgstr "Peindre les supports" msgid "Alt + Mouse wheel" -msgstr "Alt + molette de la souris" +msgstr "Alt + Molette de la souris" msgid "Section view" msgstr "Vue en coupe" @@ -30,7 +30,7 @@ msgid "Reset direction" msgstr "Réinitialiser la direction" msgid "Ctrl + Mouse wheel" -msgstr "Ctrl + molette de la souris" +msgstr "Ctrl + Molette de la souris" msgid "Pen size" msgstr "Taille du stylo" @@ -48,16 +48,16 @@ msgid "Block supports" msgstr "Bloquer les supports" msgid "Shift + Left mouse button" -msgstr "Maj + bouton gauche de la souris" +msgstr "Maj + Bouton gauche de la souris" msgid "Erase" msgstr "Effacer" msgid "Erase all painting" -msgstr "Effacer toute la peinture" +msgstr "Effacer toute peinture" msgid "Highlight overhang areas" -msgstr "Mettez en surbrillance les zones en surplomb" +msgstr "Mettre en surbrillance les zones en surplomb" msgid "Gap fill" msgstr "Remplir les trous" @@ -98,7 +98,7 @@ msgstr "" "Permet de peindre uniquement sur les facettes sélectionnées par : \"%1%\"" msgid "Highlight faces according to overhang angle." -msgstr "Mettez en surbrillance les faces en fonction de l'angle de surplomb." +msgstr "Mettre en surbrillance les faces en fonction de l'angle de surplomb." msgid "No auto support" msgstr "Pas de support auto" @@ -122,7 +122,7 @@ msgstr "" "l'outil de peinture." msgid "Color Painting" -msgstr "Couleur Peinture" +msgstr "Mettre en couleur" msgid "Pen shape" msgstr "Forme de stylo" @@ -131,7 +131,7 @@ msgid "Paint" msgstr "Peindre" msgid "Key 1~9" -msgstr "Clé 1 ~ 9" +msgstr "Touche 1 ~ 9" msgid "Choose filament" msgstr "Choisissez le filament" @@ -161,7 +161,7 @@ msgid "Alt + Shift + Enter" msgstr "" msgid "Toggle Wireframe" -msgstr "Activer Filaire" +msgstr "Activer Maillage" msgid "Shortcut Key " msgstr "Touche de raccourci " @@ -221,6 +221,9 @@ msgstr "mm" msgid "Position" msgstr "Emplacement" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Rotation" @@ -249,17 +252,18 @@ msgid "Set Scale" msgstr "Définir l'Échelle" msgid "Reset Position" -msgstr "Position de réinitialisation" +msgstr "Réinitialiser la position" msgid "Reset Rotation" msgstr "Réinitialiser la Rotation" msgid "World coordinates" -msgstr "Les coordonnées mondiales" +msgstr "Coordonnées" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Taille" @@ -269,6 +273,113 @@ msgstr "%" msgid "uniform scale" msgstr "échelle uniforme" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "Auto" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "Connecteur" + +msgid "Dowel" +msgstr "Tourillon" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Tronc" + +msgid "Square" +msgstr "Carré" + +msgid "Hexagon" +msgstr "Hexagone" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "Placer sur la coupe" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "Connecteurs" + +msgid "Type" +msgstr "Type" + +msgid "Style" +msgstr "Style" + +msgid "Shape" +msgstr "Forme" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "Largeur" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "Pièce" + +msgid "Object" +msgstr "Objet" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Tolérance" + +msgid "Drag" +msgstr "Glisser" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Clic gauche" @@ -281,9 +392,6 @@ msgstr "Clic droit" msgid "Remove connector" msgstr "Retirer le connecteur" -msgid "Drag" -msgstr "Glisser" - msgid "Move connector" msgstr "Déplacer le connecteur" @@ -299,23 +407,51 @@ msgstr "Sélectionner tous les connecteurs" msgid "Cut" msgstr "Couper" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "Réparer l'objet modèle" +msgid "Remove connectors" +msgstr "Retirer les connecteurs" -msgid "Connector" -msgstr "Connecteur" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "Mouvement:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "Mouvement" +msgid "Space" +msgstr "Espace" -msgid "Height" -msgstr "Hauteur" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Confirmer les connecteurs" + +msgid "Cancel" +msgstr "Annuler" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "Réinitialiser" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Modifier les connecteurs" @@ -323,6 +459,12 @@ msgstr "Modifier les connecteurs" msgid "Add connectors" msgstr "Ajouter des connecteurs" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Partie supérieure" @@ -330,10 +472,7 @@ msgid "Lower part" msgstr "Partie inférieure" msgid "Keep" -msgstr "Garder" - -msgid "Place on cut" -msgstr "Placer sur la coupe" +msgstr "Conserver" msgid "Flip" msgstr "Retourner" @@ -344,87 +483,58 @@ msgstr "Après la coupe" msgid "Cut to parts" msgstr "Couper la sélection dans le presse-papiers" -msgid "Auto Segment" -msgstr "Segmentation automatique" - msgid "Perform cut" msgstr "Effectuer la coupe" -msgid "Reset" -msgstr "Réinitialiser" - -msgid "Connectors" -msgstr "Connecteurs" - -msgid "Type" -msgstr "Type" - -msgid "Style" -msgstr "Style" - -msgid "Shape" -msgstr "Forme" - -msgid "Depth ratio" -msgstr "Rapport de profondeur" - -msgid "Remove connectors" -msgstr "Retirer les connecteurs" - -msgid "Prizm" -msgstr "Prisme" - -msgid "Frustum" -msgstr "Tronc" - -msgid "Square" -msgstr "Carré" - -msgid "Hexagon" -msgstr "Hexagone" - -msgid "Confirm connectors" -msgstr "Confirmer les connecteurs" - -msgid "Cancel" -msgstr "Annuler" - msgid "Warning" msgstr "Alerte" msgid "Invalid connectors detected" msgstr "Connecteurs invalides détectés" -msgid "connector is out of cut contour" -msgstr "le connecteur est hors du contour de la coupe" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" -msgid "connectors are out of cut contour" -msgstr "les connecteurs sont hors du contour de la coupe" - -msgid "connector is out of object" -msgstr "le connecteur est hors de l'objet" - -msgid "connectors is out of object" -msgstr "les connecteurs sont hors de l'objet" +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" msgid "Some connectors are overlapped" msgstr "Certains connecteurs se chevauchent" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"État non valide. \n" -"Aucune pièce n'est sélectionnée pour être conservée après la découpe" -msgid "Plug" +msgid "Cut plane is placed out of object" +msgstr "" + +msgid "Cut plane with groove is invalid" +msgstr "" + +msgid "Connector" msgstr "Connecteur" -msgid "Dowel" -msgstr "Tourillon" +msgid "Cut by Plane" +msgstr "" -msgid "Tolerance" -msgstr "Tolérance" +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" +"les bords non pliables sont dus à l’outil de coupe, voulez-vous les corriger " +"maintenant ?" + +msgid "Repairing model object" +msgstr "Réparer l'objet modèle" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Nom du maillage" @@ -477,7 +587,7 @@ msgid "%d triangles" msgstr "%d triangles" msgid "Show wireframe" -msgstr "Afficher la vue filaire" +msgstr "Afficher le maillage" #, boost-format msgid "%1%" @@ -522,6 +632,8 @@ msgstr "Quitter Peinture de Couture" msgid "Paint-on seam editing" msgstr "Modification des coutures peintes" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Police" @@ -557,6 +669,655 @@ msgstr "Faire pivoter le texte" msgid "Text shape" msgstr "Forme du texte" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "Avancé" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "Modificateur" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "Chargement" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Hauteur" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Symétrie" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "Supprimer" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Échap" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "Aucun" + +msgid "Diameter" +msgstr "Diamètre" + +msgid "Length" +msgstr "Longueur" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "Copier dans le presse-papier" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -579,7 +1340,7 @@ msgid "Some values have been replaced. Please check them:" msgstr "Certaines valeurs ont été remplacées. Veuillez les vérifier :" msgid "Process" -msgstr "Traiter" +msgstr "Traitement" msgid "Filament" msgstr "Filament" @@ -700,7 +1461,7 @@ msgid "Loading current presets" msgstr "Chargement des préréglages actuels" msgid "Loading a mode view" -msgstr "Chargement d'une vue de mode" +msgstr "Chargement d'un mode de vue" msgid "Choose one file (3mf):" msgstr "Choisissez un fichier (3mf):" @@ -734,7 +1495,7 @@ msgstr "" "pendant le processus de tranchage !" msgid "Open Project" -msgstr "Ouvrir Projet" +msgstr "Ouvrir un Projet" msgid "" "The version of Orca Slicer is too low and needs to be updated to the latest " @@ -744,7 +1505,7 @@ msgstr "" "dernière version afin qu’il puisse être utilisé normalement" msgid "Privacy Policy Update" -msgstr "Mise à jour de politique de confidentialité" +msgstr "Mise à jour de la politique de confidentialité" msgid "" "The number of user presets cached in the cloud has exceeded the upper limit, " @@ -757,9 +1518,6 @@ msgstr "" msgid "Sync user presets" msgstr "Synchronisation des préréglages de l'utilisateur" -msgid "Loading" -msgstr "Chargement" - msgid "Loading user preset" msgstr "Chargement du préréglage utilisateur" @@ -790,9 +1548,6 @@ msgstr "Sélectionnez un fichier G-code :" msgid "Import File" msgstr "Importer un Fichier" -msgid "Delete" -msgstr "Supprimer" - msgid "Choose files" msgstr "Choisir des fichiers" @@ -816,7 +1571,7 @@ msgid "Quality" msgstr "Qualité" msgid "Shell" -msgstr "Coquille" +msgstr "Coque" msgid "Infill" msgstr "Remplissage" @@ -834,10 +1589,10 @@ msgid "Strength" msgstr "Résistance" msgid "Top Solid Layers" -msgstr "Couches supérieures solides" +msgstr "Couches solides supérieures" msgid "Top Minimum Shell Thickness" -msgstr "Épaisseur minimale de la coque" +msgstr "Épaisseur minimale de la coque supérieure" msgid "Bottom Solid Layers" msgstr "Couches solides inférieures" @@ -861,10 +1616,7 @@ msgid "Wipe options" msgstr "Options de nettoyage" msgid "Bed adhension" -msgstr "Adhérence au lit" - -msgid "Advanced" -msgstr "Avancé" +msgstr "Adhérence au plateau" msgid "Add part" msgstr "Ajouter une pièce" @@ -917,6 +1669,21 @@ msgstr "Supprimer l'objet sélectionné" msgid "Load..." msgstr "Charger..." +msgid "Cube" +msgstr "Cube" + +msgid "Cylinder" +msgstr "Cylindre" + +msgid "Cone" +msgstr "Cône" + +msgid "Disc" +msgstr "Disque" + +msgid "Torus" +msgstr "Tore" + msgid "Orca Cube" msgstr "Cube Orca" @@ -929,21 +1696,12 @@ msgstr "Test Autodesk FDM" msgid "Voron Cube" msgstr "Cube Voron" -msgid "Cube" -msgstr "Cube" - -msgid "Cylinder" -msgstr "Cylindre" - -msgid "Cone" -msgstr "Cône" +msgid "Stanford Bunny" +msgstr "Lapin de Stanford" msgid "Text" msgstr "Texte" -msgid "SVG" -msgstr "" - msgid "Height range Modifier" msgstr "Modificateur de plage de hauteur" @@ -1073,9 +1831,6 @@ msgstr "Le long de l'axe Z" msgid "Mirror along the Z axis" msgstr "Miroir le long de l'axe Z" -msgid "Mirror" -msgstr "Symétrie" - msgid "Mirror object" msgstr "Symétriser l'Objet" @@ -1097,6 +1852,9 @@ msgstr "Invalider les informations de découpe" msgid "Add Primitive" msgstr "Ajouter une primitive" +msgid "Add Handy models" +msgstr "Ajouter des modèles pratiques" + msgid "Show Labels" msgstr "Afficher les étiquettes" @@ -1144,7 +1902,7 @@ msgid "delete all objects on current plate" msgstr "supprimer tous les objets sur la plaque actuelle" msgid "Arrange" -msgstr "Agencer" +msgstr "Organiser" msgid "arrange current plate" msgstr "organiser la plaque actuelle" @@ -1348,12 +2106,6 @@ msgstr "Plages de hauteur" msgid "Settings for height range" msgstr "Réglages de la plage de hauteur" -msgid "Object" -msgstr "Objet" - -msgid "Part" -msgstr "Pièce" - msgid "Layer" msgstr "Couche" @@ -1380,9 +2132,6 @@ msgstr "" msgid "Negative Part" msgstr "Partie négative" -msgid "Modifier" -msgstr "Modificateur" - msgid "Support Blocker" msgstr "Bloqueur de Support" @@ -1458,9 +2207,6 @@ msgstr "Densité de remplissage(%)" msgid "Auto Brim" msgstr "Bord automatique" -msgid "Auto" -msgstr "Auto" - msgid "Mouse ear" msgstr "Sur les angles uniquement" @@ -1477,7 +2223,7 @@ msgid "No-brim" msgstr "Sans bord" msgid "Outer wall speed" -msgstr "Vitesse du mur extérieur" +msgstr "Vitesse de paroi extérieure" msgid "Plate" msgstr "Plaque" @@ -1536,9 +2282,6 @@ msgstr "G-code personnalisé" msgid "Enter Custom G-code used on current layer:" msgstr "Entrez le G-code personnalisé a utiliser sur la couche actuelle :" -msgid "OK" -msgstr "OK" - msgid "Jump to Layer" msgstr "Aller à la couche" @@ -1593,15 +2336,15 @@ msgstr "Pas d'imprimante" msgid "..." msgstr "…" -msgid "Failed to connect to the server" -msgstr "Impossible de se connecter au serveur" - msgid "Check the status of current system services" msgstr "Vérifiez l'état des services système actuels" msgid "code" msgstr "code" +msgid "Failed to connect to the server" +msgstr "Impossible de se connecter au serveur" + msgid "Failed to connect to cloud service" msgstr "Impossible de se connecter au service cloud" @@ -2116,7 +2859,7 @@ msgid "Nozzle temperature" msgstr "Température de la buse" msgid "Bed Temperature" -msgstr "Température du lit" +msgstr "Température du plateau" msgid "Max volumetric speed" msgstr "Vitesse volumétrique maximale" @@ -2462,9 +3205,6 @@ msgstr "" msgid "Origin" msgstr "Origine" -msgid "Diameter" -msgstr "Diamètre" - msgid "Size in X and Y of the rectangular plate." msgstr "Taille en X et Y du plateau rectangulaire." @@ -2530,7 +3270,8 @@ msgstr "" "Choisir un fichier à partir duquel importer la texture du plateau (PNG/SVG) :" msgid "Choose an STL file to import bed model from:" -msgstr "Choisissez un fichier STL à partir duquel importer le modèle de lit :" +msgstr "" +"Choisissez un fichier STL à partir duquel importer le modèle de plateau :" msgid "Bed Shape" msgstr "Forme du plateau" @@ -2577,7 +3318,7 @@ msgstr "Hauteur de couche trop petite. Réinitialiser à 0,2" msgid "" "Too small ironing spacing.\n" "Reset to 0.1" -msgstr "Espacement de repassage trop petit. Réinitialiser à 0.1" +msgstr "Espacement de lissage trop petit. Réinitialiser à 0.1" msgid "" "Zero initial layer height is invalid.\n" @@ -2610,16 +3351,16 @@ msgid "" msgstr "" "Une trop grande compensation du pied d'éléphant est déraisonnable. Si vous " "avez vraiment un effet de pied d'éléphant sérieux, veuillez vérifier " -"d'autres paramètres. Par exemple, si la température du lit est trop élevée. " -"La valeur sera remise à 0." +"d'autres paramètres. Par exemple, si la température du plateau est trop " +"élevée. La valeur sera remise à 0." msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " "layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"Le mode spirale ne fonctionne que lorsque qu'il n'y a qu'un seul mur, les " -"supports sont désactivés, que les couches supérieures de la coque sont à 0, " -"qu'il n'y a pas de remplissage et que le type timelapse est traditionnel." +"Le mode spirale ne fonctionne que lorsque qu'il n'y a qu'une seule paroi, " +"les supports sont désactivés, que les couches supérieures de la coque sont à " +"0, qu'il n'y a pas de remplissage et que le type timelapse est traditionnel." msgid " But machines with I3 structure will not generate timelapse videos." msgstr "" @@ -2636,6 +3377,24 @@ msgstr "" "vase\n" "Non - Annuler l'activation du mode spirale" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" +"La paroi supplémentaire alternée ne fonctionne que si « Assurer l’épaisseur " +"verticale de la coque » est désactivé. " + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" +"Modifier ces paramètres automatiquement ? \n" +"Oui - Désactiver « Assurer l’épaisseur verticale de la coque » et activer " +"« Paroi supplémentaire alternée »\n" +"Non - Ne pas utiliser « Paroi supplémentaire alternée »" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2774,7 +3533,7 @@ msgid "Cooling chamber" msgstr "Refroidissement de la chambre" msgid "Paused by the Gcode inserted by user" -msgstr "Mise en pause par le Gcode inséré par l’utilisateur" +msgstr "Mise en pause par le G-code inséré par l’utilisateur" msgid "Motor noise showoff" msgstr "Démonstration du bruit du moteur" @@ -3026,6 +3785,9 @@ msgstr "Durée" msgid "Percent" msgstr "Pour cent" +msgid "Used filament" +msgstr "Filament utilisé" + msgid "Layer Height (mm)" msgstr "Hauteur de couche (mm)" @@ -3044,9 +3806,6 @@ msgstr "Température (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Débit volumétrique (mm³/s)" -msgid "Used filament" -msgstr "Filament utilisé" - msgid "Travel" msgstr "Déplacement" @@ -3147,13 +3906,13 @@ msgid "Remove detail" msgstr "Supprimer détail" msgid "Shift + Left mouse button:" -msgstr "Maj + bouton gauche de la souris :" +msgstr "Maj + Bouton gauche de la souris :" msgid "Reset to base" msgstr "Revenir de base" msgid "Shift + Right mouse button:" -msgstr "Maj + bouton droit de la souris:" +msgstr "Maj + Bouton droit de la souris:" msgid "Smoothing" msgstr "Lissage" @@ -3219,10 +3978,10 @@ msgid "Auto orient" msgstr "Orientation automatique" msgid "Arrange all objects" -msgstr "Disposer tous les objets" +msgstr "Organiser tous les objets" msgid "Arrange objects on selected plates" -msgstr "Disposer les objets sur les plaques sélectionnées" +msgstr "Organiser les objets sur les plaques sélectionnées" msgid "Split to objects" msgstr "Diviser en objets individuels" @@ -3281,7 +4040,7 @@ msgid "A G-code path goes beyond the max print height." msgstr "Un chemin du G-code dépasse la hauteur d’impression maximale." msgid "A G-code path goes beyond the boundary of plate." -msgstr "Un chemin de code G va au-delà de la limite de la plaque." +msgstr "Un chemin du G-code va au-delà de la limite de la plaque." msgid "Only the object being edit is visible." msgstr "Seul l'objet en cours d'édition est visible." @@ -3303,7 +4062,7 @@ msgid "Micro lidar calibration" msgstr "Calibration du Micro-Lidar" msgid "Bed leveling" -msgstr "Mise à niveau du lit" +msgstr "Mise à niveau du plateau" msgid "Vibration compensation" msgstr "Compensation des vibrations" @@ -3651,7 +4410,7 @@ msgid "Show &G-code Window" msgstr "Afficher la fenêtre du &G-code" msgid "Show g-code window in Previce scene" -msgstr "Afficher la fenêtre du code g dans la scène précédente" +msgstr "Afficher la fenêtre du G-code dans la scène précédente" msgid "Reset Window Layout" msgstr "Réinitialiser la présentation de la fenêtre" @@ -3917,7 +4676,7 @@ msgid "Information" msgstr "Information" msgid "Playing..." -msgstr "En jouant..." +msgstr "En cours…" #, c-format, boost-format msgid "Load failed [%d]!" @@ -4512,7 +5271,7 @@ msgstr "" "Votre modèle a besoin de supports ! Veuillez activer le matériau de support." msgid "Gcode path overlap" -msgstr "Chevauchement de chemin Gcode" +msgstr "Chevauchement de chemin G-code" msgid "Support painting" msgstr "Soutenir la peinture" @@ -5058,7 +5817,7 @@ msgid "The selected file" msgstr "Le fichier sélectionné" msgid "does not contain valid gcode." -msgstr "ne contient pas de gcode valide." +msgstr "ne contient pas de G-code valide." msgid "Error occurs while loading G-code file" msgstr "Une erreur se produit lors du chargement du fichier G-code" @@ -5079,7 +5838,7 @@ msgid "Only one G-code file can be opened at the same time." msgstr "Un seul fichier G-code peut être ouvert à la fois." msgid "G-code loading" -msgstr "Chargement du code G" +msgstr "Chargement du G-code" msgid "G-code files can not be loaded with models together!" msgstr "" @@ -5303,6 +6062,9 @@ msgstr "Région d'origine" msgid "Stealth Mode" msgstr "Mode privé" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "Métrique" @@ -5372,7 +6134,7 @@ msgid "User Sync" msgstr "Synchronisation utilisateur" msgid "Update built-in Presets automatically." -msgstr "Mettez à jour automatiquement les préréglages intégrés." +msgstr "Mettre à jour automatiquement les préréglages intégrés." msgid "System Sync" msgstr "Synchronisation du système" @@ -5788,7 +6550,7 @@ msgid "Refresh" msgstr "Actualiser" msgid "Bed Leveling" -msgstr "Mise à niveau du lit" +msgstr "Mise à niveau du plateau" msgid "Flow Dynamics Calibration" msgstr "Calibration du débit" @@ -5837,17 +6599,17 @@ msgid "" "Filament %s exceeds the number of AMS slots. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Le filament %s dépasse le nombre d'emplacements AMS. Mettez à jour le " -"firmware de l'imprimante pour qu'il prenne en charge l'attribution des " +"Le filament %s dépasse le nombre d'emplacements AMS. Veuillez mettre à jour " +"le firmware de l'imprimante pour qu'il prenne en charge l'attribution des " "emplacements AMS." msgid "" "Filament exceeds the number of AMS slots. Please update the printer firmware " "to support AMS slot assignment." msgstr "" -"Le nombre de filaments dépasse le nombre d'emplacements AMS. Mettez à jour " -"le firmware de l'imprimante pour qu'il prenne en charge l'attribution des " -"emplacements AMS." +"Le nombre de filaments dépasse le nombre d'emplacements AMS. Veuillez mettre " +"à jour le firmware de l'imprimante pour qu'il prenne en charge l'attribution " +"des emplacements AMS." msgid "" "Filaments to AMS slots mappings have been established. You can click a " @@ -5877,9 +6639,9 @@ msgid "" "Filament does not match the filament in AMS slot. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Le filament ne correspond pas au filament du slot AMS. Mettez à jour le " -"firmware de l'imprimante pour qu'il prenne en charge l'attribution des " -"emplacements AMS." +"Le filament ne correspond pas au filament du slot AMS. Veuillez mettre à " +"jour le firmware de l'imprimante pour qu'il prenne en charge l'attribution " +"des emplacements AMS." msgid "" "The printer firmware only supports sequential mapping of filament => AMS " @@ -6202,7 +6964,7 @@ msgstr "" "Nous avons ajouté un style expérimental « Arborescent Fin » qui offre un " "volume de support plus petit mais également une résistance plus faible.\n" "Nous recommandons de l'utiliser avec : 0 couches d'interface, 0 distance " -"supérieure, 2 murs." +"supérieure, 2 parois." msgid "" "Change these settings automatically? \n" @@ -6234,6 +6996,11 @@ msgstr "" "Distance Z supérieure nulle, espacement d'interface nul, motif concentrique " "et désactivation de la hauteur indépendante de la couche de support" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6272,10 +7039,10 @@ msgid "Precision" msgstr "Précision" msgid "Wall generator" -msgstr "Générateur de mur" +msgstr "Générateur de paroi" msgid "Walls and surfaces" -msgstr "Murs et surfaces" +msgstr "Parois et surfaces" msgid "Bridging" msgstr "Ponts" @@ -6287,7 +7054,7 @@ msgid "Walls" msgstr "Parois" msgid "Top/bottom shells" -msgstr "Coquilles supérieures/inférieures" +msgstr "Coques supérieures/inférieures" msgid "Initial layer speed" msgstr "Vitesse de couche initiale" @@ -6361,11 +7128,11 @@ msgid_plural "" "estimation." msgstr[0] "" "La ligne suivante %s contient des mots clés réservés. Veuillez le supprimer, " -"ou il battra la visualisation du code G et l'estimation du temps " +"ou il battra la visualisation du G-code et l'estimation du temps " "d'impression." msgstr[1] "" "La ligne suivante %s contient des mots clés réservés. Veuillez le supprimer, " -"ou il battra la visualisation du code G et l'estimation du temps " +"ou il battra la visualisation du G-code et l'estimation du temps " "d'impression." msgid "Reserved keywords found" @@ -6442,8 +7209,9 @@ msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " "filament does not support to print on the Textured PEI Plate" msgstr "" -"Température du lit lorsque la plaque PEI texturée est installée. La valeur 0 " -"signifie que le filament n'est pas supporté par la plaque PEI texturée" +"Température du plateau lorsque la plaque PEI texturée est installée. La " +"valeur 0 signifie que le filament n'est pas supporté par la plaque PEI " +"texturée" msgid "Volumetric speed limitation" msgstr "Limitation de vitesse volumétrique" @@ -6496,10 +7264,10 @@ msgid "Complete print" msgstr "Après l’impression" msgid "Filament start G-code" -msgstr "Code G de démarrage du filament" +msgstr "G-code de démarrage du filament" msgid "Filament end G-code" -msgstr "Code G de fin de filament" +msgstr "G-code de fin de filament" msgid "Multimaterial" msgstr "Multi-matériaux" @@ -6538,10 +7306,10 @@ msgid "Machine gcode" msgstr "G-code de la machine" msgid "Machine start G-code" -msgstr "Code G de démarrage de la machine" +msgstr "G-code de démarrage de la machine" msgid "Machine end G-code" -msgstr "Code G de fin de machine" +msgstr "G-code de fin de machine" msgid "Printing by object G-code" msgstr "Impression par objet G-code" @@ -6550,19 +7318,19 @@ msgid "Before layer change G-code" msgstr "G-Code avant changement de couche" msgid "Layer change G-code" -msgstr "Code G de changement de couche" +msgstr "G-code de changement de couche" msgid "Time lapse G-code" msgstr "G-code de Timelapse" msgid "Change filament G-code" -msgstr "Changer le code G du filament" +msgstr "Changer le G-code du filament" msgid "Change extrusion role G-code" msgstr "G-code de changement du rôle de l’extrusion" msgid "Pause G-code" -msgstr "Mettre le code G en pause" +msgstr "Mettre le G-code en pause" msgid "Template Custom G-code" msgstr "Modèle G-code personnalisé" @@ -6912,19 +7680,19 @@ msgstr "Largeur de ligne du pilonnage" msgid "Ramming line spacing" msgstr "Espacement des lignes du pilonnage" -msgid "Recalculate" -msgstr "Recalculer" +msgid "Auto-Calc" +msgstr "Auto-Calc" + +msgid "Re-calculate" +msgstr "Re-calculer" msgid "Flushing volumes for filament change" msgstr "Volumes de rinçage pour le changement de filament" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" -"Orca recalcule vos volumes de purge à chaque fois que les couleurs des " -"filaments changent. Vous pouvez modifier ce comportement dans les " -"préférences." msgid "Flushing volume (mm³) for each filament pair." msgstr "Volume de rinçage (mm³) pour chaque paire de filaments." @@ -6940,6 +7708,15 @@ msgstr "Le multiplicateur doit être compris dans la plage [%.2f, %.2f]." msgid "Multiplier" msgstr "Multiplicateur" +msgid "unloaded" +msgstr "déchargé" + +msgid "loaded" +msgstr "chargé" + +msgid "Filament #" +msgstr "Filament #" + msgid "From" msgstr "De" @@ -6979,9 +7756,6 @@ msgstr "⌘+Maj+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Maj+G" -msgid "Copy to clipboard" -msgstr "Copier dans le presse-papier" - msgid "Paste from clipboard" msgstr "Coller depuis le presse-papier" @@ -7095,9 +7869,6 @@ msgstr "Maj+n'importe quelle flèche" msgid "Movement step set to 1 mm" msgstr "Pas du mouvement réglé sur 1 mm" -msgid "Esc" -msgstr "Échap" - msgid "keyboard 1-9: set filament for object/part" msgstr "clavier 1-9 : définir le filament pour l'objet/la pièce" @@ -7146,7 +7917,7 @@ msgstr "Points de supports Gizmo SLA" msgid "Gizmo FDM paint-on seam" msgstr "Couture peinte Gizmo FDM" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "Basculer entre Préparer/Aperçu" msgid "Plater" @@ -7156,7 +7927,7 @@ msgid "Move: press to snap by 1mm" msgstr "Déplacer : appuyez pour aligner de 1 mm" msgid "⌘+Mouse wheel" -msgstr "⌘+molette de la souris" +msgstr "⌘+Molette de la souris" msgid "Support/Color Painting: adjust pen radius" msgstr "Support/Peinture couleur : ajustez le rayon du stylet" @@ -7168,10 +7939,10 @@ msgid "Support/Color Painting: adjust section position" msgstr "Support/Peinture couleur : ajuster la position de la section" msgid "Ctrl+Mouse wheel" -msgstr "Ctrl+molette de la souris" +msgstr "Ctrl+Molette de la souris" msgid "Alt+Mouse wheel" -msgstr "Alt+molette de la souris" +msgstr "Alt+Molette de la souris" msgid "Gizmo" msgstr "Bidule" @@ -7182,9 +7953,6 @@ msgstr "Définir le numéro d'extrudeuse pour les objets et les pièces" msgid "Delete objects, parts, modifiers " msgstr "Supprimer des objets, des pièces, des modificateurs " -msgid "Space" -msgstr "Espace" - msgid "Select the object/part and press space to change the name" msgstr "" "Sélectionnez l'objet/la pièce et appuyez sur espace pour changer le nom" @@ -7323,7 +8091,7 @@ msgid "Idle" msgstr "Inactif" msgid "Beta version" -msgstr "" +msgstr "Version Beta" msgid "Latest version" msgstr "Dernière version" @@ -7362,7 +8130,7 @@ msgstr "" "La version du firmware est erronée. La réparation et la mise à jour sont " "nécessaires avant l'impression. Voulez-vous effectuer la mise à jour " "maintenant ? Vous pouvez également effectuer une mise à jour ultérieurement " -"depuis l'imprimante ou lors du prochain démarrage de Bambu Studio." +"depuis l'imprimante ou lors du prochain démarrage de Orca Slicer." msgid "Extension Board" msgstr "Carte d'Extension" @@ -7461,11 +8229,11 @@ msgid "" "Failed to generate gcode for invalid custom G-code.\n" "\n" msgstr "" -"Échec de la génération du gcode pour un G-code personnalisé non valide.\n" +"Échec de la génération du G-code pour un G-code personnalisé non valide.\n" msgid "Please check the custom G-code or use the default custom G-code." msgstr "" -"Veuillez vérifier le code G personnalisé ou utiliser le code G personnalisé " +"Veuillez vérifier le G-code personnalisé ou utiliser le G-code personnalisé " "par défaut." #, boost-format @@ -7473,13 +8241,13 @@ msgid "Generating G-code: layer %1%" msgstr "Génération du G-code : couche %1%" msgid "Inner wall" -msgstr "Mur intérieur" +msgstr "Paroi intérieure" msgid "Outer wall" -msgstr "Mur extérieur" +msgstr "Paroi extérieure" msgid "Overhang wall" -msgstr "Mur en surplomb" +msgstr "Paroi en surplomb" msgid "Sparse infill" msgstr "Remplissage" @@ -7831,20 +8599,20 @@ msgid "" msgstr "" "L'extrusion relative de l'extrudeur nécessite de réinitialiser la position " "de celui-ci à chaque couche pour éviter la perte de précision de la virgule " -"flottante. Ajouter \"G92 E0\" au Gcode de changement de couche." +"flottante. Ajouter \"G92 E0\" au G-code de changement de couche." msgid "" "\"G92 E0\" was found in before_layer_gcode, which is incompatible with " "absolute extruder addressing." msgstr "" -"\"G92 E0\" a été trouvé dans le Gcode avant le changement de couche, ce qui " +"\"G92 E0\" a été trouvé dans le G-code avant le changement de couche, ce qui " "est incompatible avec l’extrusion absolue de l’extrudeur." msgid "" "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " "extruder addressing." msgstr "" -"\"G92 E0\" a été trouvé dans le Gcode de changement de couche, ce qui est " +"\"G92 E0\" a été trouvé dans le G-code de changement de couche, ce qui est " "incompatible avec l’extrusion absolue de l’extrudeur." #, c-format, boost-format @@ -7867,7 +8635,7 @@ msgid "Printable area" msgstr "Zone imprimable" msgid "Bed exclude area" -msgstr "Zone d'exclusion de lit" +msgstr "Zone d'exclusion de plateau" msgid "" "Unprintable area in XY plane. For example, X1 Series printers use the front " @@ -7880,7 +8648,7 @@ msgstr "" "points au format suivant : \"XxY, XxY,... \"" msgid "Bed custom texture" -msgstr "Texture personnalisée du lit" +msgstr "Texture personnalisée du plateau" msgid "Bed custom model" msgstr "Modèle de plateau personnalisé" @@ -7939,18 +8707,18 @@ msgid "Hostname, IP or URL" msgstr "Nom d'hôte, adresse IP ou URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r peut téléverser des fichiers G-code sur une imprimante hôte. Ce champ " -"doit contenir le nom d'hôte, l'adresse IP ou l'URL de l'instance hôte de " -"l'imprimante. L'hôte d'impression derrière HAProxy avec l'authentification " -"de base activée est accessible en saisissant le nom d'utilisateur et le mot " -"de passe dans l'URL au format suivant : https://username:password@your-" -"octopi-address/" +"Orca Slicer peut téléverser des fichiers G-code sur une imprimante hôte. Ce " +"champ doit contenir le nom d'hôte, l'adresse IP ou l'URL de l'instance hôte " +"de l'imprimante. L'hôte d'impression derrière HAProxy avec " +"l'authentification de base activée est accessible en saisissant le nom " +"d'utilisateur et le mot de passe dans l'URL au format suivant : https://" +"username:password@your-octopi-address/" msgid "Device UI" msgstr "Interface utilisateur de l’appareil" @@ -7965,11 +8733,12 @@ msgid "API Key / Password" msgstr "Clé API / Mot de passe" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r peut téléverser des fichiers G-code sur une imprimante hôte. Ce champ " -"doit contenir la clé API ou le mot de passe requis pour l'authentification." +"Orca Slicer peut téléverser des fichiers G-code sur une imprimante hôte. Ce " +"champ doit contenir la clé API ou le mot de passe requis pour " +"l'authentification." msgid "Name of the printer" msgstr "Nom de l'imprimante" @@ -8017,15 +8786,15 @@ msgid "HTTP digest" msgstr "Résumé HTTP" msgid "Avoid crossing wall" -msgstr "Évitez de traverser les murs" +msgstr "Évitez de traverser les parois" msgid "Detour and avoid to travel across wall which may cause blob on surface" msgstr "" -"Faites un détour et évitez de traverser le mur, ce qui pourrait causer des " -"taches sur la surface" +"Faire un détour et éviter de traverser la paroi, ce qui pourrait causer des " +"dépôts sur la surface" msgid "Avoid crossing wall - Max detour length" -msgstr "Évitez de traverser les murs - Longueur maximale du détour" +msgstr "Évitez de traverser les parois - Longueur maximale du détour" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " @@ -8033,11 +8802,11 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"Distance de détour maximale pour éviter de traverser un mur: l'imprimante ne " -"fera pas de détour si la distance de détour est supérieure à cette valeur. " -"La longueur du détour peut être spécifiée sous forme de valeur absolue ou de " -"pourcentage (par exemple 50 %) d'un trajet direct. Une valeur de 0 " -"désactivera cette option." +"Distance de détour maximale pour éviter de traverser une paroi: l'imprimante " +"ne fera pas de détour si la distance de détour est supérieure à cette " +"valeur. La longueur du détour peut être spécifiée sous forme de valeur " +"absolue ou de pourcentage (par exemple 50 %) d'un trajet direct. Une valeur " +"de 0 désactivera cette option." msgid "mm or %" msgstr "mm ou %" @@ -8076,14 +8845,14 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Textured PEI Plate" msgstr "" -"Température du lit après la première couche. 0 signifie que le filament " +"Température du plateau après la première couche. 0 signifie que le filament " "n'est pas supporté par la plaque PEI texturée." msgid "Initial layer" msgstr "Couche initiale" msgid "Initial layer bed temperature" -msgstr "Température initiale du lit de couche" +msgstr "Température du plateau lors de la couche initiale" msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " @@ -8113,11 +8882,11 @@ msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured PEI Plate" msgstr "" -"La température du lit à la première couche. La valeur 0 signifie que le " +"La température du plateau à la première couche. La valeur 0 signifie que le " "filament n'est pas supporté sur la plaque PEI texturée." msgid "Bed types supported by the printer" -msgstr "Types de lit pris en charge par l'imprimante" +msgstr "Types de plateaux pris en charge par l'imprimante" msgid "Cool Plate" msgstr "Cool Plate/Plaque PLA" @@ -8129,7 +8898,8 @@ msgid "First layer print sequence" msgstr "Séquence d’impression de la première couche" msgid "This G-code is inserted at every layer change before lifting z" -msgstr "Ce G-code est inséré à chaque changement de couche avant de soulever z" +msgstr "" +"Ce G-code est inséré à chaque changement de couche avant le levage du Z" msgid "Bottom shell layers" msgstr "Couches inférieures de la coque" @@ -8181,7 +8951,7 @@ msgid "" "bridge can get better quality for these part" msgstr "" "Forcez le ventilateur de refroidissement de la pièce à être à cette vitesse " -"lors de l'impression d'un pont ou d'un mur en surplomb qui a un degré de " +"lors de l'impression d'un pont ou d'une paroi en surplomb qui a un degré de " "surplomb important. Forcer le refroidissement pour les surplombs et le pont " "pour obtenir une meilleure qualité pour ces pièces." @@ -8270,17 +9040,17 @@ msgid "" "Improve shell precision by adjusting outer wall spacing. This also improves " "layer consistency." msgstr "" -"Améliorer la précision de la coque en ajustant l’espacement des murs " -"extérieurs. Cela améliore également la consistance des couches." +"Améliorer la précision de la coque en ajustant l’espacement des parois " +"extérieures. Cela améliore également la consistance des couches." msgid "Only one wall on top surfaces" -msgstr "Un seul mur sur les surfaces supérieures" +msgstr "Une seule paroi sur les surfaces supérieures" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " "pattern" msgstr "" -"N'utilisez qu'un seul mur sur les surfaces supérieures planes, afin de " +"N'utilisez qu'une seule paroi sur les surfaces supérieures planes, afin de " "donner plus d'espace au motif de remplissage supérieur." msgid "One wall threshold" @@ -8429,7 +9199,7 @@ msgstr "Externe" msgid "Speed of bridge and completely overhang wall" msgstr "" -"Il s'agit de la vitesse pour les ponts et les murs en surplomb à 100 %." +"Il s'agit de la vitesse pour les ponts et les parois en surplomb à 100 %." msgid "mm/s" msgstr "mm/s" @@ -8650,7 +9420,7 @@ msgid "End G-code" msgstr "G-code de fin" msgid "End G-code when finish the whole printing" -msgstr "Terminer le code G lorsque vous avez terminé toute l'impression" +msgstr "G-code de fin lorsque vous avez terminé toute l'impression" msgid "Between Object Gcode" msgstr "G-code entre objet" @@ -8663,7 +9433,7 @@ msgstr "" "lorsque vous imprimerez vos modèles objet par objet." msgid "End G-code when finish the printing of this filament" -msgstr "Fin du code G lorsque l'impression de ce filament est terminée" +msgstr "G-code de fin lorsque l'impression de ce filament est terminée" msgid "Ensure vertical shell thickness" msgstr "Assurer l'épaisseur verticale de la coque" @@ -8736,8 +9506,8 @@ msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " "than inner wall speed to get better quality." msgstr "" -"Vitesse du mur extérieur qui est le plus à l'extérieur et visible. Il est " -"utilisé pour être plus lent que la vitesse de la paroi interne pour obtenir " +"Vitesse de paroi extérieure qui est la plus à l'extérieur et visible. Elle " +"est généralement plus lente que la vitesse de la paroi interne pour obtenir " "une meilleure qualité." msgid "Small perimeters" @@ -8751,8 +9521,8 @@ msgid "" msgstr "" "Ce paramètre séparé affectera la vitesse des périmètres ayant un rayon <= " "petite longueur de périmètre (généralement des trous). S’il est exprimé en " -"pourcentage (par exemple : 80%), il sera calculé sur la vitesse du mur " -"extérieur ci-dessus. Mettre à zéro pour automatique." +"pourcentage (par exemple : 80%), il sera calculé sur la vitesse de la paroi " +"extérieure ci-dessus. Mettre à zéro pour automatique." msgid "Small perimeters threshold" msgstr "Seuil des petits périmètres" @@ -8793,22 +9563,22 @@ msgstr "" "Séquence d'impression des parois internes (intérieures) et externes " "(extérieures). \n" "\n" -"Utilisez Inner/Outer pour obtenir les meilleurs surplombs. En effet, les " -"parois en surplomb peuvent adhérer à un périmètre voisin lors de " +"Utilisez Intérieur/Extérieur pour obtenir les meilleurs surplombs. En effet, " +"les parois en surplomb peuvent adhérer à un périmètre voisin lors de " "l'impression. Toutefois, cette option entraîne une légère diminution de la " "qualité de la surface, car le périmètre externe est déformé par l'écrasement " "du périmètre interne.\n" "\n" -"Utilisez l’option Inner/Outer/Inner pour obtenir la meilleure finition de " -"surface externe et la meilleure précision dimensionnelle, car la paroi " -"externe est imprimée sans être dérangée par un périmètre interne. Cependant, " -"les performances de la paroi en surplomb seront réduites car il n’y a pas de " -"périmètre interne contre lequel imprimer la paroi externe. Cette option " -"nécessite un minimum de trois parois pour être efficace, car elle imprime " -"d’abord les parois internes à partir du troisième périmètre, puis le " -"périmètre externe et, enfin, le premier périmètre interne. Cette option est " -"recommandée par rapport à l’option Extérieur/intérieur dans la plupart des " -"cas. \n" +"Utilisez l’option Intérieur/Extérieur/Intérieur pour obtenir la meilleure " +"finition de surface externe et la meilleure précision dimensionnelle, car la " +"paroi externe est imprimée sans être dérangée par un périmètre interne. " +"Cependant, les performances de la paroi en surplomb seront réduites car il " +"n’y a pas de périmètre interne contre lequel imprimer la paroi externe. " +"Cette option nécessite un minimum de trois parois pour être efficace, car " +"elle imprime d’abord les parois internes à partir du troisième périmètre, " +"puis le périmètre externe et, enfin, le premier périmètre interne. Cette " +"option est recommandée par rapport à l’option Extérieur/intérieur dans la " +"plupart des cas. \n" "\n" "Utilisez l’option Extérieur/intérieur pour bénéficier de la même qualité de " "paroi externe et de la même précision dimensionnelle que l’option Intérieur/" @@ -8819,13 +9589,13 @@ msgstr "" " " msgid "Inner/Outer" -msgstr "Intérieur/extérieur" +msgstr "Intérieur/Extérieur" msgid "Outer/Inner" msgstr "Extérieur/intérieur" msgid "Inner/Outer/Inner" -msgstr "Intérieur/extérieur/intérieur" +msgstr "Intérieur/Extérieur/Intérieur" msgid "Print infill first" msgstr "Imprimer d’abord le remplissage" @@ -8852,7 +9622,7 @@ msgstr "" "travers les surfaces externes de la pièce." msgid "Height to rod" -msgstr "Hauteur à la tige" +msgstr "Hauteur jusqu’à la tige" msgid "" "Distance of the nozzle tip to the lower rod. Used for collision avoidance in " @@ -8899,7 +9669,7 @@ msgid "" msgstr "" "Le matériau peut avoir un changement volumétrique après avoir basculé entre " "l'état fondu et l'état cristallin. Ce paramètre modifie proportionnellement " -"tout le flux d'extrusion de ce filament dans le gcode. La plage de valeurs " +"tout le flux d'extrusion de ce filament dans le G-code. La plage de valeurs " "recommandée est comprise entre 0,95 et 1,05. Vous pouvez peut-être ajuster " "cette valeur pour obtenir une belle surface plane en cas de léger " "débordement ou sous-dépassement" @@ -9092,14 +9862,14 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "Après un changement d’outil, la position exacte du filament nouvellement " "chargé à l’intérieur de la buse peut ne pas être connue et la pression du " "filament n’est probablement pas encore stable. Avant de purger la tête " -"d’impression dans un remplissage ou un objet, Slic3r amorcera toujours cette " -"quantité de matériau dans la tour d’essuyage pour purger dans les " +"d’impression dans un remplissage ou un objet, Orca Slicer amorcera toujours " +"cette quantité de matériau dans la tour d’essuyage pour purger dans les " "remplissages ou objets de manière fiable." msgid "Speed of the last cooling move" @@ -9293,11 +10063,12 @@ msgstr "Longueur de l’ancrage de remplissage interne" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -9323,22 +10094,24 @@ msgstr "Longueur maximale de l’ancrage de remplissage" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" "Connecter une ligne de remplissage à un périmètre interne avec un court " "segment de périmètre supplémentaire. S’il est exprimé en pourcentage " "(exemple : 15 %), il est calculé sur la largeur de l’extrusion de " -"remplissage. Slic3r essaie de connecter deux lignes de remplissage proches à " -"un court segment de périmètre. Si aucun segment de périmètre plus court que " -"ce paramètre n’est trouvé, la ligne de remplissage est connectée à un " -"segment de périmètre sur un seul côté et la longueur du segment de périmètre " -"pris est limitée à infill_anchor, mais pas plus longue que ce paramètre.\n" +"remplissage. Orca Slicer essaie de connecter deux lignes de remplissage " +"proches à un court segment de périmètre. Si aucun segment de périmètre plus " +"court que ce paramètre n’est trouvé, la ligne de remplissage est connectée à " +"un segment de périmètre sur un seul côté et la longueur du segment de " +"périmètre pris est limitée à infill_anchor, mais pas plus longue que ce " +"paramètre.\n" "S’il est défini sur 0, l’ancien algorithme de connexion de remplissage sera " "utilisé, il devrait créer le même résultat qu’avec 1000 et 0." @@ -9364,8 +10137,8 @@ msgstr "" msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "" -"Accélération du mur extérieur : l'utilisation d'une valeur inférieure peut " -"améliorer la qualité." +"Accélération de la paroi extérieur : l'utilisation d'une valeur inférieure " +"peut améliorer la qualité." msgid "" "Acceleration of bridges. If the value is expressed as a percentage (e.g. " @@ -9489,7 +10262,7 @@ msgstr "" "l'utilisation de ce filament" msgid "Full fan speed at layer" -msgstr "Ventilateur à pleine vitesse pour la couche" +msgstr "Ventilateur à pleine vitesse à la couche" msgid "" "Fan speed will be ramped up linearly from zero at layer " @@ -9524,11 +10297,8 @@ msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" msgstr "" -"Gigue aléatoire lors de l'impression du mur, de sorte que la surface ait un " -"aspect rugueux. Ce réglage contrôle la position irrégulière" - -msgid "None" -msgstr "Aucun" +"Gigue aléatoire lors de l'impression de la paroi, de sorte que la surface " +"ait un aspect rugueux. Ce réglage contrôle la position irrégulière" msgid "Contour" msgstr "Contour" @@ -9547,7 +10317,7 @@ msgid "" "width" msgstr "" "La largeur à l'intérieur de laquelle jitter. Il est déconseillé d'être en " -"dessous de la largeur de la ligne du mur extérieur" +"dessous de la largeur de la ligne de la paroi extérieure" msgid "Fuzzy skin point distance" msgstr "Distance de point de la surface irrégulière" @@ -9600,7 +10370,7 @@ msgstr "" "ligne G-Code" msgid "Scan first layer" -msgstr "Numériser la première couche" +msgstr "Analyser la première couche" msgid "" "Enable this to enable the camera on printer to check the quality of first " @@ -9757,7 +10527,7 @@ msgid "G-code flavor" msgstr "Version du G-code" msgid "What kind of gcode the printer is compatible with" -msgstr "Avec quel type de gcode l'imprimante est-elle compatible" +msgstr "Avec quel type de G-code l'imprimante est-elle compatible" msgid "Klipper" msgstr "Klipper" @@ -9804,7 +10574,7 @@ msgid "" "reduce time. Wall is still printed with original layer height." msgstr "" "Combinez automatiquement le remplissage de plusieurs couches pour imprimer " -"ensemble afin de réduire le temps. Le mur est toujours imprimé avec la " +"ensemble afin de réduire le temps. La paroi est toujours imprimée avec la " "hauteur de couche d'origine." msgid "Filament to print internal sparse infill." @@ -9818,13 +10588,13 @@ msgstr "" "%, elle sera calculée sur le diamètre de la buse." msgid "Infill/Wall overlap" -msgstr "Chevauchement de remplissage/mur" +msgstr "Chevauchement de remplissage/paroi" msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " "The percentage value is relative to line width of sparse infill" msgstr "" -"La zone de remplissage est légèrement agrandie pour chevaucher le mur pour " +"La zone de remplissage est légèrement agrandie pour chevaucher la paroi pour " "une meilleure adhérence. La valeur en pourcentage est relative à la largeur " "de ligne du remplissage." @@ -9865,12 +10635,12 @@ msgid "" "Ironing is using small flow to print on same height of surface again to make " "flat surface more smooth. This setting controls which layer being ironed" msgstr "" -"Le repassage utilise un petit débit pour imprimer à nouveau sur la même " +"Le lissage utilise un petit débit pour imprimer à nouveau sur la même " "hauteur de surface pour rendre la surface plane plus lisse. Ce paramètre " "contrôle quelle couche est repassée" msgid "No ironing" -msgstr "Pas de repassage" +msgstr "Pas de lissage" msgid "Top surfaces" msgstr "Surfaces supérieures" @@ -9882,33 +10652,33 @@ msgid "All solid layer" msgstr "Toutes les couches solides" msgid "Ironing Pattern" -msgstr "Modèle de repassage" +msgstr "Modèle de lissage" msgid "The pattern that will be used when ironing" msgstr "Motif qui sera utilisé lors du lissage" msgid "Ironing flow" -msgstr "Flux de repassage" +msgstr "Flux de lissage" msgid "" "The amount of material to extrude during ironing. Relative to flow of normal " "layer height. Too high value results in overextrusion on the surface" msgstr "" -"La quantité de matière à extruder lors du repassage. Relatif au débit de la " +"La quantité de matière à extruder lors du lissage. Relatif au débit de la " "hauteur de couche normale. Une valeur trop élevée entraîne une surextrusion " "en surface" msgid "Ironing line spacing" -msgstr "Espacement des lignes de repassage" +msgstr "Espacement des lignes de lissage" msgid "The distance between the lines of ironing" -msgstr "La distance entre les lignes de repassage" +msgstr "La distance entre les lignes de lissage" msgid "Ironing speed" -msgstr "Vitesse de repassage" +msgstr "Vitesse de lissage" msgid "Print speed of ironing lines" -msgstr "Vitesse d'impression des lignes de repassage" +msgstr "Vitesse d'impression des lignes de lissage" msgid "Ironing angle" msgstr "Angle de lissage" @@ -9922,7 +10692,8 @@ msgstr "" msgid "This gcode part is inserted at every layer change after lift z" msgstr "" -"Cette partie gcode est insérée à chaque changement de couche après lift z" +"Cette partie G-code est insérée à chaque changement de couche après le " +"levage du Z" msgid "Supports silent mode" msgstr "Prend en charge le mode silencieux" @@ -9934,6 +10705,20 @@ msgstr "" "Si la machine prend en charge le mode silencieux dans lequel la machine " "utilise une accélération plus faible pour imprimer" +msgid "Emit limits to G-code" +msgstr "Emission des limites vers le G-code" + +msgid "Machine limits" +msgstr "Limites de la machine" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" +"Si cette option est activée, les limites de la machine seront émises dans un " +"fichier G-code.\n" +"Cette option sera ignorée si la version du G-code est définie sur Klipper." + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9957,20 +10742,17 @@ msgstr "Vitesse maximale Z" msgid "Maximum speed E" msgstr "Vitesse maximale E" -msgid "Machine limits" -msgstr "Limites de la machine" - msgid "Maximum X speed" -msgstr "Vitesse maximale X" +msgstr "Vitesse en X maximale" msgid "Maximum Y speed" -msgstr "Vitesse Y maximale" +msgstr "Vitesse en Y maximale" msgid "Maximum Z speed" -msgstr "Vitesse Z maximale" +msgstr "Vitesse en Z maximale" msgid "Maximum E speed" -msgstr "Vitesse E maximale" +msgstr "Vitesse en E maximale" msgid "Maximum acceleration X" msgstr "Accélérations maximum X" @@ -9997,28 +10779,28 @@ msgid "Maximum acceleration of the E axis" msgstr "Accélération maximum de l'axe E" msgid "Maximum jerk X" -msgstr "Mouvement brusque maximum X" +msgstr "Jerk maximum en X" msgid "Maximum jerk Y" -msgstr "Mouvement brusque maximum Y" +msgstr "Jerk maximum en Y" msgid "Maximum jerk Z" -msgstr "Mouvement brusque maximum Z" +msgstr "Jerk maximum en Z" msgid "Maximum jerk E" -msgstr "Mouvement brusque maximum E" +msgstr "Jerk maximum en E" msgid "Maximum jerk of the X axis" -msgstr "Mouvement brusque maximum de l'axe X" +msgstr "Jerk maximum de l'axe X" msgid "Maximum jerk of the Y axis" -msgstr "Mouvement brusque maximum de l'axe Y" +msgstr "Jerk maximum de l'axe Y" msgid "Maximum jerk of the Z axis" -msgstr "Mouvement brusque maximum de l'axe Z" +msgstr "Jerk maximum de l'axe Z" msgid "Maximum jerk of the E axis" -msgstr "Mouvement brusque maximum de l'axe E" +msgstr "Jerk maximum de l'axe E" msgid "Minimum speed for extruding" msgstr "Vitesse minimale d'extrusion" @@ -10149,7 +10931,7 @@ msgid "" "Allowed values: 1-5" msgstr "" "Une valeur inférieure entraîne des transitions du taux d’extrusion plus " -"douces. Cependant, cela entraîne un fichier gcode beaucoup plus volumineux " +"douces. Cependant, cela entraîne un fichier G-code beaucoup plus volumineux " "et davantage d’instructions à traiter par l’imprimante.\n" "\n" "La valeur 3 par défaut fonctionne bien dans la plupart des cas. Si votre " @@ -10202,7 +10984,7 @@ msgid "Nozzle diameter" msgstr "Diamètre de la buse" msgid "Diameter of nozzle" -msgstr "Diamètre de buse" +msgstr "Diamètre de la buse" msgid "Configuration notes" msgstr "Notes de la configuration" @@ -10218,11 +11000,11 @@ msgid "Host Type" msgstr "Type d'hôte" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r peut téléverser des fichiers G-code sur une imprimante hôte. Ce champ " -"doit contenir le type d'hôte." +"Orca Slicer peut téléverser des fichiers G-code sur une imprimante hôte. Ce " +"champ doit contenir le type d'hôte." msgid "Nozzle volume" msgstr "Volume de la buse" @@ -10302,9 +11084,9 @@ msgid "" "oozing can't been seen. This can reduce times of retraction for complex " "model and save printing time, but make slicing and G-code generating slower" msgstr "" -"Ne pas effectuer de rétractation lors de déplacement en zone de remplissage " +"Ne pas effectuer de rétraction lors de déplacement en zone de remplissage " "car même si l’extrudeur suinte, les coulures ne seraient pas visibles. Cela " -"peut réduire les rétractations pour les modèles complexes et économiser du " +"peut réduire les rétractions pour les modèles complexes et économiser du " "temps d’impression, mais ralentit le tranchage et la génération du G-code." msgid "Enable" @@ -10352,7 +11134,7 @@ msgid "mm²" msgstr "mm²" msgid "Detect overhang wall" -msgstr "Détecter un mur en surplomb" +msgstr "Détecter une paroi en surplomb" #, c-format, boost-format msgid "" @@ -10374,20 +11156,44 @@ msgid "Speed of inner wall" msgstr "Vitesse de la paroi intérieure" msgid "Number of walls of every layer" -msgstr "Nombre de murs de chaque couche" +msgstr "Nombre de parois de chaque couche" + +msgid "Alternate extra wall" +msgstr "Paroi supplémentaire alternée" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" +"Ce paramètre ajoute une paroi supplémentaire à chaque couche. De cette " +"manière, le remplissage est coincé verticalement entre les parois, ce qui " +"permet d’obtenir des impressions plus solides. \n" +"\n" +"Lorsque cette option est activée, l’option « assurer l’épaisseur verticale " +"de la coque » doit être désactivée. \n" +"\n" +"Il n’est pas recommandé d’utiliser le remplissage par éclairs avec cette " +"option, car il y a peu de remplissage pour ancrer les périmètres " +"supplémentaires." msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" -"Si vous souhaitez traiter le code G de sortie via des scripts personnalisés, " +"Si vous souhaitez traiter le G-code de sortie via des scripts personnalisés, " "indiquez simplement leurs chemins absolus ici. Séparez plusieurs scripts par " "un point-virgule. Les scripts recevront le chemin absolu vers le fichier G-" "code comme premier argument, et ils peuvent accéder aux paramètres de " -"configuration Slic3r en lisant les variables d’environnement." +"configuration Orca Slicer en lisant les variables d’environnement." msgid "Printer notes" msgstr "Notes de l’mprimante" @@ -10396,13 +11202,13 @@ msgid "You can put your notes regarding the printer here." msgstr "Vous pouvez mettre vos notes concernant l’imprimante ici." msgid "Raft contact Z distance" -msgstr "Distance Z de contact du raft" +msgstr "Distance Z de contact du radeau" msgid "Z gap between object and raft. Ignored for soluble interface" msgstr "Écart en Z entre l'objet et le radeau. Ignoré pour l'interface soluble" msgid "Raft expansion" -msgstr "Agrandissement du raft" +msgstr "Agrandissement du radeau" msgid "Expand all raft layers in XY plane" msgstr "Développer toutes les couches de radeau dans le plan XY" @@ -10411,7 +11217,7 @@ msgid "Initial layer density" msgstr "Densité de couche initiale" msgid "Density of the first raft or support layer" -msgstr "Densité du premier radier ou couche de support" +msgstr "Densité du premier radeau ou couche de support" msgid "Initial layer expansion" msgstr "Extension de la couche initiale" @@ -10419,7 +11225,7 @@ msgstr "Extension de la couche initiale" msgid "Expand the first raft or support layer to improve bed plate adhesion" msgstr "" "Développez le premier radeau ou couche de support pour améliorer l'adhérence " -"de la plaque d'assise" +"du plateau" msgid "Raft layers" msgstr "Couches du radeau" @@ -10436,8 +11242,8 @@ msgid "" "much points and gcode lines in gcode file. Smaller value means higher " "resolution and more time to slice" msgstr "" -"Le chemin du code G est généré après avoir simplifié le contour du modèle " -"pour éviter trop de points et de lignes gcode dans le fichier gcode. Une " +"Le chemin du G-code est généré après avoir simplifié le contour du modèle " +"pour éviter trop de points et de lignes G-code dans le fichier G-code. Une " "valeur plus petite signifie une résolution plus élevée et plus de temps pour " "trancher" @@ -10452,7 +11258,7 @@ msgstr "" "à ce seuil" msgid "Retract amount before wipe" -msgstr "Quantité de rétractation avant essuyage" +msgstr "Quantité de rétraction avant essuyage" msgid "" "The length of fast retraction before wipe, relative to retraction length" @@ -10464,13 +11270,10 @@ msgid "Retract when change layer" msgstr "Rétracter lors de changement de couche" msgid "Force a retraction when changes layer" -msgstr "Cela force une rétractation sur les changements de couche." - -msgid "Length" -msgstr "Longueur" +msgstr "Cela force une rétraction sur les changements de couche." msgid "Retraction Length" -msgstr "Longueur de Rétractation" +msgstr "Longueur de Rétraction" msgid "" "Some amount of material in extruder is pulled back to avoid ooze during long " @@ -10481,7 +11284,7 @@ msgstr "" "rétraction" msgid "Z hop when retract" -msgstr "Z saut lors de la rétraction" +msgstr "Décalage du Z lors de la rétraction" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -10584,10 +11387,10 @@ msgstr "" "poussera cette quantité supplémentaire de filament." msgid "Retraction Speed" -msgstr "Vitesse de Rétractation" +msgstr "Vitesse de Rétraction" msgid "Speed of retractions" -msgstr "Vitesse de rétractation" +msgstr "Vitesse de rétraction" msgid "Deretraction Speed" msgstr "Vitesse de réinsertion" @@ -10620,7 +11423,8 @@ msgid "Seam position" msgstr "Position de la couture" msgid "The start position to print each part of outer wall" -msgstr "La position de départ pour imprimer chaque partie du mur extérieur" +msgstr "" +"La position de départ pour imprimer chaque partie de la paroi extérieure" msgid "Nearest" msgstr "La plus proche" @@ -10682,6 +11486,21 @@ msgstr "" "fermée, un petit mouvement vers l’intérieur est exécuté avant que la buse ne " "quitte la boucle." +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "Vitesse d’essuyage" @@ -10697,7 +11516,7 @@ msgstr "" "déplacement ci-dessus. La valeur par défaut de ce paramètre est 80%" msgid "Skirt distance" -msgstr "Distance jupe" +msgstr "Distance de la jupe" msgid "Distance from skirt to brim or object" msgstr "Distance de la jupe au bord ou à l'objet" @@ -10709,7 +11528,7 @@ msgid "How many layers of skirt. Usually only one layer" msgstr "Nombre de couches de jupe, généralement une seule." msgid "Skirt loops" -msgstr "Boucles de jupe" +msgstr "Boucles de la jupe" msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "Nombre de boucles pour la jupe. Zéro signifie désactiver la jupe" @@ -10726,7 +11545,7 @@ msgid "" "The printing speed in exported gcode will be slowed down, when the estimated " "layer time is shorter than this value, to get better cooling for these layers" msgstr "" -"La vitesse d'impression dans le gcode exporté sera ralentie, lorsque le " +"La vitesse d'impression dans le G-code exporté sera ralentie, lorsque le " "temps de couche estimé est plus court que cette valeur, pour obtenir un " "meilleur refroidissement pour ces couches" @@ -10812,13 +11631,13 @@ msgid "Temperature variation" msgstr "Variation de température" msgid "Start G-code" -msgstr "G-code de début" +msgstr "G-code de démarrage" msgid "Start G-code when start the whole printing" -msgstr "Démarrer le code G lors du démarrage de l'ensemble de l'impression" +msgstr "G-code de démarrage lors du démarrage de l'ensemble de l'impression" msgid "Start G-code when start the printing of this filament" -msgstr "Démarrer le code G au démarrage de l'impression de ce filament" +msgstr "G-code de démarrage au démarrage de l'impression de ce filament" msgid "Single Extruder Multi Material" msgstr "Multi-matériaux pour extrudeur unique" @@ -10906,7 +11725,7 @@ msgid "Even-odd" msgstr "Pair-impair" msgid "Close holes" -msgstr "Fermez les trous" +msgstr "Combler les trous" msgid "Z offset" msgstr "Décalage Z" @@ -11250,7 +12069,7 @@ msgstr "" "supports arborescents sera automatiquement calculée" msgid "Tree support brim width" -msgstr "Largeur de bordure du support de l'arbre" +msgstr "Largeur de bordure du support arborescent" msgid "Distance from tree branch to the outermost brim line" msgstr "" @@ -11287,7 +12106,7 @@ msgstr "" "stabilité des supports organiques." msgid "Branch Diameter with double walls" -msgstr "Diamètre des branches à double paroi" +msgstr "Diamètre des branches à double parois" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" msgid "" @@ -11300,7 +12119,7 @@ msgstr "" "stabilité. Définissez cette valeur sur zéro pour éviter la double paroi." msgid "Support wall loops" -msgstr "Boucles de support de paroi" +msgstr "Boucles de paroi de support" msgid "This setting specify the count of walls around support" msgstr "Ce paramètre spécifie le nombre de parois autour du support" @@ -11352,21 +12171,21 @@ msgid "Nozzle temperature for layers after the initial one" msgstr "Température de la buse pour les couches après la première" msgid "Detect thin wall" -msgstr "Détecter les parois minces" +msgstr "Détecter les parois fines" msgid "" "Detect thin wall which can't contain two line width. And use single line to " "print. Maybe printed not very well, because it's not closed loop" msgstr "" -"Détecte les parois minces qui ne peuvent pas contenir deux largeurs de " -"ligne. Et utilisez une seule ligne pour imprimer. Peut-être pas très bien " +"Détecte les parois fines qui ne peuvent pas contenir deux largeurs de ligne. " +"Et utilisez une seule ligne pour imprimer. Peut ne pas être très bien " "imprimé, car ce n'est pas en boucle fermée" msgid "" "This gcode is inserted when change filament, including T command to trigger " "tool change" msgstr "" -"Ce gcode est inséré lors du changement de filament, y compris la commande T " +"Ce G-code est inséré lors du changement de filament, y compris la commande T " "pour déclencher le changement d'outil" msgid "This gcode is inserted when the extrusion role is changed" @@ -11396,7 +12215,7 @@ msgstr "" "coque supérieure seront augmentées" msgid "Top solid layers" -msgstr "Couches supérieures solides" +msgstr "Couches solides supérieures" msgid "Top shell thickness" msgstr "Épaisseur de la coque supérieure" @@ -11444,7 +12263,7 @@ msgid "" "any excess retraction before the wipe, else it will be performed after." msgstr "" "Décrire la durée pendant laquelle la buse se déplacera le long de la " -"dernière trajectoire lors de la rétractation. \n" +"dernière trajectoire lors de la rétraction. \n" "\n" "En fonction de la durée de l’opération de nettoyage, de la vitesse et de la " "longueur des réglages de rétraction de l’extrudeuse/filament, un mouvement " @@ -11482,9 +12301,6 @@ msgstr "Premier volume" msgid "The volume of material to prime extruder on tower." msgstr "Le volume de matériau à amorcer l'extrudeuse sur la tour." -msgid "Width" -msgstr "Largeur" - msgid "Width of prime tower" msgstr "Largeur de la tour de nettoyage." @@ -11541,9 +12357,9 @@ msgid "" msgstr "" "La purge après le changement de filament sera effectuée à l'intérieur des " "matériaux de remplissage des objets. Cela peut réduire la quantité de " -"déchets et le temps d'impression. Si les murs sont imprimés avec un filament " -"transparent, le remplissage de couleurs mélangées sera visible. Cela ne " -"prendra effet que si la tour de nettoyage est activée." +"déchets et le temps d'impression. Si les parois sont imprimées avec un " +"filament transparent, le remplissage de couleurs mélangées sera visible. " +"Cela ne prendra effet que si la tour de nettoyage est activée." msgid "" "Purging after filament change will be done inside objects' support. This may " @@ -11634,7 +12450,7 @@ msgid "Polyhole twist" msgstr "Torsion des trous polygones" msgid "Rotate the polyhole every layer." -msgstr "Faites pivoter le polyhole à chaque couche." +msgstr "Faites pivoter le trou polygone à chaque couche." msgid "G-code thumbnails" msgstr "Vignette G-code" @@ -11662,23 +12478,18 @@ msgstr "Utiliser l’extrusion relative" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" -"L’extrusion relative est recommandée lors de l’utilisation de l’option " -"\"label_objects\". Certains extrudeurs fonctionnent mieux avec cette option " -"décochée (mode d’extrusion absolu). La tour d’essuyage n’est compatible " -"qu’avec le mode relatif. Il est toujours activé sur les imprimantes " -"BambuLab. La valeur par défaut est cochée" msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " "variable extrusion width" msgstr "" -"Le générateur de murs classique produit des murs avec une largeur " +"Le générateur de parois classique produit des parois avec une largeur " "d'extrusion constante, les zones très fines seront remplies. Le générateur " -"Arachne produit des murs avec une largeur d'extrusion variable." +"Arachne produit des parois avec une largeur d'extrusion variable." msgid "Classic" msgstr "Classique" @@ -11687,20 +12498,20 @@ msgid "Arachne" msgstr "Arachné" msgid "Wall transition length" -msgstr "Longueur de la transition murale" +msgstr "Longueur de la paroi de transition" msgid "" "When transitioning between different numbers of walls as the part becomes " "thinner, a certain amount of space is allotted to split or join the wall " "segments. It's expressed as a percentage over nozzle diameter" msgstr "" -"Lorsque vous passez d'un nombre différent de murs à un autre lorsque la " +"Lorsque vous passez d'un nombre différent de parois à un autre lorsque la " "pièce s'amincit, un certain espace est alloué pour séparer ou joindre les " -"segments du mur. Il est exprimé en pourcentage par rapport au diamètre de la " +"segments de la paroi. Exprimé en pourcentage par rapport au diamètre de la " "buse." msgid "Wall transitioning filter margin" -msgstr "Marge du filtre de transition de mur" +msgstr "Marge du filtre de transition de paroi" msgid "" "Prevent transitioning back and forth between one extra wall and one less. " @@ -11711,9 +12522,9 @@ msgid "" "variation can lead to under- or overextrusion problems. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Empêchez les allers-retours entre un mur supplémentaire et un mur de moins. " -"Cette marge étend la plage de largeurs d'extrusion qui suit jusqu'à [Largeur " -"de paroi minimale - marge, 2* Largeur de paroi minimale + marge]. " +"Empêchez les allers-retours entre une paroi supplémentaire et une paroi de " +"moins. Cette marge étend la plage de largeurs d'extrusion qui suit jusqu'à " +"[Largeur de paroi minimale - marge, 2* Largeur de paroi minimale + marge]. " "L'augmentation de cette marge réduit le nombre de transitions, ce qui réduit " "le nombre de démarrages/arrêts d'extrusion et le temps de trajet. Cependant, " "une variation importante de la largeur d'extrusion peut entraîner des " @@ -11721,7 +12532,7 @@ msgstr "" "pourcentage par rapport au diamètre de la buse" msgid "Wall transitioning threshold angle" -msgstr "Angle du seuil de transition du mur" +msgstr "Angle du seuil de transition de la paroi" msgid "" "When to create transitions between even and odd numbers of walls. A wedge " @@ -11730,23 +12541,23 @@ msgid "" "this setting reduces the number and length of these center walls, but may " "leave gaps or overextrude" msgstr "" -"Quand créer des transitions entre les nombres pairs et impairs de murs. Une " -"forme cunéiforme dont l'angle est supérieur à ce paramètre n'aura pas de " -"transitions et aucun mur ne sera imprimé au centre pour remplir l'espace " +"Quand créer des transitions entre les nombres pairs et impairs de parois. " +"Une forme cunéiforme dont l'angle est supérieur à ce paramètre n'aura pas de " +"transitions et aucune paroi ne sera imprimé au centre pour remplir l'espace " "restant. En réduisant ce paramètre, vous réduisez le nombre et la longueur " -"de ces murs centraux, mais vous risquez de laisser des vides ou de " -"surextruder les murs." +"de ces parois centrales, mais vous risquez de laisser des vides ou de " +"surextruder les parois." msgid "Wall distribution count" -msgstr "Nombre de distributions murales" +msgstr "Nombre de parois distribuées" msgid "" "The number of walls, counted from the center, over which the variation needs " "to be spread. Lower values mean that the outer walls don't change in width" msgstr "" -"Nombre de murs, comptés à partir du centre, sur lesquels la variation doit " -"être répartie. Des valeurs plus faibles signifient que la largeur des parois " -"extérieures ne change pas" +"Nombre de parois, comptées à partir du centre, sur lesquelles la variation " +"doit être répartie. Des valeurs plus faibles signifient que la largeur des " +"parois extérieures ne change pas" msgid "Minimum feature size" msgstr "Taille minimale de l'élément" @@ -11760,8 +12571,8 @@ msgstr "" "Épaisseur minimale des éléments fins. Les caractéristiques du modèle qui " "sont plus fines que cette valeur ne seront pas imprimées, tandis que les " "entités plus épaisses que la taille minimale seront élargies jusqu'à la " -"largeur de paroi minimale. Il est exprimé en pourcentage par rapport au " -"diamètre de la buse" +"largeur de paroi minimale. Exprimée en pourcentage par rapport au diamètre " +"de la buse" msgid "First layer minimum wall width" msgstr "Largeur minimale de la paroi de la première couche" @@ -11776,7 +12587,7 @@ msgstr "" "améliorer l’adhérence." msgid "Minimum wall width" -msgstr "Largeur minimale du mur" +msgstr "Largeur minimale de la paroi" msgid "" "Width of the wall that will replace thin features (according to the Minimum " @@ -11784,10 +12595,11 @@ msgid "" "thickness of the feature, the wall will become as thick as the feature " "itself. It's expressed as a percentage over nozzle diameter" msgstr "" -"Largeur du mur qui remplacera les éléments fins (selon la taille minimale " -"des éléments) du modèle. Si la largeur minimale du mur est inférieure à " -"l'épaisseur de l'élément, le mur deviendra aussi épais que l'élément lui-" -"même. Il est exprimé en pourcentage par rapport au diamètre de la buse" +"Largeur de la paroi qui remplacera les éléments fins (selon la taille " +"minimale des éléments) du modèle. Si la largeur minimale de la paroi est " +"inférieure à l'épaisseur de l'élément, la paroi deviendra aussi épaisse que " +"l'élément lui-même. Elle est exprimée en pourcentage par rapport au diamètre " +"de la buse" msgid "Detect narrow internal solid infill" msgstr "Détecter un remplissage solide interne étroit" @@ -11874,7 +12686,7 @@ msgid "Error in zip archive" msgstr "Erreur dans l'archive zip" msgid "Generating walls" -msgstr "Génération de murs" +msgstr "Génération de parois" msgid "Generating infill regions" msgstr "Génération de régions de remplissage" @@ -12959,7 +13771,7 @@ msgstr "" "des espaces. Veuillez les saisir à nouveau." msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "Le vendeur ne peut pas être un numéro. Veuillez le saisir à nouveau." msgid "" "You have not selected a printer or preset yet. Please select at least one." @@ -13002,9 +13814,6 @@ msgstr "Créer depuis un modèle" msgid "Create Based on Current Printer" msgstr "Créer en fonction de l’imprimante actuelle" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "Importer un préréglage" @@ -13167,7 +13976,8 @@ msgstr "" "personnalisée sont des espaces. Veuillez les saisir à nouveau." msgid "Please check bed printable shape and origin input." -msgstr "Veuillez vérifier la forme imprimable du lit et l’entrée de l’origine." +msgstr "" +"Veuillez vérifier la forme imprimable du plateau et l’entrée de l’origine." msgid "" "You have not yet selected the printer to replace the nozzle, please choose." @@ -13210,11 +14020,11 @@ msgstr "Réglage de l’imprimante" msgid "Export Configs" msgstr "Exporter les configurations" -msgid "Printer config bundle(.bbscfg)" -msgstr "Paquet de configuration de l’imprimante (.bbscfg)" +msgid "Printer config bundle(.orca_printer)" +msgstr "Paquet de configuration de l’imprimante (.orca_printer)" -msgid "Filament bundle(.bbsflmt)" -msgstr "Paquet de filaments (.bbsflmt)" +msgid "Filament bundle(.orca_filament)" +msgstr "Paquet de filaments (.orca_filament)" msgid "Printer presets(.zip)" msgstr "Préréglages d’imprimante(.zip)" @@ -13256,7 +14066,7 @@ msgstr "" "modifier le nom après la création." msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" "Imprimante et tous les préréglages de filament et de processus qui " @@ -13647,6 +14457,19 @@ msgstr "" "Saviez-vous qu’OrcaSlicer peut prendre en charge la filtration de l’air/le " "ventilateur d’extraction ?" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -13657,6 +14480,13 @@ msgstr "" "Saviez-vous qu’Orca Slicer offre une large gamme de raccourcis clavier et " "d’opérations sur les scènes 3D." +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -13953,7 +14783,64 @@ msgstr "" "Éviter la déformation\n" "Saviez-vous que lors de l’impression de matériaux susceptibles de se " "déformer, tels que l’ABS, une augmentation appropriée de la température du " -"lit chauffant peut réduire la probabilité de déformation." +"plateau chauffant peut réduire la probabilité de déformation." + +#~ msgid "" +#~ "Relative extrusion is recommended when using \"label_objects\" option." +#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "mode). Wipe tower is only compatible with relative mode. It is always " +#~ "enabled on BambuLab printers. Default is checked" +#~ msgstr "" +#~ "L’extrusion relative est recommandée lors de l’utilisation de l’option " +#~ "\"label_objects\". Certains extrudeurs fonctionnent mieux avec cette " +#~ "option décochée (mode d’extrusion absolu). La tour d’essuyage n’est " +#~ "compatible qu’avec le mode relatif. Il est toujours activé sur les " +#~ "imprimantes BambuLab. La valeur par défaut est cochée" + +#~ msgid "Movement:" +#~ msgstr "Mouvement:" + +#~ msgid "Movement" +#~ msgstr "Mouvement" + +#~ msgid "Auto Segment" +#~ msgstr "Segmentation automatique" + +#~ msgid "Depth ratio" +#~ msgstr "Rapport de profondeur" + +#~ msgid "Prizm" +#~ msgstr "Prisme" + +#~ msgid "connector is out of cut contour" +#~ msgstr "connecteur est hors du contour de la coupe" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "connecteurs sont hors du contour de la coupe" + +#~ msgid "connector is out of object" +#~ msgstr "connecteur est hors de l'objet" + +#~ msgid "connectors is out of object" +#~ msgstr "connecteurs sont hors de l'objet" + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "État non valide. \n" +#~ "Aucune pièce n'est sélectionnée pour être conservée après la découpe" + +#~ msgid "Recalculate" +#~ msgstr "Recalculer" + +#~ msgid "" +#~ "Orca recalculates your flushing volumes everytime the filament colors " +#~ "change. You can change this behavior in Preferences." +#~ msgstr "" +#~ "Orca recalcule vos volumes de purge à chaque fois que les couleurs des " +#~ "filaments changent. Vous pouvez modifier ce comportement dans les " +#~ "préférences." #~ msgid "" #~ "The printer timed out while receiving a print job. Please check if the " @@ -14001,18 +14888,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Rapide" -#~ msgid "Auto-Calc" -#~ msgstr "Auto-Calc" - -#~ msgid "unloaded" -#~ msgstr "déchargé" - -#~ msgid "loaded" -#~ msgstr "chargé" - -#~ msgid "Filament #" -#~ msgstr "Filament #" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 99c348a0a7..e83a42c8b1 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -212,6 +212,9 @@ msgstr "mm" msgid "Position" msgstr "Pozíció" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Forgatás" @@ -251,6 +254,7 @@ msgstr "Világkoordináták" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Méret" @@ -260,6 +264,113 @@ msgstr "%" msgid "uniform scale" msgstr "egységes méretarány" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "Auto" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "Plug" + +msgid "Dowel" +msgstr "Dowel" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Frustum" + +msgid "Square" +msgstr "Square" + +msgid "Hexagon" +msgstr "Hexagon" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "Place on cut" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "Connectors" + +msgid "Type" +msgstr "Típus" + +msgid "Style" +msgstr "Stílus" + +msgid "Shape" +msgstr "Forma" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "Szélesség" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "Tárgy" + +msgid "Object" +msgstr "Objektum" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Tolerance" + +msgid "Drag" +msgstr "Drag" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Left click" @@ -272,9 +383,6 @@ msgstr "Right click" msgid "Remove connector" msgstr "Remove connector" -msgid "Drag" -msgstr "Drag" - msgid "Move connector" msgstr "Move connector" @@ -290,23 +398,51 @@ msgstr "Select all connectors" msgid "Cut" msgstr "Vágás" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "Modell javítása" +msgid "Remove connectors" +msgstr "Remove connectors" -msgid "Connector" -msgstr "Connector" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "Mozgatás:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "Mozgás" +msgid "Space" +msgstr "Szóköz" -msgid "Height" -msgstr "Magasság" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Confirm connectors" + +msgid "Cancel" +msgstr "Mégse" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "Visszaállítás" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Edit connectors" @@ -314,6 +450,12 @@ msgstr "Edit connectors" msgid "Add connectors" msgstr "Add connectors" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Upper part" @@ -323,9 +465,6 @@ msgstr "Lower part" msgid "Keep" msgstr "Keep" -msgid "Place on cut" -msgstr "Place on cut" - msgid "Flip" msgstr "Flip" @@ -335,87 +474,56 @@ msgstr "After cut" msgid "Cut to parts" msgstr "Részekre darabolás" -msgid "Auto Segment" -msgstr "Automatikus szegmentálás" - msgid "Perform cut" msgstr "Vágás" -msgid "Reset" -msgstr "Visszaállítás" - -msgid "Connectors" -msgstr "Connectors" - -msgid "Type" -msgstr "Típus" - -msgid "Style" -msgstr "Stílus" - -msgid "Shape" -msgstr "Forma" - -msgid "Depth ratio" -msgstr "Depth ratio" - -msgid "Remove connectors" -msgstr "Remove connectors" - -msgid "Prizm" -msgstr "Prizm" - -msgid "Frustum" -msgstr "Frustum" - -msgid "Square" -msgstr "Square" - -msgid "Hexagon" -msgstr "Hexagon" - -msgid "Confirm connectors" -msgstr "Confirm connectors" - -msgid "Cancel" -msgstr "Mégse" - msgid "Warning" msgstr "Figyelmeztetés" msgid "Invalid connectors detected" msgstr "Invalid connectors detected" -msgid "connector is out of cut contour" -msgstr "connector is out of cut contour" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" -msgid "connectors are out of cut contour" -msgstr "connectors are out of cut contour" - -msgid "connector is out of object" -msgstr "connector is out of object" - -msgid "connectors is out of object" -msgstr "Connectors must be on object surface." +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" msgid "Some connectors are overlapped" msgstr "Some connectors are overlapped" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"Invalid state. \n" -"No one part is selected to keep after cut" -msgid "Plug" -msgstr "Plug" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "Dowel" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "Tolerance" +msgid "Connector" +msgstr "Connector" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "Modell javítása" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Háló neve" @@ -514,6 +622,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Betűtípus" @@ -549,6 +659,655 @@ msgstr "Rotate text" msgid "Text shape" msgstr "Szöveg alakja" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "Haladó" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "Módosító" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "Betöltés" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Magasság" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Tükrözés" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "Törlés" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "Sehol" + +msgid "Diameter" +msgstr "Átmérő" + +msgid "Length" +msgstr "Hossz" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "Másolás a vágólapra" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -727,9 +1486,6 @@ msgstr "" msgid "Sync user presets" msgstr "" -msgid "Loading" -msgstr "Betöltés" - msgid "Loading user preset" msgstr "Felhasználói beállítás betöltése" @@ -760,9 +1516,6 @@ msgstr "Válassz egy G-code fájlt:" msgid "Import File" msgstr "Import File" -msgid "Delete" -msgstr "Törlés" - msgid "Choose files" msgstr "Fájlok kiválasztása" @@ -833,9 +1586,6 @@ msgstr "Törlés opciók" msgid "Bed adhension" msgstr "Asztalra tapadás" -msgid "Advanced" -msgstr "Haladó" - msgid "Add part" msgstr "Tárgy hozzáadása" @@ -887,6 +1637,21 @@ msgstr "Kiválasztott objektum törlése" msgid "Load..." msgstr "Betöltés..." +msgid "Cube" +msgstr "Kocka" + +msgid "Cylinder" +msgstr "Henger" + +msgid "Cone" +msgstr "Kúp" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "" @@ -899,19 +1664,10 @@ msgstr "" msgid "Voron Cube" msgstr "" -msgid "Cube" -msgstr "Kocka" - -msgid "Cylinder" -msgstr "Henger" - -msgid "Cone" -msgstr "Kúp" - -msgid "Text" +msgid "Stanford Bunny" msgstr "" -msgid "SVG" +msgid "Text" msgstr "" msgid "Height range Modifier" @@ -1042,9 +1798,6 @@ msgstr "Z-tengely mentén" msgid "Mirror along the Z axis" msgstr "Tükrözés a Z-tengely mentén" -msgid "Mirror" -msgstr "Tükrözés" - msgid "Mirror object" msgstr "Objektum tükrözése" @@ -1066,6 +1819,9 @@ msgstr "Invalidate cut info" msgid "Add Primitive" msgstr "Primitív hozzáadása" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "Címkék megjelenítése" @@ -1317,12 +2073,6 @@ msgstr "Height ranges" msgid "Settings for height range" msgstr "Settings for height range" -msgid "Object" -msgstr "Objektum" - -msgid "Part" -msgstr "Tárgy" - msgid "Layer" msgstr "Réteg" @@ -1348,9 +2098,6 @@ msgstr "Az utolsó tömör objektumrész típusa nem módosítható." msgid "Negative Part" msgstr "Negatív tárgy" -msgid "Modifier" -msgstr "Módosító" - msgid "Support Blocker" msgstr "Támasz blokkoló" @@ -1426,9 +2173,6 @@ msgstr "Kitöltési sűrűség (%)" msgid "Auto Brim" msgstr "Automatikus perem" -msgid "Auto" -msgstr "Auto" - msgid "Mouse ear" msgstr "" @@ -1504,9 +2248,6 @@ msgstr "Egyedi G-kód" msgid "Enter Custom G-code used on current layer:" msgstr "Add meg az aktuális rétegnél használandó egyedi G-kódot:" -msgid "OK" -msgstr "OK" - msgid "Jump to Layer" msgstr "Ugrás a rétegre" @@ -1561,15 +2302,15 @@ msgstr "Nincs nyomtató" msgid "..." msgstr "" -msgid "Failed to connect to the server" -msgstr "Nem sikerült csatlakozni a szerverhez" - msgid "Check the status of current system services" msgstr "Check the status of current system services" msgid "code" msgstr "code" +msgid "Failed to connect to the server" +msgstr "Nem sikerült csatlakozni a szerverhez" + msgid "Failed to connect to cloud service" msgstr "Failed to connect to cloud service" @@ -2404,9 +3145,6 @@ msgstr "" msgid "Origin" msgstr "Origó" -msgid "Diameter" -msgstr "Átmérő" - msgid "Size in X and Y of the rectangular plate." msgstr "A téglalap alakú tálca mérete X-ben és Y-ban." @@ -2574,6 +3312,18 @@ msgstr "" "spirál mód használatát\n" "Nem - Ne használja a spirál módot ez alkalommal" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2944,6 +3694,9 @@ msgstr "Idő" msgid "Percent" msgstr "Százalék" +msgid "Used filament" +msgstr "Használt filament" + msgid "Layer Height (mm)" msgstr "Rétegmagasság (mm)" @@ -2962,9 +3715,6 @@ msgstr "Hőmérséklet (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Térfogatáramlás (mm³/s)" -msgid "Used filament" -msgstr "Használt filament" - msgid "Travel" msgstr "Mozgás" @@ -5127,6 +5877,9 @@ msgstr "Régió" msgid "Stealth Mode" msgstr "" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "Metrikus" @@ -6011,6 +6764,11 @@ msgstr "" "0 top z distance, 0 interface spacing, concentric pattern and disable " "independent support layer height" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6648,15 +7406,18 @@ msgstr "" msgid "Ramming line spacing" msgstr "" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "Automatikus számítás" + +msgid "Re-calculate" msgstr "" msgid "Flushing volumes for filament change" msgstr "Filament csere tiszítási mennyisége" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6673,6 +7434,15 @@ msgstr "A szorzónak [%.2f, %.2f] tartományban kell lennie." msgid "Multiplier" msgstr "Szorzó" +msgid "unloaded" +msgstr "unloaded" + +msgid "loaded" +msgstr "betöltve" + +msgid "Filament #" +msgstr "Filament #" + msgid "From" msgstr "Ettől:" @@ -6709,9 +7479,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "Másolás a vágólapra" - msgid "Paste from clipboard" msgstr "Beillesztés a vágólapról" @@ -6823,9 +7590,6 @@ msgstr "Shift+Bármelyik nyílgomb" msgid "Movement step set to 1 mm" msgstr "Mozgatás lépéstávolsága 1mm-re állítva" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "filament hozzárendelése az objektumhoz/tárgyhoz" @@ -6874,7 +7638,7 @@ msgstr "Gizmo SLA support points" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM paint-on seam" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "" msgid "Plater" @@ -6910,9 +7674,6 @@ msgstr "Extruder szám beállítása az objektumok és tárgyak számára" msgid "Delete objects, parts, modifiers " msgstr "Objektumok, tárgyak, módosítók törlése " -msgid "Space" -msgstr "Szóköz" - msgid "Select the object/part and press space to change the name" msgstr "" "Válaszd ki az objektumot/tárgyat, és nyomd meg a szóközt a név " @@ -7620,13 +8381,13 @@ msgid "Hostname, IP or URL" msgstr "Hosztnév, IP vagy URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"A Slic3r képes G-kód fájlokat feltölteni a nyomtatóra. Ennek a mezőnek " +"A Orca Slicer képes G-kód fájlokat feltölteni a nyomtatóra. Ennek a mezőnek " "tartalmaznia kell a nyomtató hostnevét, IP-címét vagy URL-címét. A HAProxy " "mögött lévő nyomtató alapszintű hitelesítéssel érhető el, ha a " "felhasználónevet és a jelszót a következő formátumban beleírod az URL-be: " @@ -7643,10 +8404,10 @@ msgid "API Key / Password" msgstr "API kulcs / jelszó" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"A Slic3r képes G-kód fájlokat feltölteni a nyomtatóra. Ennek a mezőnek " +"A Orca Slicer képes G-kód fájlokat feltölteni a nyomtatóra. Ennek a mezőnek " "tartalmaznia kell a hitelesítéshez szükséges API-kulcsot vagy jelszót." msgid "Name of the printer" @@ -8614,8 +9375,8 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" msgid "Speed of the last cooling move" @@ -8784,11 +9545,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -8805,11 +9567,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -8968,9 +9731,6 @@ msgstr "" "A nyomtató véletlenszerűen vibrál a fal nyomtatása közben, így a felület " "durva megjelenésű lesz" -msgid "None" -msgstr "Sehol" - msgid "Contour" msgstr "Contour" @@ -9328,6 +10088,17 @@ msgstr "" "Csendes üzemmód támogatása, amelyben a gép kisebb gyorsulást használ a " "csendesebb nyomtatáshoz" +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "Géplimitek" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9350,9 +10121,6 @@ msgstr "Maximális sebesség Z" msgid "Maximum speed E" msgstr "Maximális sebesség E" -msgid "Machine limits" -msgstr "Géplimitek" - msgid "Maximum X speed" msgstr "Maximális X sebesség" @@ -9559,10 +10327,10 @@ msgid "Host Type" msgstr "Host típusa" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"A Slic3r képes G-kód fájlokat feltölteni a nyomtatóra. Ennek a mezőnek " +"A Orca Slicer képes G-kód fájlokat feltölteni a nyomtatóra. Ennek a mezőnek " "tartalmaznia kell a gazdagép típusát." msgid "Nozzle volume" @@ -9688,11 +10456,25 @@ msgstr "A belső fal nyomtatási sebessége" msgid "Number of walls of every layer" msgstr "Ez a falak száma rétegenként." +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" @@ -9772,9 +10554,6 @@ msgstr "Visszahúzás rétegváltáskor" msgid "Force a retraction when changes layer" msgstr "Kényszeríti a visszahúzást minden rétegváltáskor" -msgid "Length" -msgstr "Hossz" - msgid "Retraction Length" msgstr "Visszahúzás hossza" @@ -9956,6 +10735,21 @@ msgid "" "inward movement is executed before the extruder leaves the loop." msgstr "" +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "" @@ -10669,9 +11463,6 @@ msgstr "Tisztítási mennyiség" msgid "The volume of material to prime extruder on tower." msgstr "Ez az az anyagmennyiség, amelyet az extruder a toronyban ürít." -msgid "Width" -msgstr "Szélesség" - msgid "Width of prime tower" msgstr "Ez a törlő torony szélessége." @@ -10826,8 +11617,8 @@ msgstr "" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" msgid "" @@ -11984,9 +12775,6 @@ msgstr "" msgid "Create Based on Current Printer" msgstr "" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "" @@ -12159,10 +12947,10 @@ msgstr "" msgid "Export Configs" msgstr "" -msgid "Printer config bundle(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" msgstr "" -msgid "Filament bundle(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" @@ -12201,7 +12989,7 @@ msgid "" msgstr "" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" @@ -12521,6 +13309,19 @@ msgid "" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -12528,6 +13329,13 @@ msgid "" "3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -12792,6 +13600,40 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Movement:" +#~ msgstr "Mozgatás:" + +#~ msgid "Movement" +#~ msgstr "Mozgás" + +#~ msgid "Auto Segment" +#~ msgstr "Automatikus szegmentálás" + +#~ msgid "Depth ratio" +#~ msgstr "Depth ratio" + +#~ msgid "Prizm" +#~ msgstr "Prizm" + +#~ msgid "connector is out of cut contour" +#~ msgstr "connector is out of cut contour" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "connectors are out of cut contour" + +#~ msgid "connector is out of object" +#~ msgstr "connector is out of object" + +#~ msgid "connectors is out of object" +#~ msgstr "Connectors must be on object surface." + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Invalid state. \n" +#~ "No one part is selected to keep after cut" + #~ msgid "Edit Text" #~ msgstr "Edit Text" @@ -12825,18 +13667,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Quick" -#~ msgid "Auto-Calc" -#~ msgstr "Automatikus számítás" - -#~ msgid "unloaded" -#~ msgstr "unloaded" - -#~ msgid "loaded" -#~ msgstr "betöltve" - -#~ msgid "Filament #" -#~ msgstr "Filament #" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index b0a7931d6e..49942161ea 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" msgid "Supports Painting" msgstr "Pittura Supporti" @@ -216,6 +216,9 @@ msgstr "mm" msgid "Position" msgstr "Posizione" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Rotazione" @@ -255,6 +258,7 @@ msgstr "Coordinate reali" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Dimensioni" @@ -264,6 +268,119 @@ msgstr "%" msgid "uniform scale" msgstr "Scala uniforme" +msgid "Planar" +msgstr "Planare" + +msgid "Dovetail" +msgstr "A coda di rondine" + +msgid "Auto" +msgstr "Auto" + +msgid "Manual" +msgstr "Manuale" + +msgid "Plug" +msgstr "Connettore" + +msgid "Dowel" +msgstr "Tassello" + +msgid "Snap" +msgstr "Snap" + +msgid "Prism" +msgstr "Prisma" + +msgid "Frustum" +msgstr "Tronco" + +msgid "Square" +msgstr "Quadrato" + +msgid "Hexagon" +msgstr "Esagono" + +msgid "Keep orientation" +msgstr "Mantieni orientamento" + +msgid "Place on cut" +msgstr "Posiziona sul taglio" + +msgid "Flip upside down" +msgstr "Capovolgi" + +msgid "Connectors" +msgstr "Connettori" + +msgid "Type" +msgstr "Tipo" + +msgid "Style" +msgstr "Stile" + +msgid "Shape" +msgstr "Forma" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "Profondità" + +msgid "Groove" +msgstr "Scanalatura" + +msgid "Width" +msgstr "Larghezza" + +msgid "Flap Angle" +msgstr "Inverti Angolo" + +msgid "Groove Angle" +msgstr "Angolo Scanalatura" + +msgid "Part" +msgstr "Parte" + +msgid "Object" +msgstr "Oggetto" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" +"Clicca per capovolgere il piano di taglio\n" +"Trascina per spostare il piano di taglio" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" +"Clicca per capovolgere il piano di taglio\n" +"Trascina per spostare il piano di taglio\n" +"Clicca con il tasto destro del mouse su una parte per assegnarla all'altro " +"lato" + +msgid "Move cut plane" +msgstr "Sposta il piano di taglio" + +msgid "Mode" +msgstr "Modalità" + +msgid "Change cut mode" +msgstr "Cambia la modalità di taglio" + +msgid "Tolerance" +msgstr "Tolleranza" + +msgid "Drag" +msgstr "Trascina" + +msgid "Draw cut line" +msgstr "Disegna linea di taglio" + msgid "Left click" msgstr "Click sinistro" @@ -276,9 +393,6 @@ msgstr "Clic destro" msgid "Remove connector" msgstr "Rimuovi connettore" -msgid "Drag" -msgstr "Trascina" - msgid "Move connector" msgstr "Sposta connettore" @@ -294,23 +408,51 @@ msgstr "Seleziona tutti i connettori" msgid "Cut" msgstr "Taglia" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" -msgstr "" +msgid "Rotate cut plane" +msgstr "Ruota il piano di taglio" -msgid "Repairing model object" -msgstr "Riparazione oggetto" +msgid "Remove connectors" +msgstr "Rimuovi connettori" -msgid "Connector" -msgstr "Connettore" +msgid "Bulge" +msgstr "Rigonfiamento" -msgid "Movement:" -msgstr "Movement:" +msgid "Bulge proportion related to radius" +msgstr "Proporzione del rigonfiamento in relazione al raggio" -msgid "Movement" -msgstr "Movimento" +msgid "Space" +msgstr "Spazio" -msgid "Height" -msgstr "Altezza" +msgid "Space proportion related to radius" +msgstr "Proporzione di spazio in relazione al raggio" + +msgid "Confirm connectors" +msgstr "Conferma connettori" + +msgid "Cancel" +msgstr "Annulla" + +msgid "Build Volume" +msgstr "Volume di stampa" + +msgid "Flip cut plane" +msgstr "Capovolgi piano di taglio" + +msgid "Groove change" +msgstr "Cambio di scanalatura" + +msgid "Reset" +msgstr "Reimposta" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "Modificato" + +msgid "Cut position" +msgstr "Posizione taglio" + +msgid "Reset cutting plane" +msgstr "Ripristina piano di taglio" msgid "Edit connectors" msgstr "Modifica connettori" @@ -318,6 +460,12 @@ msgstr "Modifica connettori" msgid "Add connectors" msgstr "Aggiungi connettori" +msgid "Reset cut" +msgstr "Ripristina taglio" + +msgid "Reset cutting plane and remove connectors" +msgstr "Ripristina il piano di taglio e rimuovi i connettori" + msgid "Upper part" msgstr "Parte superiore" @@ -327,9 +475,6 @@ msgstr "Parte inferiore" msgid "Keep" msgstr "Mantieni" -msgid "Place on cut" -msgstr "Posiziona sul taglio" - msgid "Flip" msgstr "Ribalta" @@ -339,87 +484,58 @@ msgstr "Dopo il taglio" msgid "Cut to parts" msgstr "Taglia le parti" -msgid "Auto Segment" -msgstr "Segmento automatico" - msgid "Perform cut" msgstr "Effettua taglio" -msgid "Reset" -msgstr "Reimposta" - -msgid "Connectors" -msgstr "Connettori" - -msgid "Type" -msgstr "Tipo" - -msgid "Style" -msgstr "Stile" - -msgid "Shape" -msgstr "Forma" - -msgid "Depth ratio" -msgstr "Rapporto di profondità" - -msgid "Remove connectors" -msgstr "Rimuovi connettori" - -msgid "Prizm" -msgstr "Prizm" - -msgid "Frustum" -msgstr "Tronco" - -msgid "Square" -msgstr "Quadrato" - -msgid "Hexagon" -msgstr "Esagono" - -msgid "Confirm connectors" -msgstr "Conferma connettori" - -msgid "Cancel" -msgstr "Annulla" - msgid "Warning" msgstr "Attenzione" msgid "Invalid connectors detected" msgstr "Rilevati connettori non validi" -msgid "connector is out of cut contour" -msgstr "Connettore fuori dal contorno" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "%1$d connettore è fuori dal profilo di taglio" +msgstr[1] "%1$d connettori sono fuori dal profilo di taglio" -msgid "connectors are out of cut contour" -msgstr "Connettori fuori dal contorno" - -msgid "connector is out of object" -msgstr "Connettore fuori dall'oggetto" - -msgid "connectors is out of object" -msgstr "I connettori devono trovarsi sulla superficie dell'oggetto." +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "%1$d connettore è fuori dall'oggetto" +msgstr[1] "%1$d connettori sono fuori dall'oggetto" msgid "Some connectors are overlapped" msgstr "Alcuni connettori si sovrappongono" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" -msgstr "" -"Stato non valido.\n" -"Non è stata selezionata alcuna parte da conservare dopo il taglio" +msgid "Select at least one object to keep after cutting." +msgstr "Selezionare almeno un oggetto da conservare dopo il taglio." -msgid "Plug" +msgid "Cut plane is placed out of object" +msgstr "Il piano di taglio è posizionato fuori dall'oggetto" + +msgid "Cut plane with groove is invalid" +msgstr "Il piano di taglio con scanalatura non è valido" + +msgid "Connector" msgstr "Connettore" -msgid "Dowel" -msgstr "Tassello" +msgid "Cut by Plane" +msgstr "Taglio per piano" -msgid "Tolerance" -msgstr "Tolleranza" +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" +"I bordi non collettori sono causati dall'utensile di taglio, vuoi risolverlo " +"ora?" + +msgid "Repairing model object" +msgstr "Riparazione oggetto" + +msgid "Cut by line" +msgstr "Taglia sulla linea" + +msgid "Delete connector" +msgstr "Cancella connettore" msgid "Mesh name" msgstr "Nome mesh" @@ -517,6 +633,8 @@ msgstr "Chiusura Pittura Giunzione" msgid "Paint-on seam editing" msgstr "Modifica Pittura Giunzione" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Font" @@ -552,6 +670,689 @@ msgstr "Ruota testo" msgid "Text shape" msgstr "Formato testo" +msgid "Set Mirror" +msgstr "Imposta specchio" + +msgid "Embossed text" +msgstr "Testo in rilievo" + +msgid "Enter emboss gizmo" +msgstr "Apri gizmo rilievo" + +msgid "Leave emboss gizmo" +msgstr "Chiudi gizmo rilievo" + +msgid "Embossing actions" +msgstr "Azioni di rilievo" + +msgid "Emboss" +msgstr "Rilievo" + +msgid "Text-Rotate" +msgstr "Ruota testo" + +msgid "NORMAL" +msgstr "NORMALE" + +msgid "SMALL" +msgstr "PICCOLO" + +msgid "ITALIC" +msgstr "CORSIVO" + +msgid "SWISS" +msgstr "SVIZZERO" + +msgid "MODERN" +msgstr "MODERNO" + +msgid "First font" +msgstr "Primo font" + +msgid "Default font" +msgstr "Font predefinito" + +msgid "Advanced" +msgstr "Avanzate" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" +"Il testo non può essere scritto con il font selezionato. Provare a scegliere " +"un altro font." + +msgid "Embossed text cannot contain only white spaces." +msgstr "Il testo in rilievo non può contenere solo spazi vuoti." + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" +"Il testo contiene un glifo di carattere (rappresentato da '?') sconosciuto " +"dal font." + +msgid "Text input doesn't show font skew." +msgstr "L'immissione di testo non mostra l'inclinazione dei caratteri." + +msgid "Text input doesn't show font boldness." +msgstr "L'immissione di testo non mostra il grassetto dei caratteri." + +msgid "Text input doesn't show gap between lines." +msgstr "L'inserimento del testo non mostra lo spazio tra le righe." + +msgid "Too tall, diminished font height inside text input." +msgstr "" +"Altezza del carattere troppo alta e ridotta all'interno dell'input di testo." + +msgid "Too small, enlarged font height inside text input." +msgstr "" +"Altezza del carattere troppo piccola e ingrandita all'interno dell'input di " +"testo." + +msgid "Text doesn't show current horizontal alignment." +msgstr "Il testo non mostra l'allineamento orizzontale corrente." + +msgid "Revert font changes." +msgstr "Ripristina modifiche al carattere." + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "Il font \"%1%\" non può essere selezionato." + +msgid "Operation" +msgstr "Operazione" + +msgid "Join" +msgstr "Unisci" + +msgid "Click to change text into object part." +msgstr "Fare clic per trasformare il testo in una parte dell'oggetto." + +msgid "You can't change a type of the last solid part of the object." +msgstr "" +"Non è possibile modificare il tipo dell'ultima parte solida dell'oggetto." + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "Taglia" + +msgid "Click to change part type into negative volume." +msgstr "Fare clic per cambiare il tipo di parte in volume negativo." + +msgid "Modifier" +msgstr "Modificatore" + +msgid "Click to change part type into modifier." +msgstr "Fare clic per cambiare il tipo di parte in modificatore." + +msgid "Change Text Type" +msgstr "Cambia tipo di testo" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "Rinomina lo stile(%1%) per il testo in rilievo:" + +msgid "Name can't be empty." +msgstr "Il nome non può essere vuoto." + +msgid "Name has to be unique." +msgstr "Il nome deve essere univoco." + +msgid "OK" +msgstr "OK" + +msgid "Rename style" +msgstr "Rinomina lo stile" + +msgid "Rename current style." +msgstr "Rinomina lo stile corrente." + +msgid "Can't rename temporary style." +msgstr "Non è possibile rinominare lo stile temporaneo." + +msgid "First Add style to list." +msgstr "Prima Aggiungi lo stile all'elenco." + +#, boost-format +msgid "Save %1% style" +msgstr "Salva lo stile %1%" + +msgid "No changes to save." +msgstr "Nessuna modifica da salvare." + +msgid "New name of style" +msgstr "Nuovo nome dello stile" + +msgid "Save as new style" +msgstr "Salva come nuovo stile" + +msgid "Only valid font can be added to style." +msgstr "Solo i font validi possono essere aggiunti allo stile." + +msgid "Add style to my list." +msgstr "Aggiungi lo stile alla mia lista." + +msgid "Save as new style." +msgstr "Salva come nuovo stile" + +msgid "Remove style" +msgstr "Rimuovi stile" + +msgid "Can't remove the last existing style." +msgstr "Non è possibile rimuovere l'ultimo stile esistente." + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "Sei sicuro di voler rimuovere definitivamente lo stile \"%1%\"?" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "Cancella lo stile \"%1%\"." + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "Non è possibile eliminare \"%1%\". È l'ultimo stile." + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "Non è possibile eliminare lo stile temporaneo \"%1%\"." + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "Modificato lo stile \"%1%\"" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "Lo stile corrente è \"%1%\"" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" +"Se si cambia lo stile in \"%1%\", la modifica dello stile attuale verrà " +"eliminata.\n" +"\n" +"Vuoi continuare comunque?" + +msgid "Not valid style." +msgstr "Stile non valido." + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "Lo stile \"%1%\" non può essere usato e sarà rimosso dall'elenco." + +msgid "Unset italic" +msgstr "Corsivo non impostato" + +msgid "Set italic" +msgstr "Imposta corsivo" + +msgid "Unset bold" +msgstr "Grassetto non impostato" + +msgid "Set bold" +msgstr "Imposta grassetto" + +msgid "Revert text size." +msgstr "Ripristina dimensione testo." + +msgid "Revert embossed depth." +msgstr "Ripristina spessore rilievo." + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" +"Le opzioni avanzate non possono essere modificate per il font selezionato.\n" +"Selezionare un altro font." + +msgid "Revert using of model surface." +msgstr "Ripristina usando la superficie del modello." + +msgid "Revert Transformation per glyph." +msgstr "Invertire la trasformazione per glifo." + +msgid "Set global orientation for whole text." +msgstr "Imposta l'orientamento globale per tutto il testo." + +msgid "Set position and orientation per glyph." +msgstr "Imposta la posizione e l'orientamento per glifo." + +msgctxt "Alignment" +msgid "Left" +msgstr "Sinistra" + +msgctxt "Alignment" +msgid "Center" +msgstr "Centro" + +msgctxt "Alignment" +msgid "Right" +msgstr "Destra" + +msgctxt "Alignment" +msgid "Top" +msgstr "Superiore" + +msgctxt "Alignment" +msgid "Middle" +msgstr "Mediano" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "Inferiore" + +msgid "Revert alignment." +msgstr "Ripristinare l'allineamento." + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "punti" + +msgid "Revert gap between characters" +msgstr "Ripristina distanza tra i caratteri" + +msgid "Distance between characters" +msgstr "Distanza tra i caratteri" + +msgid "Revert gap between lines" +msgstr "Ripristina distanza tra le linee" + +msgid "Distance between lines" +msgstr "Distanza tra le linee" + +msgid "Undo boldness" +msgstr "Annulla grassetto" + +msgid "Tiny / Wide glyphs" +msgstr "Glifi piccoli / larghi" + +msgid "Undo letter's skew" +msgstr "Annulla l'inclinazione della lettera" + +msgid "Italic strength ratio" +msgstr "Fattore intensità corsivo" + +msgid "Undo translation" +msgstr "Annulla traduzione" + +msgid "Distance of the center of the text to the model surface." +msgstr "Distanza del centro del testo dalla superficie del modello." + +msgid "Undo rotation" +msgstr "Annulla rotazione" + +msgid "Rotate text Clock-wise." +msgstr "Ruota il testo in senso orario." + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" +"Sblocca la rotazione del testo quando lo sposti lungo la superficie " +"dell'oggetto." + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" +"Blocca la rotazione del testo quando lo si sposta lungo la superficie " +"dell'oggetto." + +msgid "Select from True Type Collection." +msgstr "Seleziona dalla Raccolta True Type." + +msgid "Set text to face camera" +msgstr "Imposta il testo in modo che sia rivolto verso la propria vista" + +msgid "Orient the text towards the camera." +msgstr "Orienta il testo verso di te." + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" +"Non è possibile caricare esattamente lo stesso font(\"%1%\"). L'applicazione " +"ne ha selezionato uno simile(\"%2%\"). È necessario specificare il font per " +"abilitare la modifica del testo." + +msgid "No symbol" +msgstr "Nessun simbolo" + +msgid "Loading" +msgstr "Caricamento" + +msgid "In queue" +msgstr "In coda" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Altezza" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "Usa superficie" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "Per glifo" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "Allineamento" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "Distanza tra i caratteri" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "Spazio tra le linee" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "Spessore" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "Fattore Inclinazione" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "Dalla superficie" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "Mantieni l'alto" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "Raccolta" + +msgid "Enter SVG gizmo" +msgstr "Apri gizmo SVG" + +msgid "Leave SVG gizmo" +msgstr "Chiudi gizmo SVG" + +msgid "SVG actions" +msgstr "Azioni SVG" + +msgid "SVG" +msgstr "SVG" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "Ruota SVG" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "Opacità (%1%)" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "Gradiente di colore (%1%)" + +msgid "Undefined fill type" +msgstr "Tipo di riempimento non definito" + +msgid "Linear gradient" +msgstr "Gradiente lineare" + +msgid "Radial gradient" +msgstr "Gradiente radiale" + +msgid "Open filled path" +msgstr "Apri il percorso compilato" + +msgid "Undefined stroke type" +msgstr "Tipo di tratto non definito" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" +"Il percorso non può essere risolto con l'auto-intersezione e i punti " +"multipli." + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" +"La forma finale contiene un'auto-intersezione o più punti con le stesse " +"coordinate" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "La forma è segnata come invisibile (%1%)" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" +"Il riempimento della forma (%1%) contiene un'informazione non supportata: %2%" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" +"Il tratto della forma (%1%) è troppo sottile (la larghezza minima è di %2% " +"mm)" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "Il tratto della forma (%1%) contiene un'immagine non supportata: %2%" + +msgid "Face the camera" +msgstr "Rivolgi verso di te" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "Nome file sconosciuto" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "Il percorso del file SVG è \"%1%\"." + +msgid "Reload SVG file from disk." +msgstr "Ricarica il file SVG dal disco." + +msgid "Change file" +msgstr "Cambia file" + +msgid "Change to another .svg file" +msgstr "Passa a un altro file .svg" + +msgid "Forget the file path" +msgstr "Dimentica il percorso del file" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" +"NON salvare il percorso locale del file 3MF.\n" +"Disattiva anche l'opzione \"ricarica da disco\"." + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "Integra" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "Integra nel modello come parte non modificabile" + +msgid "Save as" +msgstr "Salva come" + +msgid "Save SVG file" +msgstr "Salva file SVG" + +msgid "Save as '.svg' file" +msgstr "Salva come file '.svg" + +msgid "Size in emboss direction." +msgstr "Dimensioni in direzione del rilievo." + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" +"La dimensione della scala cambia anche la quantità di campioni della curva " +"(%1%)" + +msgid "Width of SVG." +msgstr "Larghezza dell'SVG." + +msgid "Height of SVG." +msgstr "Altezza dell'SVG." + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "Blocca/sblocca le proporzioni dell'SVG." + +msgid "Reset scale" +msgstr "Reimposta scala" + +msgid "Resize" +msgstr "Ridimensiona" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "Distanza del centro dell'SVG dalla superficie del modello." + +msgid "Reset distance" +msgstr "Ripristina distanza" + +msgid "Reset rotation" +msgstr "Reimposta rotazione" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" +"Blocca/sblocca l'angolo di rotazione quando si trascina sopra la superficie." + +msgid "Mirror vertically" +msgstr "Specchia verticalmente" + +msgid "Mirror horizontally" +msgstr "Specchia orizzontalmente" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "Cambia il tipo di SVG" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Specchia" + +msgid "Choose SVG file for emboss:" +msgstr "Scegli il file SVG per il rilievo:" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "Il file NON esiste (%1%)." + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" +"Il nome del file deve terminare con \".svg\" ma è stato selezionato %1%" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "Il parser Nano SVG non può essere caricato dal file (%1%)." + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "Il file SVG NON contiene un percorso singolo da incidere (%1%)." + +msgid "Vertex" +msgstr "Vertice" + +msgid "Edge" +msgstr "Bordo" + +msgid "Plane" +msgstr "Piano" + +msgid "Point on edge" +msgstr "Punto sul bordo" + +msgid "Point on circle" +msgstr "Punto sulla circonferenza" + +msgid "Point on plane" +msgstr "Punto sul piano" + +msgid "Center of edge" +msgstr "Centro del bordo" + +msgid "Center of circle" +msgstr "Centro della circonferenza" + +msgid "ShiftLeft mouse button" +msgstr "MaiuscTasto sinistro del mouse" + +msgid "Select feature" +msgstr "Seleziona caratteristica" + +msgid "Select point" +msgstr "Seleziona punto" + +msgid "Delete" +msgstr "Elimina" + +msgid "Restart selection" +msgstr "Riavvio della selezione" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "Deseleziona" + +msgid "Measure" +msgstr "Misura" + +msgid "Edit to scale" +msgstr "Modifica in scala" + +msgctxt "Verb" +msgid "Scale" +msgstr "Ridimensiona" + +msgid "None" +msgstr "Nessuno" + +msgid "Diameter" +msgstr "Diametro" + +msgid "Length" +msgstr "Lunghezza" + +msgid "Selection" +msgstr "Selezione" + +msgid "Copy to clipboard" +msgstr "Copia negli appunti" + +msgid "Perpendicular distance" +msgstr "Distanza perpendicolare" + +msgid "Distance" +msgstr "Distanza" + +msgid "Direct distance" +msgstr "Distanza diretta" + +msgid "Distance XYZ" +msgstr "Distanza XYZ" + msgid "Ctrl+" msgstr "Ctrl+" @@ -745,9 +1546,6 @@ msgstr "" msgid "Sync user presets" msgstr "Sincronizzare le preset dell'utente" -msgid "Loading" -msgstr "Caricamento" - msgid "Loading user preset" msgstr "Caricamento del preset utente" @@ -778,9 +1576,6 @@ msgstr "Seleziona file G-code:" msgid "Import File" msgstr "Importa File…" -msgid "Delete" -msgstr "Elimina" - msgid "Choose files" msgstr "Scegli file" @@ -851,9 +1646,6 @@ msgstr "Opzioni pulitura" msgid "Bed adhension" msgstr "Adesione al piano" -msgid "Advanced" -msgstr "Avanzate" - msgid "Add part" msgstr "Aggiungi parte" @@ -905,6 +1697,21 @@ msgstr "Elimina l'oggetto selezionato" msgid "Load..." msgstr "Caricamento..." +msgid "Cube" +msgstr "Cubo" + +msgid "Cylinder" +msgstr "Cilindro" + +msgid "Cone" +msgstr "Cono" + +msgid "Disc" +msgstr "Disco" + +msgid "Torus" +msgstr "Toroide" + msgid "Orca Cube" msgstr "Orca Cube" @@ -917,21 +1724,12 @@ msgstr "Autodesk FDM Test" msgid "Voron Cube" msgstr "Voron Cube" -msgid "Cube" -msgstr "Cubo" - -msgid "Cylinder" -msgstr "Cilindro" - -msgid "Cone" -msgstr "Cono" +msgid "Stanford Bunny" +msgstr "Coniglietto di Stanford" msgid "Text" msgstr "Testo" -msgid "SVG" -msgstr "SVG" - msgid "Height range Modifier" msgstr "Modifica intervallo di altezza" @@ -1059,9 +1857,6 @@ msgstr "Lungo l'asse Z" msgid "Mirror along the Z axis" msgstr "Specchia lungo l'asse Z" -msgid "Mirror" -msgstr "Specchia" - msgid "Mirror object" msgstr "Specchia Oggetto" @@ -1083,6 +1878,9 @@ msgstr "Annulla informazioni di taglio" msgid "Add Primitive" msgstr "Aggiungi primitiva" +msgid "Add Handy models" +msgstr "Aggiungi modelli Handy" + msgid "Show Labels" msgstr "Mostra Etichette" @@ -1337,12 +2135,6 @@ msgstr "Intervalli di altezza" msgid "Settings for height range" msgstr "Impostazioni intervallo altezza" -msgid "Object" -msgstr "Oggetto" - -msgid "Part" -msgstr "Parte" - msgid "Layer" msgstr "Layer" @@ -1369,9 +2161,6 @@ msgstr "" msgid "Negative Part" msgstr "Parte negativa" -msgid "Modifier" -msgstr "Modificatore" - msgid "Support Blocker" msgstr "Blocco Supporto" @@ -1446,9 +2235,6 @@ msgstr "Densità riempimento (%)" msgid "Auto Brim" msgstr "Auto Brim" -msgid "Auto" -msgstr "Auto" - msgid "Mouse ear" msgstr "Orecchio di topo" @@ -1524,9 +2310,6 @@ msgstr "G-code personalizzato" msgid "Enter Custom G-code used on current layer:" msgstr "Inserisci G-code personalizzato utilizzato nel layer corrente:" -msgid "OK" -msgstr "OK" - msgid "Jump to Layer" msgstr "Vai al layer" @@ -1582,15 +2365,15 @@ msgstr "Nessuna stampante" msgid "..." msgstr "..." -msgid "Failed to connect to the server" -msgstr "Connessione al server non riuscita" - msgid "Check the status of current system services" msgstr "Verifica lo stato attuale dei servizi di sistema." msgid "code" msgstr "Codice" +msgid "Failed to connect to the server" +msgstr "Connessione al server non riuscita" + msgid "Failed to connect to cloud service" msgstr "Connessione al servizio cloud non riuscita" @@ -2447,9 +3230,6 @@ msgstr "" msgid "Origin" msgstr "Origine" -msgid "Diameter" -msgstr "Diametro" - msgid "Size in X and Y of the rectangular plate." msgstr "Dimensioni X e Y del piano rettangolare." @@ -2626,6 +3406,24 @@ msgstr "" "Si - Modifica queste impostazioni ed abilita la modalità spirale/vaso\n" "No - Annulla l'attivazione della modalità a spirale" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" +"La parete aggiuntiva alternativa funziona solo con la disattivazione dello " +"spessore del guscio verticale. " + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" +"Modificare automaticamente queste impostazioni? \n" +"Sì - Disabilita Assicura lo spessore del guscio verticale e abilita una " +"parete aggiuntiva alternativa\n" +"No - Non utilizzare una parete aggiuntiva alternativa" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3011,6 +3809,9 @@ msgstr "Tempo" msgid "Percent" msgstr "Percentuale" +msgid "Used filament" +msgstr "Filamento usato" + msgid "Layer Height (mm)" msgstr "Altezza layer (mm)" @@ -3029,9 +3830,6 @@ msgstr "Temperatura (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Flusso volumetrico (mm³/s)" -msgid "Used filament" -msgstr "Filamento usato" - msgid "Travel" msgstr "Spostamento" @@ -5267,6 +6065,9 @@ msgstr "Regione di accesso" msgid "Stealth Mode" msgstr "Modalità invisibile" +msgid "Check for stable updates only" +msgstr "Verifica solo la disponibilità di aggiornamenti stabili" + msgid "Metric" msgstr "Metrico" @@ -6173,6 +6974,13 @@ msgstr "" "0 distanza z superiore , 0 spaziatura interfaccia, trama concentrico e " "disabilita altezza layer di supporto indipendente" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" +"L'altezza dello strato è troppo piccola.\n" +"Sarà impostato su min_layer_height\n" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6787,7 +7595,7 @@ msgstr "Chiudi %s" msgid "the Configuration package is incompatible with current APP." msgstr "" "Il pacchetto di configurazione non è compatibile con la versione corrente di " -"Bambu Studio." +"Orca Slicer." msgid "Configuration updates" msgstr "Aggiornamenti di configurazione" @@ -6840,18 +7648,22 @@ msgstr "Larghezza della linea di Ramming" msgid "Ramming line spacing" msgstr "Spaziatura tra linee di ramming" -msgid "Recalculate" -msgstr "Ricalcola" +msgid "Auto-Calc" +msgstr "Calcolo automatico" + +msgid "Re-calculate" +msgstr "Ricalcolo" msgid "Flushing volumes for filament change" msgstr "Volumi di spurgo per il cambio filamento" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" -"Orca ricalcola i volumi di risciacquo ogni volta che i colori del filamento " -"cambiano. È possibile modificare questo comportamento in Preferenze." +"Orca ricalcolava i volumi di spurgo ogni volta che il colore dei filamenti " +"cambiava. È possibile disabilitare il calcolo automatico nelle preferenze > " +"di Orca Slicer" msgid "Flushing volume (mm³) for each filament pair." msgstr "Volume di spurgo (mm³) per ogni coppia di filamento." @@ -6867,6 +7679,15 @@ msgstr "Il moltiplicatore deve essere compreso nell'intervallo [%.2f, %.2f]." msgid "Multiplier" msgstr "Moltiplicatore" +msgid "unloaded" +msgstr "scaricato" + +msgid "loaded" +msgstr "caricato" + +msgid "Filament #" +msgstr "Filamento #" + msgid "From" msgstr "Da" @@ -6905,9 +7726,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "Copia negli appunti" - msgid "Paste from clipboard" msgstr "Incolla dagli appunti" @@ -7021,9 +7839,6 @@ msgstr "Shift+freccia qualsiasi" msgid "Movement step set to 1 mm" msgstr "Passo movimento impostato a 1 mm" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "Tastiera 1-9: imposta il filamento per l'oggetto/la parte" @@ -7072,7 +7887,7 @@ msgstr "Punti di supporto SLA Gizmo" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM pittura giunzione" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "Swtich tra Prepare/Prewview" msgid "Plater" @@ -7108,9 +7923,6 @@ msgstr "Imposta il numero estrusore per gli oggetti e le parti" msgid "Delete objects, parts, modifiers " msgstr "Eliminare oggetti, parti, modificatori " -msgid "Space" -msgstr "Spazio" - msgid "Select the object/part and press space to change the name" msgstr "" "Seleziona l'oggetto/la parte e premi la barra spaziatrice per cambiare il " @@ -7247,7 +8059,7 @@ msgid "Idle" msgstr "Inattivo" msgid "Beta version" -msgstr "" +msgstr "Versione beta" msgid "Latest version" msgstr "Ultima versione" @@ -7859,17 +8671,17 @@ msgid "Hostname, IP or URL" msgstr "Nome host, IP o URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r può caricare file di G-code su un host di stampa. Questo campo deve " -"contenere il nome dell'host, l'indirizzo IP o l'URL dell'istanza dell'host " -"di stampa. L'host di stampa dietro HAProxy con l'autenticazione di base " -"abilitata è accessibile inserendo il nome utente e la password nell'URL nel " -"seguente formato: https://username:password@your-octopi-address/" +"Orca Slicer può caricare file di G-code su un host di stampa. Questo campo " +"deve contenere il nome dell'host, l'indirizzo IP o l'URL dell'istanza " +"dell'host di stampa. L'host di stampa dietro HAProxy con l'autenticazione di " +"base abilitata è accessibile inserendo il nome utente e la password nell'URL " +"nel seguente formato: https://username:password@your-octopi-address/" msgid "Device UI" msgstr "Interfaccia utente del dispositivo" @@ -7884,10 +8696,10 @@ msgid "API Key / Password" msgstr "Chiave API / Password" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r può caricare file G-code su un host di stampa. Questo campo deve " +"Orca Slicer può caricare file G-code su un host di stampa. Questo campo deve " "contenere la chiave API o la password richiesta per l'autenticazione." msgid "Name of the printer" @@ -9004,15 +9816,15 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "Dopo un cambio di strumento, l'esatta posizione del filamento appena " "caricato dentro l'ugello potrebbe essere sconosciuta, e la pressione del " "filamento probabilmente non è ancora stabile. Prima di spurgare la testina " -"di stampa nel riempimento o in un oggetto sacrificale, Slic3r posizionerà " -"questo materiale in una torre di pulitura al fine di ottenere una successiva " -"estrusione affidabile su oggetto sacrificale o riempimento." +"di stampa nel riempimento o in un oggetto sacrificale, Orca Slicer " +"posizionerà questo materiale in una torre di pulitura al fine di ottenere " +"una successiva estrusione affidabile su oggetto sacrificale o riempimento." msgid "Speed of the last cooling move" msgstr "Velocità dell'ultimo movimento di raffreddamento" @@ -9153,12 +9965,13 @@ msgstr "" msgid "Sparse infill density" msgstr "Densità riempimento" +#, c-format, boost-format msgid "" "Density of internal sparse infill, 100% turns all sparse infill into solid " "infill and internal solid infill pattern will be used" msgstr "" -"Verrà utilizzato la densità di riempimento interno sparsi, il 100% " -"trasforma tutto il riempimento sparso e il modello di riempimento solido " +"Densità del riempimento sparso interno, 100% turns verrà utilizzato tutto il " +"riempimento sparso nel riempimento solido e il modello di riempimento solido " "interno" msgid "Sparse infill pattern" @@ -9203,22 +10016,24 @@ msgstr "Lunghezza dell'ancora di riempimento sparsa" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" "Collegare una linea di riempimento a un perimetro interno con un breve " "segmento di un perimetro aggiuntivo. Se espresso in percentuale (esempio: " -"15%) viene calcolato sulla larghezza di estrusione del riempimento. Slic3r " -"tenta di collegare due linee di riempimento ravvicinate a un breve segmento " -"perimetrale. Se non viene trovato alcun segmento perimetrale più corto di " -"infill_anchor_max, la linea di riempimento viene collegata a un segmento " -"perimetrale su un solo lato e la lunghezza del segmento perimetrale preso è " -"limitata a questo parametro, ma non più lunga di anchor_length_max. \n" +"15%) viene calcolato sulla larghezza di estrusione del riempimento. Orca " +"Slicer tenta di collegare due linee di riempimento ravvicinate a un breve " +"segmento perimetrale. Se non viene trovato alcun segmento perimetrale più " +"corto di infill_anchor_max, la linea di riempimento viene collegata a un " +"segmento perimetrale su un solo lato e la lunghezza del segmento perimetrale " +"preso è limitata a questo parametro, ma non più lunga di " +"anchor_length_max. \n" "Impostare questo parametro su zero per disabilitare i perimetri di " "ancoraggio collegati a una singola linea di riempimento." @@ -9234,22 +10049,23 @@ msgstr "Lunghezza massima dell'ancoraggio del riempimento" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" "Collegare una linea di riempimento a un perimetro interno con un breve " "segmento di un perimetro aggiuntivo. Se espresso in percentuale (esempio: " -"15%) viene calcolato sulla larghezza di estrusione del riempimento. Slic3r " -"tenta di collegare due linee di riempimento ravvicinate a un breve segmento " -"perimetrale. Se non viene trovato alcun segmento perimetrale più corto di " -"questo parametro, la linea di riempimento viene collegata a un segmento " -"perimetrale su un solo lato e la lunghezza del segmento perimetrale preso è " -"limitata a infill_anchor, ma non più lunga di questo parametro. \n" +"15%) viene calcolato sulla larghezza di estrusione del riempimento. Orca " +"Slicer tenta di collegare due linee di riempimento ravvicinate a un breve " +"segmento perimetrale. Se non viene trovato alcun segmento perimetrale più " +"corto di questo parametro, la linea di riempimento viene collegata a un " +"segmento perimetrale su un solo lato e la lunghezza del segmento perimetrale " +"preso è limitata a infill_anchor, ma non più lunga di questo parametro. \n" "Se impostato a 0, verrà utilizzato il vecchio algoritmo per la connessione " "di riempimento, che dovrebbe creare lo stesso risultato di 1000 e 0." @@ -9435,9 +10251,6 @@ msgstr "" "stampa su pareti, in modo che la superficie abbia un aspetto ruvido. Questa " "impostazione controlla la posizione fuzzy Skin." -msgid "None" -msgstr "Nessuno" - msgid "Contour" msgstr "Contorno" @@ -9840,6 +10653,20 @@ msgstr "" "Se la macchina supporta la modalità silenziosa, in cui la macchina utilizza " "un'accelerazione inferiore per stampare in modo più silenzioso" +msgid "Emit limits to G-code" +msgstr "Limiti di emissione al codice G" + +msgid "Machine limits" +msgstr "Limiti macchina" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" +"Se abilitato, i limiti della macchina verranno emessi nel file G-code.\n" +"Questa opzione verrà ignorata se il sapore del codice g è impostato su " +"Klipper." + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9862,9 +10689,6 @@ msgstr "Velocità massima Z" msgid "Maximum speed E" msgstr "Velocità massima E" -msgid "Machine limits" -msgstr "Limiti macchina" - msgid "Maximum X speed" msgstr "Velocità massima X" @@ -10122,10 +10946,10 @@ msgid "Host Type" msgstr "Tipo host" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r può caricare file G-code su un host di stampa. Questo campo deve " +"Orca Slicer può caricare file G-code su un host di stampa. Questo campo deve " "contenere il tipo di host." msgid "Nozzle volume" @@ -10277,18 +11101,42 @@ msgstr "E' la velocità per le pareti interne." msgid "Number of walls of every layer" msgstr "Questo è il numero di pareti per layer." +msgid "Alternate extra wall" +msgstr "Parete aggiuntiva alternativa" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" +"Questa impostazione aggiunge un muro extra a ogni altro livello. In questo " +"modo il riempimento si incastra verticalmente tra le pareti, ottenendo " +"stampe più resistenti. \n" +"\n" +"Quando questa opzione è abilitata, l'opzione Assicura spessore guscio " +"verticale deve essere disabilitata. \n" +"\n" +"L'utilizzo del riempimento fulmineo insieme a questa opzione non è " +"raccomandato in quanto il riempimento è limitato a cui ancorare i perimetri " +"extra." + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" "Se vuoi processare il G-code in uscita con script personalizzati, basta " "elencare qui il loro percorso assoluto. Separa i diversi script con un punto " "e virgola. Gli script passeranno il percorso assoluto nel G-code come primo " -"argomento, e potranno accedere alle impostazioni di configurazione di Slic3r " -"leggendo le variabili di ambiente." +"argomento, e potranno accedere alle impostazioni di configurazione di Orca " +"Slicer leggendo le variabili di ambiente." msgid "Printer notes" msgstr "Note stampante" @@ -10368,9 +11216,6 @@ msgstr "Ritrai al cambio layer" msgid "Force a retraction when changes layer" msgstr "Questo forza una retrazione nei cambi layer." -msgid "Length" -msgstr "Lunghezza" - msgid "Retraction Length" msgstr "Lunghezza Retrazione" @@ -10585,6 +11430,32 @@ msgstr "" "anello chiuso, viene eseguito un piccolo movimento verso l'interno prima che " "l'estrusore lasci l'anello." +msgid "Wipe before external loop" +msgstr "Pulire prima del loop esterno" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" +"Per ridurre al minimo la visibilità di una potenziale sovraestrusione " +"all'inizio di un perimetro esterno quando si stampa con l'ordine di stampa " +"Esterno/Interno o Interno/Esterno/Interno/Parete interna, la deretrazione " +"viene eseguita leggermente all'interno dall'inizio del perimetro esterno. In " +"questo modo qualsiasi potenziale sovraestrusione viene nascosta dalla " +"superficie esterna. \n" +"\n" +"Ciò è utile quando si stampa con l'ordine di stampa Esterno/Interno o " +"Interno/Esterno/Interno parete, poiché in queste modalità è più probabile " +"che venga stampato un perimetro esterno immediatamente dopo un movimento di " +"retrazione." + msgid "Wipe speed" msgstr "Velocità di pulizia" @@ -11383,9 +12254,6 @@ msgstr "Volume primario" msgid "The volume of material to prime extruder on tower." msgstr "E' il volume materiale da usare per la Prime Tower" -msgid "Width" -msgstr "Larghezza" - msgid "Width of prime tower" msgstr "È la larghezza della Prime Tower." @@ -11564,14 +12432,14 @@ msgstr "Usa distanze E relative" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" "L'estrusione relativa è consigliata quando si utilizza l'opzione " "\"label_objects\". Alcuni estrusori funzionano meglio con questa opzione " "unckecked (modalità di estrusione assoluta). La torre di pulizia è " -"compatibile solo con la modalità relativa. È sempre abilitato sulle " -"stampanti BambuLab. Il valore predefinito è selezionato" +"compatibile solo con la modalità relativa. È consigliato sulla maggior parte " +"delle stampanti. Il valore predefinito è selezionato" msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -12846,7 +13714,7 @@ msgstr "" "spazi. Si prega di inserire di nuovo." msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "Il venditore non può essere un numero. Si prega di inserire di nuovo." msgid "" "You have not selected a printer or preset yet. Please select at least one." @@ -12891,11 +13759,6 @@ msgstr "Crea da modello" msgid "Create Based on Current Printer" msgstr "Crea in base alla stampante corrente" -msgid "wiki" -msgstr "" -"Darò i comandi per far funzionare EPEL su RHEL 8, ma se sei su RHEL 6 o RHEL " -"7 puoi trovare quelle istruzioni sul wiki." - msgid "Import Preset" msgstr "Importa Preset" @@ -13103,11 +13966,11 @@ msgstr "Impostazione della stampante" msgid "Export Configs" msgstr "Esporta &Configurazioni" -msgid "Printer config bundle(.bbscfg)" -msgstr "Bundle di configurazione della stampante (.bbscfg)" +msgid "Printer config bundle(.orca_printer)" +msgstr "Bundle di configurazione della stampante (.orca_printer)" -msgid "Filament bundle(.bbsflmt)" -msgstr "Bundle filamenti (.bbsflmt)" +msgid "Filament bundle(.orca_filament)" +msgstr "Bundle filamenti (.orca_filament)" msgid "Printer presets(.zip)" msgstr "Preimpostazioni della stampante (.zip)" @@ -13149,7 +14012,7 @@ msgstr "" "modificare il nome dopo la creazione." msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" "Stampante e tutte le preimpostazioni di filamento e processo che " @@ -13536,6 +14399,25 @@ msgstr "" "Filtrazione dell'aria/ventilatore di scarico\n" "Sapevi che OrcaSlicer può supportare la filtrazione dell'aria/Exhuast Fan?" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" +"Finestra G-code\n" +"È possibile attivare/disattivare la finestra del codice G premendo il tasto " +"C ." + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" +"Passare da un'area di lavoro all'altra\n" +"È possibile passare dall'area di lavoro Prepara a quella " +"Anteprima e viceversa premendo il tasto TAB ." + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -13546,6 +14428,16 @@ msgstr "" "Sapevi che Orca Slicer offre un'ampia gamma di scorciatoie da tastiera e " "operazioni di scena 3D." +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" +"Retromarcia su dispari\n" +"Sapevi che la retromarcia su elementi dispari può migliorare " +"significativamente la qualità della superficie delle tue sporgenze?" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -13838,6 +14730,68 @@ msgstr "" "aumentare in modo appropriato la temperatura del piano riscaldato può " "ridurre la probabilità di deformazione." +#~ msgid "wiki" +#~ msgstr "" +#~ "Darò i comandi per far funzionare EPEL su RHEL 8, ma se sei su RHEL 6 o " +#~ "RHEL 7 puoi trovare quelle istruzioni sul wiki." + +#~ msgid "" +#~ "Relative extrusion is recommended when using \"label_objects\" option." +#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "mode). Wipe tower is only compatible with relative mode. It is always " +#~ "enabled on BambuLab printers. Default is checked" +#~ msgstr "" +#~ "L'estrusione relativa è consigliata quando si utilizza l'opzione " +#~ "\"label_objects\". Alcuni estrusori funzionano meglio con questa opzione " +#~ "unckecked (modalità di estrusione assoluta). La torre di pulizia è " +#~ "compatibile solo con la modalità relativa. È sempre abilitato sulle " +#~ "stampanti BambuLab. Il valore predefinito è selezionato" + +#~ msgid "Movement:" +#~ msgstr "Movement:" + +#~ msgid "Movement" +#~ msgstr "Movimento" + +#~ msgid "Auto Segment" +#~ msgstr "Segmento automatico" + +#~ msgid "Depth ratio" +#~ msgstr "Rapporto di profondità" + +#~ msgid "Prizm" +#~ msgstr "Prizm" + +#~ msgid "connector is out of cut contour" +#~ msgstr "Connettore fuori dal contorno" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "Connettori fuori dal contorno" + +#~ msgid "connector is out of object" +#~ msgstr "Connettore fuori dall'oggetto" + +#~ msgid "connectors is out of object" +#~ msgstr "I connettori devono trovarsi sulla superficie dell'oggetto." + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Stato non valido.\n" +#~ "Non è stata selezionata alcuna parte da conservare dopo il taglio" + +#~ msgid "Recalculate" +#~ msgstr "Ricalcola" + +#~ msgid "" +#~ "Orca recalculates your flushing volumes everytime the filament colors " +#~ "change. You can change this behavior in Preferences." +#~ msgstr "" +#~ "Orca ricalcola i volumi di risciacquo ogni volta che i colori del " +#~ "filamento cambiano. È possibile modificare questo comportamento in " +#~ "Preferenze." + #~ msgid "" #~ "The printer timed out while receiving a print job. Please check if the " #~ "network is functioning properly and send the print again." @@ -13884,30 +14838,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Rapido" -#~ msgid "Auto-Calc" -#~ msgstr "Calcolo automatico" - -#~ msgid "Re-calculate" -#~ msgstr "Ricalcolo" - -#~ msgid "" -#~ "Studio would re-calculate your flushing volumes everytime the filaments " -#~ "color changed. You could disable the auto-calculate in Bambu Studio > " -#~ "Preferences" -#~ msgstr "" -#~ "Studio ricalcolava i volumi di spurgo ogni volta che il colore dei " -#~ "filamenti cambiava. È possibile disabilitare il calcolo automatico nelle " -#~ "preferenze > di Bambu Studio" - -#~ msgid "unloaded" -#~ msgstr "scaricato" - -#~ msgid "loaded" -#~ msgstr "caricato" - -#~ msgid "Filament #" -#~ msgstr "Filamento #" - #~ msgid "Print sequence of inner wall and outer wall. " #~ msgstr "Stampa la sequenza della parete interna e della parete esterna. " diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 8ecddd505b..9b01558b98 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -214,6 +214,9 @@ msgstr "mm" msgid "Position" msgstr "位置" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "回転" @@ -253,6 +256,7 @@ msgstr "空間座標" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "サイズ" @@ -262,6 +266,113 @@ msgstr "%" msgid "uniform scale" msgstr "スケール" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "自動" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "Plug" + +msgid "Dowel" +msgstr "Dowel" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Frustum" + +msgid "Square" +msgstr "Square" + +msgid "Hexagon" +msgstr "Hexagon" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "Place on cut" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "Connectors" + +msgid "Type" +msgstr "タイプ" + +msgid "Style" +msgstr "スタイル" + +msgid "Shape" +msgstr "形状" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "幅" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "パーツ" + +msgid "Object" +msgstr "OBJ" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Tolerance" + +msgid "Drag" +msgstr "Drag" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Left click" @@ -274,9 +385,6 @@ msgstr "Right click" msgid "Remove connector" msgstr "Remove connector" -msgid "Drag" -msgstr "Drag" - msgid "Move connector" msgstr "Move connector" @@ -292,23 +400,51 @@ msgstr "Select all connectors" msgid "Cut" msgstr "カット" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "モデルオブジェクトを修復" +msgid "Remove connectors" +msgstr "Remove connectors" -msgid "Connector" -msgstr "Connector" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "移動" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "移動" +msgid "Space" +msgstr "スペース" -msgid "Height" -msgstr "高度" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Confirm connectors" + +msgid "Cancel" +msgstr "取消し" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "リセット" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Edit connectors" @@ -316,6 +452,12 @@ msgstr "Edit connectors" msgid "Add connectors" msgstr "Add connectors" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Upper part" @@ -325,9 +467,6 @@ msgstr "Lower part" msgid "Keep" msgstr "Keep" -msgid "Place on cut" -msgstr "Place on cut" - msgid "Flip" msgstr "Flip" @@ -337,87 +476,54 @@ msgstr "After cut" msgid "Cut to parts" msgstr "パーツに割り切る" -msgid "Auto Segment" -msgstr "自動分割" - msgid "Perform cut" msgstr "カットを実行" -msgid "Reset" -msgstr "リセット" - -msgid "Connectors" -msgstr "Connectors" - -msgid "Type" -msgstr "タイプ" - -msgid "Style" -msgstr "スタイル" - -msgid "Shape" -msgstr "形状" - -msgid "Depth ratio" -msgstr "Depth ratio" - -msgid "Remove connectors" -msgstr "Remove connectors" - -msgid "Prizm" -msgstr "Prizm" - -msgid "Frustum" -msgstr "Frustum" - -msgid "Square" -msgstr "Square" - -msgid "Hexagon" -msgstr "Hexagon" - -msgid "Confirm connectors" -msgstr "Confirm connectors" - -msgid "Cancel" -msgstr "取消し" - msgid "Warning" msgstr "警告" msgid "Invalid connectors detected" msgstr "Invalid connectors detected" -msgid "connector is out of cut contour" -msgstr "connector is out of cut contour" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" -msgid "connectors are out of cut contour" -msgstr "connectors are out of cut contour" - -msgid "connector is out of object" -msgstr "connector is out of object" - -msgid "connectors is out of object" -msgstr "Connectors must be on object surface." +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" msgid "Some connectors are overlapped" msgstr "Some connectors are overlapped" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"Invalid state. \n" -"No one part is selected to keep after cut" -msgid "Plug" -msgstr "Plug" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "Dowel" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "Tolerance" +msgid "Connector" +msgstr "Connector" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "モデルオブジェクトを修復" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "メッシュ名" @@ -513,6 +619,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "フォント" @@ -548,6 +656,655 @@ msgstr "Rotate text" msgid "Text shape" msgstr "文字形状" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "高度な設定" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "モディファイア" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "ロード中" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "高度" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "反転" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "削除" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "無し" + +msgid "Diameter" +msgstr "直径" + +msgid "Length" +msgstr "長さ" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "コピー" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -719,9 +1476,6 @@ msgstr "" msgid "Sync user presets" msgstr "" -msgid "Loading" -msgstr "ロード中" - msgid "Loading user preset" msgstr "ユーザープリセットを読込み中" @@ -752,9 +1506,6 @@ msgstr "G-codeファイルを選択" msgid "Import File" msgstr "Import File" -msgid "Delete" -msgstr "削除" - msgid "Choose files" msgstr "ファイルを選択" @@ -825,9 +1576,6 @@ msgstr "拭き上げ設定" msgid "Bed adhension" msgstr "ベッド接着" -msgid "Advanced" -msgstr "高度な設定" - msgid "Add part" msgstr "パーツを追加" @@ -879,6 +1627,21 @@ msgstr "選択したオブジェクトを削除" msgid "Load..." msgstr "ファイルを読込む" +msgid "Cube" +msgstr "キューブ" + +msgid "Cylinder" +msgstr "シリンダー" + +msgid "Cone" +msgstr "コーン" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "" @@ -891,19 +1654,10 @@ msgstr "" msgid "Voron Cube" msgstr "" -msgid "Cube" -msgstr "キューブ" - -msgid "Cylinder" -msgstr "シリンダー" - -msgid "Cone" -msgstr "コーン" - -msgid "Text" +msgid "Stanford Bunny" msgstr "" -msgid "SVG" +msgid "Text" msgstr "" msgid "Height range Modifier" @@ -1033,9 +1787,6 @@ msgstr "Z軸方向" msgid "Mirror along the Z axis" msgstr "反転 (Z軸)" -msgid "Mirror" -msgstr "反転" - msgid "Mirror object" msgstr "オブジェクトを反転" @@ -1057,6 +1808,9 @@ msgstr "Invalidate cut info" msgid "Add Primitive" msgstr "プリミティブを追加" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "ラベルを表示" @@ -1296,12 +2050,6 @@ msgstr "Height ranges" msgid "Settings for height range" msgstr "Settings for height range" -msgid "Object" -msgstr "OBJ" - -msgid "Part" -msgstr "パーツ" - msgid "Layer" msgstr "積層" @@ -1326,9 +2074,6 @@ msgstr "オブジェクトの最後のパーツはタイプを変更できませ msgid "Negative Part" msgstr "マイナスパーツ" -msgid "Modifier" -msgstr "モディファイア" - msgid "Support Blocker" msgstr "サポート除去器" @@ -1400,9 +2145,6 @@ msgstr "インフィル密度 (%)" msgid "Auto Brim" msgstr "オートブリム" -msgid "Auto" -msgstr "自動" - msgid "Mouse ear" msgstr "" @@ -1478,9 +2220,6 @@ msgstr "カスタム G-code" msgid "Enter Custom G-code used on current layer:" msgstr "現在の積層にカスタムG-codeを追加" -msgid "OK" -msgstr "OK" - msgid "Jump to Layer" msgstr "積層に移動" @@ -1535,15 +2274,15 @@ msgstr "プリンタ無し" msgid "..." msgstr "" -msgid "Failed to connect to the server" -msgstr "サーバーに接続できませんでした" - msgid "Check the status of current system services" msgstr "Check the status of current system services" msgid "code" msgstr "code" +msgid "Failed to connect to the server" +msgstr "サーバーに接続できませんでした" + msgid "Failed to connect to cloud service" msgstr "Failed to connect to cloud service" @@ -2342,9 +3081,6 @@ msgstr "" msgid "Origin" msgstr "原点" -msgid "Diameter" -msgstr "直径" - msgid "Size in X and Y of the rectangular plate." msgstr "プレート上のサイズ" @@ -2494,6 +3230,18 @@ msgstr "" "はい - 変更して、スパイラルモードを有効にします\n" "いいえ - 変更せず、スパイラルモードを有効しません" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2862,6 +3610,9 @@ msgstr "時間" msgid "Percent" msgstr "%" +msgid "Used filament" +msgstr "フィラメント使用量" + msgid "Layer Height (mm)" msgstr "積層ピッチ(mm)" @@ -2880,9 +3631,6 @@ msgstr "温度 (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "流量 (mm³/s)" -msgid "Used filament" -msgstr "フィラメント使用量" - msgid "Travel" msgstr "移動" @@ -5018,6 +5766,9 @@ msgstr "地域" msgid "Stealth Mode" msgstr "" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "メートル" @@ -5865,6 +6616,11 @@ msgstr "" "0 top z distance, 0 interface spacing, concentric pattern and disable " "independent support layer height" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6475,15 +7231,18 @@ msgstr "" msgid "Ramming line spacing" msgstr "" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "自動計算" + +msgid "Re-calculate" msgstr "" msgid "Flushing volumes for filament change" msgstr "フィラメントを入替える為のフラッシュ量" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6500,6 +7259,15 @@ msgstr "マルチプライヤーの有効範囲は [%.2f, %.2f] です。" msgid "Multiplier" msgstr "マルチプライヤ" +msgid "unloaded" +msgstr "アンロードしました" + +msgid "loaded" +msgstr "ロード済み" + +msgid "Filament #" +msgstr "フィラメント#" + msgid "From" msgstr "From" @@ -6536,9 +7304,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "コピー" - msgid "Paste from clipboard" msgstr "貼り付け" @@ -6647,9 +7412,6 @@ msgstr "Shift + ↑↓←→" msgid "Movement step set to 1 mm" msgstr "移動ステップを1mmに設定" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "キー1-9: オブジェクト/パーツのフィラメントを設定" @@ -6698,7 +7460,7 @@ msgstr "SLAサポートポイント" msgid "Gizmo FDM paint-on seam" msgstr "継ぎ目ペイント" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "" msgid "Plater" @@ -6734,9 +7496,6 @@ msgstr "オブジェクトとパーツ造形用の押出機番号を設定" msgid "Delete objects, parts, modifiers " msgstr "オブジェクト、パーツ、モディファイヤを削除" -msgid "Space" -msgstr "スペース" - msgid "Select the object/part and press space to change the name" msgstr "オブジェクト/パーツを選択し、名前を変更します" @@ -7403,11 +8162,11 @@ msgid "Hostname, IP or URL" msgstr "Hostname、IPまたはURL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" "ホスト名、IPアドレス、URLを入力してください。ユーザ名とパスワードがある場合、" "下記形式を参照してください https://username:password@your-octopi-address/" @@ -7423,8 +8182,8 @@ msgid "API Key / Password" msgstr "APIキー/パスワード" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "APIキーとパスワードを入力してください。" msgid "Name of the printer" @@ -8348,8 +9107,8 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" msgid "Speed of the last cooling move" @@ -8512,11 +9271,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -8533,11 +9293,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -8691,9 +9452,6 @@ msgstr "" "この設定により、壁面を造形時にノズルがランダムで軽微な振動を加えます。これに" "より、表面にザラザラ感が出来上がります。" -msgid "None" -msgstr "無し" - msgid "Contour" msgstr "Contour" @@ -9032,6 +9790,17 @@ msgid "" "acceleration to print" msgstr "サイレントモード有無" +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "プリンター制限" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9054,9 +9823,6 @@ msgstr "最大速度 Z" msgid "Maximum speed E" msgstr "最大速度 E" -msgid "Machine limits" -msgstr "プリンター制限" - msgid "Maximum X speed" msgstr "最大速度 X" @@ -9259,8 +10025,8 @@ msgid "Host Type" msgstr "ホストタイプ" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "ホストタイプを入力してください。" msgid "Nozzle volume" @@ -9381,11 +10147,25 @@ msgstr "内壁の造形速度です。" msgid "Number of walls of every layer" msgstr "壁面の層数です。" +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" @@ -9463,9 +10243,6 @@ msgstr "積層変更時のリトラクション" msgid "Force a retraction when changes layer" msgstr "この設定により、積層を変更時にリトラクションを実行します。" -msgid "Length" -msgstr "長さ" - msgid "Retraction Length" msgstr "リトラクション長さ" @@ -9644,6 +10421,21 @@ msgid "" "inward movement is executed before the extruder leaves the loop." msgstr "" +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "" @@ -10314,9 +11106,6 @@ msgstr "プライム量" msgid "The volume of material to prime extruder on tower." msgstr "フィラメントのフラッシュ量です。" -msgid "Width" -msgstr "幅" - msgid "Width of prime tower" msgstr "プライムタワーの幅です。" @@ -10463,8 +11252,8 @@ msgstr "" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" msgid "" @@ -11613,9 +12402,6 @@ msgstr "" msgid "Create Based on Current Printer" msgstr "" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "" @@ -11788,10 +12574,10 @@ msgstr "" msgid "Export Configs" msgstr "" -msgid "Printer config bundle(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" msgstr "" -msgid "Filament bundle(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" @@ -11830,7 +12616,7 @@ msgid "" msgstr "" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" @@ -12149,6 +12935,19 @@ msgid "" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -12156,6 +12955,13 @@ msgid "" "3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -12399,6 +13205,40 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Movement:" +#~ msgstr "移動" + +#~ msgid "Movement" +#~ msgstr "移動" + +#~ msgid "Auto Segment" +#~ msgstr "自動分割" + +#~ msgid "Depth ratio" +#~ msgstr "Depth ratio" + +#~ msgid "Prizm" +#~ msgstr "Prizm" + +#~ msgid "connector is out of cut contour" +#~ msgstr "connector is out of cut contour" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "connectors are out of cut contour" + +#~ msgid "connector is out of object" +#~ msgstr "connector is out of object" + +#~ msgid "connectors is out of object" +#~ msgstr "Connectors must be on object surface." + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Invalid state. \n" +#~ "No one part is selected to keep after cut" + #~ msgid "Edit Text" #~ msgstr "Edit Text" @@ -12432,18 +13272,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Quick" -#~ msgid "Auto-Calc" -#~ msgstr "自動計算" - -#~ msgid "unloaded" -#~ msgstr "アンロードしました" - -#~ msgid "loaded" -#~ msgstr "ロード済み" - -#~ msgid "Filament #" -#~ msgstr "フィラメント#" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "リトラクション時にノズルが最後のパスに沿って移動する距離です。" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index c536a5fb03..3f6b58bf29 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" -"PO-Revision-Date: 2023-12-20 09:20+0900\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" +"PO-Revision-Date: 2023-12-25 12:35+0900\n" "Last-Translator: Hotsolidinfill <138652683+Hotsolidinfill@users.noreply." "github.com>, crwusiz \n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" msgid "Supports Painting" msgstr "지지대 칠하기" @@ -62,19 +62,19 @@ msgid "Highlight overhang areas" msgstr "돌출부 영역 강조" msgid "Gap fill" -msgstr "갭 채움" +msgstr "간격 채우기" msgid "Perform" msgstr "수행" msgid "Gap area" -msgstr "갭 영역" +msgstr "간격 영역" msgid "Tool type" msgstr "도구 유형" msgid "Smart fill angle" -msgstr "스마트 채움 각도" +msgstr "스마트 채우기 각도" msgid "On overhangs only" msgstr "돌출부에만 칠하기" @@ -89,10 +89,10 @@ msgid "Sphere" msgstr "구체" msgid "Fill" -msgstr "채움" +msgstr "채우기" msgid "Gap Fill" -msgstr "갭 채움" +msgstr "간격 채우기" #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" @@ -149,10 +149,10 @@ msgid "Brush" msgstr "붓" msgid "Smart fill" -msgstr "스마트 채움" +msgstr "스마트 채우기" msgid "Bucket fill" -msgstr "버킷 채움" +msgstr "버킷 채우기" msgid "Height range" msgstr "높이 범위" @@ -221,6 +221,9 @@ msgstr "밀리미터" msgid "Position" msgstr "위치" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "회전" @@ -260,6 +263,7 @@ msgstr "영역 좌표" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "크기" @@ -269,6 +273,113 @@ msgstr "%" msgid "uniform scale" msgstr "균일 배율" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "자동" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "플러그" + +msgid "Dowel" +msgstr "맞춤핀" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "원뿔" + +msgid "Square" +msgstr "사각형" + +msgid "Hexagon" +msgstr "육각형" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "자른 위치에 놓기" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "커넥터" + +msgid "Type" +msgstr "유형" + +msgid "Style" +msgstr "모양" + +msgid "Shape" +msgstr "형태" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "너비" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "부품" + +msgid "Object" +msgstr "개체" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "공차" + +msgid "Drag" +msgstr "드래그" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "좌 클릭" @@ -281,9 +392,6 @@ msgstr "우 클릭" msgid "Remove connector" msgstr "커넥터 제거" -msgid "Drag" -msgstr "드래그" - msgid "Move connector" msgstr "커넥터 이동" @@ -299,24 +407,51 @@ msgstr "모든 커넥터 선택" msgid "Cut" msgstr "잘라내기" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -"절단 도구로 인해 메인폴드가 아닌 가장자리가 발생했는데 지금 수정하시겠습니까?" -msgid "Repairing model object" -msgstr "모델 개체 수리 중" +msgid "Remove connectors" +msgstr "커넥터 제거" -msgid "Connector" -msgstr "커넥터" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "이동:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "이동" +msgid "Space" +msgstr "스페이스" -msgid "Height" -msgstr "높이" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "커넥터 승인" + +msgid "Cancel" +msgstr "취소" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "초기화" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "커넥터 편집" @@ -324,6 +459,12 @@ msgstr "커넥터 편집" msgid "Add connectors" msgstr "커넥터 추가" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "상부 부품" @@ -333,9 +474,6 @@ msgstr "하부 부품" msgid "Keep" msgstr "유지" -msgid "Place on cut" -msgstr "자른 위치에 놓기" - msgid "Flip" msgstr "뒤집기" @@ -345,87 +483,55 @@ msgstr "잘라내기 후" msgid "Cut to parts" msgstr "부품으로 자르기" -msgid "Auto Segment" -msgstr "자동 분할" - msgid "Perform cut" msgstr "잘라내기 실행" -msgid "Reset" -msgstr "초기화" - -msgid "Connectors" -msgstr "커넥터" - -msgid "Type" -msgstr "유형" - -msgid "Style" -msgstr "모양" - -msgid "Shape" -msgstr "형태" - -msgid "Depth ratio" -msgstr "깊이 비율" - -msgid "Remove connectors" -msgstr "커넥터 제거" - -msgid "Prizm" -msgstr "원기둥" - -msgid "Frustum" -msgstr "원뿔" - -msgid "Square" -msgstr "사각형" - -msgid "Hexagon" -msgstr "육각형" - -msgid "Confirm connectors" -msgstr "커넥터 승인" - -msgid "Cancel" -msgstr "취소" - msgid "Warning" msgstr "경고" msgid "Invalid connectors detected" msgstr "잘못된 커넥터가 감지됨" -msgid "connector is out of cut contour" -msgstr "커넥터가 잘라내기 윤곽을 벗어났습니다" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" -msgid "connectors are out of cut contour" -msgstr "커넥터가 잘라내기 윤곽을 벗어났습니다" - -msgid "connector is out of object" -msgstr "커넥터가 개체에서 벗어났습니다" - -msgid "connectors is out of object" -msgstr "커넥터가 개체에서 벗어났습니다" +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" msgid "Some connectors are overlapped" msgstr "일부 커넥터가 겹칩니다" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"잘못된 상태입니다.\n" -"절단 후 유지를 위해 선택된 부품이 없습니다" -msgid "Plug" -msgstr "플러그" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "맞춤핀" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "공차" +msgid "Connector" +msgstr "커넥터" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" +"절단 도구로 인해 메인폴드가 아닌 가장자리가 발생했는데 지금 수정하시겠습니까?" + +msgid "Repairing model object" +msgstr "모델 개체 수리 중" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "메쉬 이름" @@ -521,6 +627,8 @@ msgstr "솔기 칠하기 떠나기" msgid "Paint-on seam editing" msgstr "페인트칠 솔기 편집" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "글꼴" @@ -558,6 +666,655 @@ msgstr "텍스트 회전" msgid "Text shape" msgstr "텍스트 모양" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "고급" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "수정자" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "확인" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "로드 중" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "높이" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "SVG" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "반전" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "삭제" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "없음" + +msgid "Diameter" +msgstr "직경" + +msgid "Length" +msgstr "길이" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "클립보드로 복사" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -681,7 +1438,7 @@ msgid "" msgstr "" "Orca Slicer 구성 파일이 손상되어 구문을 분석할 수 없습니다.\n" "Orca Slicer가 구성 파일을 다시 생성하려고 시도했습니다.\n" -"응용 프로그램 설정은 손실되지만 프린터 프로필은 영향을 받지 않습니다." +"응용 프로그램 설정은 손실되지만 프린터 사전설정은 영향을 받지 않습니다." msgid "Rebuild" msgstr "재빌드" @@ -745,9 +1502,6 @@ msgstr "" msgid "Sync user presets" msgstr "사용자 사전 설정 동기화" -msgid "Loading" -msgstr "로드 중" - msgid "Loading user preset" msgstr "사용자 사전 설정 로드 중" @@ -778,9 +1532,6 @@ msgstr "G코드 파일 선택:" msgid "Import File" msgstr "파일 가져오기" -msgid "Delete" -msgstr "삭제" - msgid "Choose files" msgstr "파일 선택" @@ -807,7 +1558,7 @@ msgid "Shell" msgstr "쉘" msgid "Infill" -msgstr "내부 채움" +msgstr "채우기" msgid "Support" msgstr "지지대" @@ -851,9 +1602,6 @@ msgstr "닦기 옵션" msgid "Bed adhension" msgstr "베드 안착" -msgid "Advanced" -msgstr "고급" - msgid "Add part" msgstr "부품 추가" @@ -906,6 +1654,21 @@ msgstr "선택된 개체 삭제" msgid "Load..." msgstr "불러오기..." +msgid "Cube" +msgstr "정육면체" + +msgid "Cylinder" +msgstr "원기둥" + +msgid "Cone" +msgstr "원뿔" + +msgid "Disc" +msgstr "디스크" + +msgid "Torus" +msgstr "토러스" + msgid "Orca Cube" msgstr "Orca 큐브" @@ -918,21 +1681,12 @@ msgstr "Autodesk FDM 테스트" msgid "Voron Cube" msgstr "보론 큐브" -msgid "Cube" -msgstr "정육면체" - -msgid "Cylinder" -msgstr "원기둥" - -msgid "Cone" -msgstr "원뿔" +msgid "Stanford Bunny" +msgstr "스탠포드 버니" msgid "Text" msgstr "텍스트" -msgid "SVG" -msgstr "SVG" - msgid "Height range Modifier" msgstr "높이 범위 수정자" @@ -949,7 +1703,7 @@ msgid "Set as individual objects" msgstr "개별 개체로 설정" msgid "Fill bed with copies" -msgstr "베드에 복사본으로 채움" +msgstr "베드에 복사본으로 채우기" msgid "Fill the remaining area of bed with copies of the selected object" msgstr "베드의 나머지 영역을 선택한 개체의 복사본으로 채웁니다" @@ -1004,7 +1758,7 @@ msgid "Flush Options" msgstr "버리기 옵션" msgid "Flush into objects' infill" -msgstr "개체의 내부 채움에서 버리기" +msgstr "개체의 채우기에서 버리기" msgid "Flush into this object" msgstr "개체에서 버리기" @@ -1060,9 +1814,6 @@ msgstr "Z축" msgid "Mirror along the Z axis" msgstr "Z축을 따라 반전" -msgid "Mirror" -msgstr "반전" - msgid "Mirror object" msgstr "개체 반전" @@ -1084,6 +1835,9 @@ msgstr "잘못된 잘라내기 정보" msgid "Add Primitive" msgstr "기본 모델 추가" +msgid "Add Handy models" +msgstr "핸디 모델 추가" + msgid "Show Labels" msgstr "이름표 보기" @@ -1322,12 +2076,6 @@ msgstr "높이 범위" msgid "Settings for height range" msgstr "높이 범위 설정" -msgid "Object" -msgstr "개체" - -msgid "Part" -msgstr "부품" - msgid "Layer" msgstr "레이어" @@ -1351,9 +2099,6 @@ msgstr "마지막 꽉찬 개체 부품의 유형은 변경되지 않습니다." msgid "Negative Part" msgstr "비우기 부품" -msgid "Modifier" -msgstr "수정자" - msgid "Support Blocker" msgstr "지지대 차단기" @@ -1420,14 +2165,11 @@ msgid "Wall loops" msgstr "벽 루프" msgid "Infill density(%)" -msgstr "내부 채움 밀도(%)" +msgstr "채우기 밀도(%)" msgid "Auto Brim" msgstr "자동 브림" -msgid "Auto" -msgstr "자동" - msgid "Mouse ear" msgstr "생쥐 귀" @@ -1486,13 +2228,13 @@ msgid "Template" msgstr "탬플릿" msgid "Custom" -msgstr "사용자 설정" +msgstr "사용자 정의" msgid "Pause:" msgstr "일시 정지:" msgid "Custom Template:" -msgstr "사용자 지정 템플릿:" +msgstr "사용자 정의 템플릿:" msgid "Custom G-code:" msgstr "사용자 정의 G코드:" @@ -1501,10 +2243,7 @@ msgid "Custom G-code" msgstr "사용자 정의 G코드" msgid "Enter Custom G-code used on current layer:" -msgstr "현재 레이어에 사용될 사용자 지정 G코드 입력:" - -msgid "OK" -msgstr "확인" +msgstr "현재 레이어에 사용될 사용자 정의 G코드 입력:" msgid "Jump to Layer" msgstr "다음 레이어로 이동" @@ -1525,13 +2264,13 @@ msgid "Add Custom G-code" msgstr "사용자 정의 G코드 추가" msgid "Insert custom G-code at the beginning of this layer." -msgstr "이 레이어의 시작 부분에 사용자 지정 G코드를 삽입합니다." +msgstr "이 레이어의 시작 부분에 사용자 정의 G코드를 삽입합니다." msgid "Add Custom Template" msgstr "사용자 정의 템플릿 추가" msgid "Insert template custom G-code at the beginning of this layer." -msgstr "이 레이어의 시작 부분에 사용자 지정 템플릿 G코드를 삽입합니다." +msgstr "이 레이어의 시작 부분에 사용자 정의 템플릿 G코드를 삽입합니다." msgid "Filament " msgstr "필라멘트 " @@ -1543,13 +2282,13 @@ msgid "Delete Pause" msgstr "일시 정지 삭제" msgid "Delete Custom Template" -msgstr "사용자 지정 템플릿 삭제" +msgstr "사용자 정의 템플릿 삭제" msgid "Edit Custom G-code" -msgstr "사용자 지정 G코드 편집" +msgstr "사용자 정의 G코드 편집" msgid "Delete Custom G-code" -msgstr "사용자 지정 G코드 삭제" +msgstr "사용자 정의 G코드 삭제" msgid "Delete Filament Change" msgstr "필라멘트 변경 삭제" @@ -1560,15 +2299,15 @@ msgstr "프린터 없음" msgid "..." msgstr "..." -msgid "Failed to connect to the server" -msgstr "서버 연결 실패" - msgid "Check the status of current system services" msgstr "현재 시스템 서비스 상태 확인" msgid "code" msgstr "코드" +msgid "Failed to connect to the server" +msgstr "서버 연결 실패" + msgid "Failed to connect to cloud service" msgstr "클라우드 서비스에 연결하지 못했습니다" @@ -1747,13 +2486,13 @@ msgid "Orienting canceled." msgstr "방향지정이 취소되었습니다." msgid "Filling" -msgstr "채움" +msgstr "채우기" msgid "Bed filling canceled." -msgstr "베드 채움 취소됨." +msgstr "베드 채우기 취소됨." msgid "Bed filling done." -msgstr "베드 채움 완료." +msgstr "베드 채우기 완료." msgid "Searching for optimal orientation" msgstr "최적의 방향 검색" @@ -1800,7 +2539,7 @@ msgid "Failed to send the print job. Please try again." msgstr "출력 작업을 전송하지 못했습니다. 다시 시도하세요." msgid "Failed to upload file to ftp. Please try again." -msgstr "Ftp에 파일을 업로드하지 못했습니다. 다시 시도해 주세요." +msgstr "파일을 ftp에 업로드하지 못했습니다. 다시 시도해 주세요." msgid "" "Check the current status of the bambu server by clicking on the link above." @@ -1818,8 +2557,8 @@ msgid "" "Failed to upload print file to FTP. Please check the network status and try " "again." msgstr "" -"FTP를 통한 출력 파일 업로드에 실패했습니다. 네트워크 상태를 확인하고 다시 시" -"도하세요." +"출력 파일을 FTP에 업로드하지 못했습니다. 네트워크 상태를 확인하신 후 다시 시" +"도해 주세요." msgid "Sending print job over LAN" msgstr "LAN을 통해 출력 작업 전송 중" @@ -1828,7 +2567,7 @@ msgid "Sending print job through cloud service" msgstr "클라우드 서비스를 통해 출력 작업 전송 중" msgid "Print task sending times out." -msgstr "인쇄 작업 전송 시간이 초과되었습니다." +msgstr "출력 작업 전송 시간이 초과되었습니다." msgid "Service Unavailable" msgstr "서비스 사용 불가" @@ -1933,8 +2672,8 @@ msgid "" "by Prusa Research. PrusaSlicer is from Slic3r by Alessandro Ranellucci and " "the RepRap community" msgstr "" -"Orca Slicer는 Prusa Research의 PrusaSlicer에서 나온 Bambulab의 BambuStudio를 " -"기반으로 합니다. PrusaSlicer는 Alessandro Ranellucci와 RepRap 커뮤니티의 " +"Orca Slicer는 Prusa Research의 PrusaSlicer에서 나온 뱀부랩의 BambuStudio를 기" +"반으로 합니다. PrusaSlicer는 Alessandro Ranellucci와 RepRap 커뮤니티의 " "Slic3r에서 제작되었습니다" msgid "Libraries" @@ -2013,7 +2752,7 @@ msgid "Factors of Flow Dynamics Calibration" msgstr "동적 유량 교정 계수" msgid "PA Profile" -msgstr "PA 프로필" +msgstr "PA 사전설정" msgid "Factor K" msgstr "K 계수" @@ -2040,7 +2779,7 @@ msgid "Other Color" msgstr "기타 색상" msgid "Custom Color" -msgstr "맞춤 색상" +msgstr "사용자 정의 색상" msgid "Dynamic flow calibration" msgstr "동적 유량 교정" @@ -2180,7 +2919,7 @@ msgid "Click to select AMS slot manually" msgstr "클릭하여 AMS 슬롯을 수동으로 선택합니다" msgid "Do not Enable AMS" -msgstr "AMS 사용 안 함" +msgstr "AMS 비활성" msgid "Print using materials mounted on the back of the case" msgstr "케이스 뒷면에 장착된 재료를 사용하여 출력" @@ -2270,8 +3009,8 @@ msgid "" "info is updated. During printing, remaining capacity will be updated " "automatically." msgstr "" -"AMS는 필라멘트 정보가 업데이트된 후 Bambu 필라멘트의 잔여 용량을 추정할 것입" -"니다. 출력하는 동안 남은 용량이 자동으로 업데이트됩니다." +"AMS는 필라멘트 정보가 업데이트된 후 뱀부 필라멘트의 잔여 용량을 추정할 것입니" +"다. 출력하는 동안 남은 용량이 자동으로 업데이트됩니다." msgid "AMS filament backup" msgstr "AMS 필라멘트 백업" @@ -2373,7 +3112,7 @@ msgid "Succeed to export G-code to %1%" msgstr "G코드를 %1%로 내보내기 성공" msgid "Running post-processing scripts" -msgstr "Post-processing scripts 실행 중" +msgstr "사후 처리 스크립트 실행중" msgid "Copying of the temporary G-code to the output G-code failed" msgstr "출력 G코드에 임시 G코드를 복사하지 못했습니다" @@ -2385,9 +3124,6 @@ msgstr "%1%로 업로드 예약 중. 윈도우 -> 호스트 업로드 출력 대 msgid "Origin" msgstr "원점" -msgid "Diameter" -msgstr "직경" - msgid "Size in X and Y of the rectangular plate." msgstr "직사각형 플레이트의 X 및 Y 크기." @@ -2535,8 +3271,8 @@ msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " "layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"나선형 모드는 벽 루프 1, 지지대 비활성화, 상단 셸 레이어 0, 드문 내부 채움 밀" -"도 0, 타임랩스 유형이 기존인 경우에만 작동합니다." +"나선형 모드는 벽 루프 1, 지지대 비활성화, 상단 셸 레이어 0, 드문 채우기 밀도 " +"0, 타임랩스 유형이 기존인 경우에만 작동합니다." msgid " But machines with I3 structure will not generate timelapse videos." msgstr " 그러나 I3 구조의 장치는 타임랩스 비디오를 생성하지 않습니다." @@ -2550,6 +3286,21 @@ msgstr "" "예 - 이 설정을 변경하고 나선 모드를 자동으로 활성화합니다\n" "아니오 - 이번에는 나선 모드 사용을 포기합니다" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "대체 추가 벽은 수직 쉘 두께 보장을 비활성화한 상태에서만 작동합니다. " + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" +"이 설정을 자동으로 변경하시겠습니까?\n" +"예 - 수직 쉘 두께 확인을 비활성화하고 대체 추가 벽을 활성화합니다.\n" +"아니요 - 대체 추가 벽을 사용하지 마세요" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2626,7 +3377,7 @@ msgid "Identifying build plate type" msgstr "빌드 플레이트 유형 식별 중" msgid "Calibrating Micro Lidar" -msgstr "마이크로 레이더 보정 중" +msgstr "마이크로 라이다 보정 중" msgid "Homing toolhead" msgstr "툴헤드 홈으로 이동 중" @@ -2644,7 +3395,7 @@ msgid "Pause of front cover falling" msgstr "전면 커버 분리로 일시 정지됨" msgid "Calibrating the micro lida" -msgstr "마이크로 레이더 교정" +msgstr "마이크로 라이다 교정" msgid "Calibrating extrusion flow" msgstr "압출 유량 교정" @@ -2677,7 +3428,7 @@ msgid "Paused due to chamber temperature control error" msgstr "챔버 온도 제어 오류로 인해 일시 중지됨" msgid "Cooling chamber" -msgstr "냉각 챔버" +msgstr "챔버 냉각" msgid "Paused by the Gcode inserted by user" msgstr "사용자가 삽입한 G코드로 인해 일시중지됨" @@ -2929,6 +3680,9 @@ msgstr "시간" msgid "Percent" msgstr "퍼센트" +msgid "Used filament" +msgstr "사용된 필라멘트" + msgid "Layer Height (mm)" msgstr "레이어 높이(mm)" @@ -2947,9 +3701,6 @@ msgstr "온도 (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "체적 유량 (mm³/s)" -msgid "Used filament" -msgstr "사용된 필라멘트" - msgid "Travel" msgstr "이동" @@ -2957,10 +3708,10 @@ msgid "Seams" msgstr "솔기" msgid "Retract" -msgstr "퇴출" +msgstr "후퇴" msgid "Unretract" -msgstr "비퇴출" +msgstr "후퇴 취소" msgid "Filament Changes" msgstr "필라멘트 변경" @@ -3601,7 +4352,7 @@ msgid "Pressure advance" msgstr "프레셔 어드밴스" msgid "Retraction test" -msgstr "퇴출 테스트" +msgstr "후퇴 테스트" msgid "Orca Tolerance Test" msgstr "Orca 공차 테스트" @@ -3693,7 +4444,7 @@ msgid "Export result" msgstr "결과 내보내기" msgid "Select profile to load:" -msgstr "불러올 프로필 선택:" +msgstr "불러올 사전설정 선택:" #, c-format, boost-format msgid "There is %d config imported. (Only non-system and compatible configs)" @@ -4321,7 +5072,7 @@ msgstr "하드웨어를 안전하게 제거합니다." #, c-format, boost-format msgid "%1$d Object has custom supports." msgid_plural "%1$d Objects have custom supports." -msgstr[0] "%1$d 개체에 사용자 설정 지지대가 있습니다." +msgstr[0] "%1$d 개체에 사용자 정의 지지대가 있습니다." #, c-format, boost-format msgid "%1$d Object has color painting." @@ -4490,7 +5241,7 @@ msgid "Lock current plate" msgstr "현재 플레이트 잠금" msgid "Customize current plate" -msgstr "현재 플레이트 사용자 설정" +msgstr "사용자 정의 플레이트" msgid "Untitled" msgstr "제목 없음" @@ -4688,7 +5439,7 @@ msgstr "" "요!" msgid "Customized Preset" -msgstr "맞춤형 프리셋" +msgstr "사용자 정의 프리셋" msgid "Name of components inside step file is not UTF8 format!" msgstr "단계 파일 내의 구성 요소 이름이 UTF8 형식이 아닙니다!" @@ -5011,7 +5762,7 @@ msgid "Send to printer" msgstr "프린터로 전송" msgid "Custom supports and color painting were removed before repairing." -msgstr "수리 전 사용자 지정 지지대와 컬러 페인트가 제거되었습니다." +msgstr "수리 전 사용자 정의 지지대와 컬러 페인트가 제거되었습니다." msgid "Optimize Rotation" msgstr "회전 최적화" @@ -5131,6 +5882,9 @@ msgstr "로그인 지역" msgid "Stealth Mode" msgstr "스텔스 모드" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "미터법" @@ -5411,7 +6165,7 @@ msgid "Print sequence" msgstr "출력 순서" msgid "Customize" -msgstr "사용자 지정" +msgstr "사용자 정의" msgid "First layer filament sequence" msgstr "첫 번째 레이어 필라멘트 순서" @@ -5715,7 +6469,7 @@ msgstr "" msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" -"인쇄 순서가 \"개체별\"로 설정되어 있으므로 시간 경과는 지원되지 않습니다." +"출력 순서가 \"개체별\"로 설정되어 있으므로 시간 경과는 지원되지 않습니다." msgid "Errors" msgstr "오류" @@ -5756,7 +6510,7 @@ msgstr "" #, c-format, boost-format msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "*%s 재료를 %s로 인쇄하면 노즐이 손상될 수 있습니다" +msgstr "*%s 재료를 %s로 출력하면 노즐이 손상될 수 있습니다" msgid "" "Please click the confirm button if you still want to proceed with printing." @@ -5957,7 +6711,7 @@ msgstr "" "까?" msgid "Still print by object?" -msgstr "아직도 개체별로 인쇄하시겠습니까?" +msgstr "아직도 개체별로 출력하시나요?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " @@ -5994,12 +6748,17 @@ msgstr "" "지지대 접점에 지지대 재료를 사용하는 경우 다음 설정을 권장합니다:\n" "상단 Z 거리 0, 접점 간격 0, 접점 패턴 동심원 및 독립적 지지대 높이 비활성화" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." msgstr "" "레이어 높이가 프린터 설정 -> 압출기 -> 레이어의 제한을 초과합니다.높이 제한으" -"로 인해 인쇄 품질 문제가 발생할 수 있습니다." +"로 인해 출력 품질 문제가 발생할 수 있습니다." msgid "Adjust to the set range automatically? \n" msgstr "설정 범위에 자동으로 맞춰지나요? \n" @@ -6013,8 +6772,8 @@ msgstr "무시" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "툴헤드 없이 시간 경과를 기록할 경우 \"타임랩스 닦기 타워\"를 추가하는 것이 좋" "습니다\n" @@ -6037,7 +6796,7 @@ msgid "Walls and surfaces" msgstr "벽과 표면" msgid "Bridging" -msgstr "브리징" +msgstr "브릿지" msgid "Overhangs" msgstr "돌출부" @@ -6066,10 +6825,10 @@ msgstr "" "니다. 0 속도는 돌출부 정도에 대한 감속이 없음을 의미하며 벽 속도가 사용됩니다" msgid "Bridge" -msgstr "다리" +msgstr "브릿지" msgid "Set speed for external and internal bridges" -msgstr "외부 및 내부 다리 속도 설정" +msgstr "외부 및 내부 브릿지 속도 설정" msgid "Travel speed" msgstr "이동 속도" @@ -6128,7 +6887,7 @@ msgid "Setting Overrides" msgstr "설정 덮어쓰기" msgid "Retraction" -msgstr "퇴출" +msgstr "후퇴" msgid "Basic information" msgstr "기본 정보" @@ -6172,15 +6931,15 @@ msgstr "" "트에 출력하는 것을 지원하지 않음을 의미합니다" msgid "Smooth PEI Plate / High Temp Plate" -msgstr "스무스 PEI 플레이트 / 고온 플레이트" +msgstr "부드러운 PEI 플레이트 / 고온 플레이트" msgid "" "Bed temperature when Smooth PEI Plate/High temperature plate is installed. " "Value 0 means the filament does not support to print on the Smooth PEI Plate/" "High Temp Plate" msgstr "" -"스무스 PEI 플레이트/고온 플레이트 설치 시 베드 온도. 값 0은 필라멘트가 스무" -"스 PEI 플레이트/고온 플레이트 출력을 지원하지 않음을 의미합니다" +"부드러운 PEI 플레이트/고온 플레이트 설치 시 베드 온도. 값 0은 필라멘트가 부드" +"러운 PEI 플레이트/고온 플레이트 출력을 지원하지 않음을 의미합니다" msgid "Textured PEI Plate" msgstr "텍스처 PEI 플레이트" @@ -6284,7 +7043,7 @@ msgid "Machine end G-code" msgstr "장치 종료 G코드" msgid "Printing by object G-code" -msgstr "개체 G코드로 인쇄" +msgstr "개체 G코드로 출력" msgid "Before layer change G-code" msgstr "레이어 변경 전 G코드" @@ -6338,19 +7097,19 @@ msgid "Lift Z Enforcement" msgstr "강제 Z 올리기" msgid "Retraction when switching material" -msgstr "재료 전환 시 퇴출" +msgstr "재료 전환 시 후퇴" 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 "" -"닦기 옵션은 펌웨어 퇴출 모드를 사용하는 경우에는 사용할 수 없습니다.\n" +"닦기 옵션은 펌웨어 후퇴 모드를 사용하는 경우에는 사용할 수 없습니다.\n" "\n" -"펌웨어 퇴출을 활성화하기 위해 비활성화하겠습니까?" +"펌웨어 후퇴를 활성화하기 위해 비활성화하겠습니까?" msgid "Firmware Retraction" -msgstr "펌웨어 퇴출" +msgstr "펌웨어 후퇴" msgid "Detached" msgstr "분리됨" @@ -6474,7 +7233,7 @@ msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it " "contains the following unsaved changes:" msgstr "" -"사전 설정 \"%1%\"은(는) 새 프린터 프로필과 호환되지 않으며 다음 저장되지 않" +"사전 설정 \"%1%\"은(는) 새 프린터 사전설정과 호환되지 않으며 다음 저장되지 않" "은 변경 사항을 포함:" #, boost-format @@ -6482,8 +7241,8 @@ msgid "" "Preset \"%1%\" is not compatible with the new process profile and it " "contains the following unsaved changes:" msgstr "" -"사전 설정 \"%1%\"은(는) 새 프로세스 프로필과 호환되지 않으며 다음 저장되지 않" -"은 변경 사항을 포함:" +"사전 설정 \"%1%\"은(는) 새 프로세스 사전설정과 호환되지 않으며 다음 저장되지 " +"않은 변경 사항을 포함:" #, boost-format msgid "" @@ -6595,7 +7354,7 @@ msgid "The configuration is up to date." msgstr "구성이 최신 상태입니다." msgid "Ramming customization" -msgstr "래밍 사용자 지정" +msgstr "래밍 사용자 정의" msgid "" "Ramming denotes the rapid extrusion just before a tool change in a single-" @@ -6632,18 +7391,21 @@ msgstr "래밍 선 너비" msgid "Ramming line spacing" msgstr "래밍 선 간격" -msgid "Recalculate" -msgstr "다시계산" +msgid "Auto-Calc" +msgstr "자동 계산" + +msgid "Re-calculate" +msgstr "다시 계산" msgid "Flushing volumes for filament change" msgstr "필라멘트 교체를 위한 버리기 부피" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" -"Orca Slicer는 필라멘트 색상이 바뀔 때마다 플러싱 볼륨을 다시 계산합니다. 환" -"경 설정에서 이 동작을 변경할 수 있습니다." +"Orca는 필라멘트 색상이 변경될 때마다 플러싱 볼륨을 다시 계산합니다. Orca " +"Slicer > 기본 설정에서 자동 계산을 비활성화할 수 있습니다" msgid "Flushing volume (mm³) for each filament pair." msgstr "각 필라멘트 쌍에 대한 버리기 부피(mm³)." @@ -6659,6 +7421,15 @@ msgstr "승수는 [%.2f, %.2f] 범위에 있어야 합니다." msgid "Multiplier" msgstr "승수" +msgid "unloaded" +msgstr "언로드됨" + +msgid "loaded" +msgstr "로드됨" + +msgid "Filament #" +msgstr "필라멘트 #" + msgid "From" msgstr "에서" @@ -6695,9 +7466,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "클립보드로 복사" - msgid "Paste from clipboard" msgstr "클립보드에서 붙여넣기" @@ -6765,7 +7533,7 @@ msgid "Select multiple objects" msgstr "여러 개체 선택" msgid "Ctrl+Any arrow" -msgstr "Ctrl+아무 화살표" +msgstr "Ctrl+화살표" msgid "Alt+Left mouse button" msgstr "Alt+마우스 왼쪽 버튼" @@ -6804,14 +7572,11 @@ msgid "Move selection 10 mm in positive X direction" msgstr "선택 항목을 +X 방향으로 10mm 이동" msgid "Shift+Any arrow" -msgstr "Shift+아무 화살표" +msgstr "Shift+화살표" msgid "Movement step set to 1 mm" msgstr "1mm로 이동" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "키보드 1-9: 개체/부품에 필라멘트 할당" @@ -6860,11 +7625,11 @@ msgstr "도구 상자 지지대 칠하기" msgid "Gizmo FDM paint-on seam" msgstr "도구 상자 솔기 칠하기" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "준비 하기/미리 보기 전환" msgid "Plater" -msgstr "인쇄판" +msgstr "출력판" msgid "Move: press to snap by 1mm" msgstr "이동: 눌러서 1mm씩 이동" @@ -6896,9 +7661,6 @@ msgstr "개체 및 부품에 대한 압출기 번호 설정" msgid "Delete objects, parts, modifiers " msgstr "개체, 부품, 수정자 삭제 " -msgid "Space" -msgstr "스페이스" - msgid "Select the object/part and press space to change the name" msgstr "개체/부품을 선택하고 스페이스바를 눌러 이름을 변경합니다" @@ -7177,13 +7939,13 @@ msgid "Outer wall" msgstr "외벽" msgid "Overhang wall" -msgstr "돌출벽" +msgstr "돌출부 벽" msgid "Sparse infill" -msgstr "드문 내부 채움" +msgstr "드문 채우기" msgid "Internal solid infill" -msgstr "꽉찬 내부 채움" +msgstr "꽉찬 내부 채우기" msgid "Top surface" msgstr "상단 표면" @@ -7192,10 +7954,10 @@ msgid "Bottom surface" msgstr "하단 표면" msgid "Internal Bridge" -msgstr "내부 다리" +msgstr "내부 브릿지" msgid "Gap infill" -msgstr "갭 채움" +msgstr "간격 채우기" msgid "Skirt" msgstr "스커트" @@ -7243,7 +8005,7 @@ msgid "failed finding central directory" msgstr "중앙 디렉토리를 찾지 못했습니다" msgid "not a ZIP archive" -msgstr "ZIP 형식의 압축파일이 아닙니다" +msgstr "zip 형식의 압축파일이 아닙니다" msgid "invalid header or corrupted" msgstr "잘못된 헤더이거나 손상됨" @@ -7419,7 +8181,7 @@ msgid "" "RepRapFirmware and Repetier G-code flavors." msgstr "" "프라임 타워는 현재 Marlin, RepRap/Sprinter에만 지원됩니다.RepRapFirmware 및 " -"Repetier G코드 버전." +"Repetier G코드 유형." msgid "The prime tower is not supported in \"By object\" print." msgstr "프라임 타워는 \"개체별\" 출력에서 지원되지 않습니다." @@ -7543,10 +8305,10 @@ msgstr "" "\"XxY, XxY...\" 형식의 점으로 다각형으로 표시됩니다" msgid "Bed custom texture" -msgstr "베드 사용자 설정 텍스처" +msgstr "사용자 정의 베드 텍스처" msgid "Bed custom model" -msgstr "베드 사용자 설정 모델" +msgstr "사용자 정의 베드 모델" msgid "Elephant foot compensation" msgstr "코끼리 발 보정" @@ -7599,17 +8361,17 @@ msgid "Hostname, IP or URL" msgstr "호스트 이름, IP 또는 URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r은 G코드 파일을 프린터 호스트에 업로드할 수 있습니다. 이 필드에는 프린" -"터 호스트 인스턴스의 호스트 이름, IP 주소 또는 URL이 포함되어야 합니다. 기본 " -"인증이 활성화된 HAProxy 뒤의 출력 호스트는 https://username:password@your-" -"octopi-address/ 형식의 URL에 사용자 이름과 암호를 입력하여 액세스할 수 있습니" -"다" +"Orca Slicer은 G코드 파일을 프린터 호스트에 업로드할 수 있습니다. 이 필드에는 " +"프린터 호스트 인스턴스의 호스트 이름, IP 주소 또는 URL이 포함되어야 합니다. " +"기본 인증이 활성화된 HAProxy 뒤의 출력 호스트는 https://username:" +"password@your-octopi-address/ 형식의 URL에 사용자 이름과 암호를 입력하여 액세" +"스할 수 있습니다" msgid "Device UI" msgstr "장치 UI" @@ -7623,11 +8385,11 @@ msgid "API Key / Password" msgstr "API 키 / 비밀번호" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r은 G코드 파일을 프린터 호스트에 업로드할 수 있습니다. 이 필드에는 인증" -"에 필요한 API 키 또는 비밀번호가 포함되어야 합니다." +"Orca Slicer은 G코드 파일을 프린터 호스트에 업로드할 수 있습니다. 이 필드에는 " +"인증에 필요한 API 키 또는 비밀번호가 포함되어야 합니다." msgid "Name of the printer" msgstr "프린터 이름" @@ -7640,7 +8402,7 @@ msgid "" "in crt/pem format. If left blank, the default OS CA certificate repository " "is used." msgstr "" -"사용자 지정 CA 인증서 파일은 crt/pem 형식의 HTTPS OctoPrint 연결에 대해 지정" +"사용자 정의 CA 인증서 파일은 crt/pem 형식의 HTTPS OctoPrint 연결에 대해 지정" "할 수 있습니다. 비워 두면 기본 OS CA 인증서 저장소가 사용됩니다." msgid "User" @@ -7804,14 +8566,14 @@ msgstr "" "로 하단 쉘 레이어에 의해 결정됨을 의미합니다" msgid "Force cooling for overhang and bridge" -msgstr "돌출부 및 다리 강제 냉각" +msgstr "돌출부 및 브릿지 강제 냉각" msgid "" "Enable this option to optimize part cooling fan speed for overhang and " "bridge to get better cooling" msgstr "" -"냉각 향상을 위해 돌출부 및 다리에 대한 출력물 냉각 팬 속도를 최적화하려면 이 " -"옵션을 활성화합니다" +"냉각 향상을 위해 돌출부 및 브릿지에 대한 출력물 냉각 팬 속도를 최적화하려면 " +"이 옵션을 활성화합니다" msgid "Fan speed for overhang" msgstr "돌출부 팬 속도" @@ -7821,8 +8583,9 @@ msgid "" "wall which has large overhang degree. Forcing cooling for overhang and " "bridge can get better quality for these part" msgstr "" -"돌출부 정도가 큰 다리나 돌출부 벽을 출력할 때 출력물 냉각 팬을 이 속도로 강제" -"합니다. 돌출부와 다리를 강제 냉각하면 이러한 부품의 품질이 향상될 수 있습니다" +"돌출부 정도가 큰 브릿지나 돌출부 벽을 출력할 때 출력물 냉각 팬을 이 속도로 강" +"제합니다. 돌출부와 브릿지를 강제 냉각하면 이러한 부품의 품질이 향상될 수 있습" +"니다" msgid "Cooling overhang threshold" msgstr "돌출부 냉각 임계값" @@ -7839,31 +8602,31 @@ msgstr "" "에 관계없이 모든 외벽을 강제 냉각한다는 의미입니다" msgid "Bridge infill direction" -msgstr "다리 내부 채움 방향" +msgstr "브릿지 채우기 방향" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " "calculated automatically. Otherwise the provided angle will be used for " "external bridges. Use 180°for zero angle." msgstr "" -"다리출력 각도 재정의. 0°으로 두면 다리 출력 각도가 자동으로 계산됩니다. 그렇" -"지 않으면 제공된 각도가 외부 다리 출력에 사용됩니다. 영각은 180°를 사용합니" -"다." +"브릿지출력 각도 재정의. 0°으로 두면 브릿지 출력 각도가 자동으로 계산됩니다. " +"그렇지 않으면 제공된 각도가 외부 브릿지 출력에 사용됩니다. 0도에는 180°를 사" +"용합니다." msgid "Bridge density" -msgstr "다리 밀도" +msgstr "브릿지 밀도" msgid "Density of external bridges. 100% means solid bridge. Default is 100%." msgstr "" -"외부 다리의 밀도. 100%는 단단한 다리를 의미합니다. 기본값은 100%입니다." +"외부 브릿지의 밀도. 100%는 단단한 브릿지를 의미합니다. 기본값은 100%입니다." msgid "Bridge flow ratio" -msgstr "다리 유량 비율" +msgstr "브릿지 유량 비율" msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " "material for bridge, to improve sag" -msgstr "이 값을 약간(예: 0.9) 줄여 다리의 압출량을 줄여 처짐을 개선합니다" +msgstr "이 값을 약간(예: 0.9) 줄여 브릿지의 압출량을 줄여 처짐을 개선합니다" msgid "Internal bridge flow ratio" msgstr "내부 브릿지 유량 비율" @@ -7873,9 +8636,9 @@ msgid "" "first layer over sparse infill. Decrease this value slightly (for example " "0.9) to improve surface quality over sparse infill." msgstr "" -"이 값은 내부 브리지 레이어의 두께를 결정합니다. 이것이 희박한 채우기 위의 첫 " -"번째 레이어입니다. 이 값을 약간 줄이십시오(예: 0.9) 희박한 채우기보다 표면 품" -"질을 향상시킵니다." +"이 값은 내부 브릿지 레이어의 두께를 결정합니다. 이것은 드문 채우기 위의 첫 번" +"째 레이어입니다. 드문 채우기보다 표면 품질을 향상시키려면 이 값을 약간(예: " +"0.9) 줄입니다." msgid "Top surface flow ratio" msgstr "상단 표면 유량 비율" @@ -7884,14 +8647,14 @@ msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish" msgstr "" -"이 인수는 상단 꽉찬 내부 채움의 압출량에 영향을 미칩니다. 부드러운 표면 마감" -"을 위해 약간 줄일 수 있습니다" +"이 값은 상단 꽉찬 내부 채우기의 재료의 양에 영향을 미칩니다. 부드러운 표면 마" +"감을 위해 약간 줄여도 됩니다" msgid "Bottom surface flow ratio" msgstr "하단 표면 유량 비율" msgid "This factor affects the amount of material for bottom solid infill" -msgstr "이 인수는 하단 꽉찬 내부 채움의 압출량에 영향을 미칩니다" +msgstr "이 값은 하단 꽉찬 내부 채우기의 재료의 양에 영향을 미칩니다" msgid "Precise wall(experimental)" msgstr "정밀한 벽(실험적)" @@ -7951,7 +8714,7 @@ msgid "" "Create additional perimeter paths over steep overhangs and areas where " "bridges cannot be anchored. " msgstr "" -"가파른 돌출부와 다리를 고정할 수 없는 지역 위에 추가 둘레 경로를 만듭니다. " +"가파른 돌출부와 브릿지를 고정할 수 없는 지역 위에 추가 둘레 경로를 만듭니다. " msgid "Reverse on odd" msgstr "홀수에 반전" @@ -7999,7 +8762,7 @@ msgstr "" "있습니다.지원합니다.\n" "\n" "이 설정을 가장 효과적으로 사용하려면 다음을 설정하는 것이 좋습니다.모든 내부 " -"벽이 교대로 인쇄되도록 임계값을 0으로 역방향오버행 정도에 관계없이 홀수 레이" +"벽이 교대로 출력되도록 임계값을 0으로 역방향오버행 정도에 관계없이 홀수 레이" "어의 방향입니다." msgid "Reverse threshold" @@ -8008,6 +8771,7 @@ msgstr "반전 임계값" msgid "Overhang reversal threshold" msgstr "돌출부 반전 임계값" +#, fuzzy, c-format, boost-format msgid "" "Number of mm the overhang need to be for the reversal to be considered " "useful. Can be a % of the perimeter width.\n" @@ -8046,7 +8810,7 @@ msgid "External" msgstr "외부" msgid "Speed of bridge and completely overhang wall" -msgstr "다리와 완전히 돌출된 돌출부 벽의 속도" +msgstr "브릿지와 돌출부 벽의 속도" msgid "mm/s" msgstr "mm/s" @@ -8058,8 +8822,8 @@ msgid "" "Speed of internal bridge. If the value is expressed as a percentage, it will " "be calculated based on the bridge_speed. Default value is 150%." msgstr "" -"내부 다리 속도. 값을 백분율로 표시하면 외부 다리 속도를 기준으로 계산됩니다. " -"기본값은 150%입니다." +"내부 브릿지 속도. 값을 백분율로 표시하면 외부 브릿지 속도를 기준으로 계산됩니" +"다. 기본값은 150%입니다." msgid "Brim width" msgstr "브림 너비" @@ -8127,10 +8891,10 @@ msgid "Compatible machine condition" msgstr "호환 장치 상태" msgid "Compatible process profiles" -msgstr "호환 프로세스 프로필" +msgstr "호환 프로세스 사전설정" msgid "Compatible process profiles condition" -msgstr "호환 프로세스 프로필 상태" +msgstr "호환 프로세스 사전설정 상태" msgid "Print sequence, layer by layer or object by object" msgstr "출력순서, 레이어별 또는 개체별" @@ -8166,16 +8930,16 @@ msgid "mm/s²" msgstr "mm/s²" msgid "Default filament profile" -msgstr "기본 필라멘트 프로필" +msgstr "기본 필라멘트 사전설정" msgid "Default filament profile when switch to this machine profile" -msgstr "이 장치 프로필로 전환할 때의 기본 필라멘트 프로필" +msgstr "이 장치 사전설정으로 전환할 때의 기본 필라멘트 사전설정" msgid "Default process profile" -msgstr "기본 프로세스 프로필" +msgstr "기본 프로세스 사전설정" msgid "Default process profile when switch to this machine profile" -msgstr "이 장치 프로필로 전환할 때의 기본 프로세스 프로필" +msgstr "이 장치 사전설정으로 전환할 때의 기본 프로세스 사전설정" msgid "Activate air filtration" msgstr "공기 여과 활성화" @@ -8197,7 +8961,7 @@ msgid "Speed of exhuast fan after printing completes" msgstr "출력 완료 후 배기 팬 속도" msgid "No cooling for the first" -msgstr "냉각 중지: 첫레이어~" +msgstr "처음에는 냉각이 적용되지 않습니다" msgid "" "Close all cooling fan for the first certain layers. Cooling fan of the first " @@ -8207,49 +8971,49 @@ msgstr "" "팬을 정지합니다" msgid "Don't support bridges" -msgstr "다리 지지대 미생성" +msgstr "브릿지에서 지지대 사용안함" msgid "" "Don't support the whole bridge area which make support very large. Bridge " "usually can be printing directly without support if not very long" msgstr "" -"지지대를 크게 만드는 전체 다리 영역에 지지대 미생성. 다리는 일반적으로 매우 " -"길지 않은 경우 지지대 없이 직접 출력할 수 있습니다" +"지지대를 크게 만드는 전체 브릿지 영역에 지지대를 사용하지 않습니다. 브릿지는 " +"일반적으로 매우 길지 않은 경우 지지대 없이 직접 출력할 수 있습니다" msgid "Thick bridges" -msgstr "두꺼운 다리" +msgstr "두꺼운 브릿지" msgid "" "If enabled, bridges are more reliable, can bridge longer distances, but may " "look worse. If disabled, bridges look better but are reliable just for " "shorter bridged distances." msgstr "" -"활성화하면 다리는 더 견고해지고 더 먼 거리를 생성할 수 있지만 나빠 보일 수 있" -"습니다. 비활성화하면 다리가 더 좋아 보이지만 짧은 브리지 거리에 대해서만 안정" -"적입니다." +"활성화하면 브릿지는 더 견고해지고 더 먼 거리를 생성할 수 있지만 나빠 보일 수 " +"있습니다. 비활성화하면 브릿지가 더 좋아 보이지만 짧은 브릿지 거리에 대해서만 " +"안정적입니다." msgid "Thick internal bridges" -msgstr "두꺼운 내부 다리" +msgstr "두꺼운 내부 브릿지" msgid "" "If enabled, thick internal bridges will be used. It's usually recommended to " "have this feature turned on. However, consider turning it off if you are " "using large nozzles." msgstr "" -"활성화되면 두꺼운 내부 브리지가 사용됩니다. 일반적으로 다음을 권장합니다.이 " +"활성화되면 두꺼운 내부 브릿지가 사용됩니다. 일반적으로 다음을 권장합니다.이 " "기능을 켜두세요. 하지만 다음과 같은 경우에는 끄는 것을 고려해 보세요.큰 노즐" "을 사용합니다." msgid "Max bridge length" -msgstr "최대 다리 길이" +msgstr "최대 브릿지 길이" msgid "" "Max length of bridges that don't need support. Set it to 0 if you want all " "bridges to be supported, and set it to a very large value if you don't want " "any bridges to be supported." msgstr "" -"지지대가 필요하지 않은 다리의 최대 길이. 모든 다리에 지지대를 생성하려면 0으" -"로 설정하고 다리에 지지대를 생성하지 않으려면 매우 큰 값으로 설정합니다." +"지지대가 필요하지 않은 브릿지의 최대 길이. 모든 브릿지에 지지대를 생성하려면 " +"0으로 설정하고 브릿지에 지지대를 생성하지 않으려면 매우 큰 값으로 설정합니다." msgid "End G-code" msgstr "종료 G코드" @@ -8265,7 +9029,7 @@ msgid "" "you print your models object by object" msgstr "" "개체 사이에 G코드를 삽입하세요. 이 매개변수는 다음 경우에만 적용됩니다.모델 " -"개체를 개체별로 인쇄합니다" +"개체를 개체별로 출력합니다" msgid "End G-code when finish the printing of this filament" msgstr "이 필라멘트의 출력이 끝날때의 종료 G코드" @@ -8277,14 +9041,14 @@ msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)" msgstr "" -"경사진 표면 근처에 꽉찬 내부 채움을 추가하여 수직 쉘 두께를 보장합니다(상단" -"+하단 꽉찬 레이어)" +"경사진 표면 근처에 꽉찬 내부 채우기를 추가하여 수직 쉘 두께를 보장합니다 (상" +"단+하단 꽉찬 레이어)" msgid "Top surface pattern" msgstr "상단 표면 패턴" msgid "Line pattern of top surface infill" -msgstr "상단 표면 내부 채움의 선 패턴" +msgstr "상단 표면 채우기의 선 패턴" msgid "Concentric" msgstr "동심" @@ -8314,17 +9078,17 @@ msgid "Bottom surface pattern" msgstr "하단 표면 패턴" msgid "Line pattern of bottom surface infill, not bridge infill" -msgstr "하단 표면 내부 채움의 선 패턴, 다리엔 적용 안됨" +msgstr "브릿지 채우기가 아닌 바닥면 채우기의 선 패턴" msgid "Internal solid infill pattern" -msgstr "내부 꽉찬 내부 채움 패턴" +msgstr "꽉찬 내부 채우기 패턴" msgid "" "Line pattern of internal solid infill. if the detect narrow internal solid " "infill be enabled, the concentric pattern will be used for the small area." msgstr "" -"내부 꽉찬 내부 채움의 선 패턴. 좁은 내부 꽉찬 내부 채움 감지가 활성화된 경우 " -"작은 영역에 동심 패턴이 사용됩니다." +"꽉찬 내부 채우기의 선 패턴. 좁은 꽉찬 내부 채우기 감지가 활성화된 경우 작은 " +"영역에 동심원 패턴이 사용됩니다." msgid "" "Line width of outer wall. If expressed as a %, it will be computed over the " @@ -8359,7 +9123,7 @@ msgid "" msgstr "작은 둘레 길이에 대한 임계값을 설정합니다. 기본 임계값은 0mm입니다" msgid "Walls printing order" -msgstr "벽 인쇄 순서" +msgstr "벽 출력 순서" msgid "" "Print sequence of the internal (inner) and external (outer) walls. \n" @@ -8385,16 +9149,16 @@ msgid "" "\n" " " msgstr "" -"내부(내벽) 및 외부(외벽)의 인쇄 순서를 지정합니다.\n" +"내부(내벽) 및 외부(외벽)의 출력 순서를 지정합니다.\n" "\n" -"돌출부를 가장 잘 인쇄하려면 내부/외부를 사용합니다. 이는 돌출된 벽이 인쇄하" +"돌출부를 가장 잘 출력하려면 내부/외부를 사용합니다. 이는 돌출된 벽이 출력하" "는 동안 인접한 경계에 부착될 수 있기 때문입니다. 그러나 이 옵션을 사용하면 외" "부 경계가 내부 경계에 눌려 변형되므로 표면 품질이 약간 저하됩니다.\n" "\n" -"내부/외부/내부를 사용하면 외부 벽이 내부 경계에서 방해받지 않고 인쇄되므로 최" -"상의 외부 표면 마감과 치수 정확도를 얻을 수 있습니다. 그러나 외부 벽을 인쇄" +"내부/외부/내부를 사용하면 외부 벽이 내부 경계에서 방해받지 않고 출력되므로 최" +"상의 외부 표면 마감과 치수 정확도를 얻을 수 있습니다. 그러나 외부 벽을 출력" "할 내부 경계가 없으므로 오버행 성능이 저하됩니다. 이 옵션은 세 번째 경계부터 " -"내부 벽을 먼저 인쇄한 다음 외부 경계, 마지막으로 첫 번째 내부 경계를 인쇄하므" +"내부 벽을 먼저 출력한 다음 외부 경계, 마지막으로 첫 번째 내부 경계를 출력하므" "로 최소 3개 이상의 벽이 있어야 효과적입니다. 이 옵션은 대부분의 경우 외부/내" "부 옵션보다 권장됩니다.\n" "\n" @@ -8414,7 +9178,7 @@ msgid "Inner/Outer/Inner" msgstr "내벽/외벽/내벽" msgid "Print infill first" -msgstr "채우기 먼저 인쇄" +msgstr "채우기 먼저 출력" msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " @@ -8426,11 +9190,11 @@ msgid "" "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" -"벽/채우기 순서. 확인란을 선택 취소하면 벽이 먼저 인쇄되며 이는 대부분의 경우 " +"벽/채우기 순서. 확인란을 선택 취소하면 벽이 먼저 출력되며 이는 대부분의 경우 " "가장 잘 작동합니다.\n" "\n" -"벽에 접착할 이웃 충전재가 있으므로 벽을 먼저 인쇄하면 과도한 돌출부에 도움이 " -"될 수 있습니다. 그러나 충전재는 인쇄된 벽이 부착된 부분을 약간 밀어내어 외부 " +"벽에 접착할 이웃 충전재가 있으므로 벽을 먼저 출력하면 과도한 돌출부에 도움이 " +"될 수 있습니다. 그러나 충전재는 출력된 벽이 부착된 부분을 약간 밀어내어 외부 " "표면 마감이 더 나빠집니다. 또한 충전재가 부품의 외부 표면을 통해 빛날 수도 있" "습니다." @@ -8652,13 +9416,13 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "툴 교환 후 노즐 내부에 새로 로드된 필라멘트의 정확한 위치를 알 수 없으며 필라" -"멘트 압력이 아직 안정적이지 않을 수 있습니다. 프린트 헤드를 내부 채움 또는 희" -"생 개체로 청소하기 전에 Slic3r은 항상 이 양의 재료를 닦기 타워로 프라이밍하" -"여 연속적인 내부 채움 또는 희생 물체 압출을 안정적으로 생성합니다." +"멘트 압력이 아직 안정적이지 않을 수 있습니다. 프린트 헤드를 채우기 또는 희생 " +"개체로 청소하기 전에 Orca Slicer은 항상 이 양의 재료를 닦기 타워로 프라이밍하" +"여 연속적인 채우기 또는 희생 물체 압출을 안정적으로 생성합니다." msgid "Speed of the last cooling move" msgstr "마지막 냉각 이동 속도" @@ -8777,28 +9541,29 @@ msgid "(Undefined)" msgstr "(정의되지 않음)" msgid "Infill direction" -msgstr "내부 채움 방향" +msgstr "채우기 방향" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" -msgstr "선의 시작 또는 주 방향을 제어하는 드문 내부 채움 패턴에 대한 각도" +msgstr "선의 시작 또는 주 방향을 제어하는 드문 채우기 패턴에 대한 각도" msgid "Sparse infill density" -msgstr "드문 내부 채움 밀도" +msgstr "드문 채우기 밀도" +#, fuzzy, c-format, boost-format msgid "" "Density of internal sparse infill, 100% turns all sparse infill into solid " "infill and internal solid infill pattern will be used" msgstr "" -"내부 드문 채우기의 밀도, 100% 모든 드문 채우기를 솔리드로 바꿉니다 채우기 및 " -"내부 솔리드 채우기 패턴이 사용됩니다" +"내부 드문 채우기의 밀도, 100%는 모든 드문 채우기를 꽉찬 내부 채우기로 변경하" +"고 채우기에는 패턴이 사용됩니다" msgid "Sparse infill pattern" -msgstr "드문 내부 채움 패턴" +msgstr "드문 채우기 패턴" msgid "Line pattern for internal sparse infill" -msgstr "내부 드문 내부 채움의 선 패턴" +msgstr "드문 내부 채우기의 선 패턴" msgid "Grid" msgstr "격자" @@ -8831,27 +9596,29 @@ msgid "Lightning" msgstr "번개" msgid "Sparse infill anchor length" -msgstr "드문 내부 채움 고정점 길이" +msgstr "드문 채우기 고정점 길이" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" -"짧은 추가 윤곽선을 사용하여 내부 채움 선에 연결합니다. 백분율(예: 15%)로 표시" -"되는 경우 내부 채움 선 너비에 대해 계산됩니다. Slic3r은 두 개의 가까운 내부 " -"채움 선을 짧은 주변 구간에 연결하려고 시도합니다. 내부 채움 고정점 최대 길이" -"(infill_anchor_max)보다 짧은 주변 구간이 발견되지 않으면 내부 채움 선은 한쪽" -"에서만 주변 구간에 연결됩니다. 가져온 주변 구간의 길이는 이 매개변수로 제한되" -"지만 anchor_length_max보다 길지 않습니다.\n" -"단일 내부 채움 선에 연결된 고정 주변을 비활성화하려면 이 매개변수를 0으로 설" -"정합니다." +"사용하여 채우기 선을 내부 둘레에 연결합니다. 백분율(예: 15%)로 표시되는 경우 " +"채우기 돌출 너비에 대해 계산됩니다. Orca Slicer은 두 개의 가까운 채우기 선을 " +"짧은 주변 세그먼트에 연결하려고 합니다. 내부 채우기 고정점 " +"(infill_anchor_max) 최대 길이보다 짧은 경계 세그먼트가 발견되지 않으면 \n" +"채우기 선은 한쪽에서 경계 세그먼트에 연결되고 취해진 경계 세그먼트의 길이는 " +"이 매개변수로 제한되지만 최대 고정점 길이(anchor_length_max) 보다 길지 않습니" +"다.\n" +"단일 채우기 선에 연결된 고정 둘레를 비활성화하려면 이 매개변수를 0으로 설정합" +"니다." msgid "0 (no open anchors)" msgstr "0 (개방형 고정점 없음)" @@ -8860,27 +9627,28 @@ msgid "1000 (unlimited)" msgstr "1000 (무제한)" msgid "Maximum length of the infill anchor" -msgstr "내부 채움 고정점 최대 길이" +msgstr "채우기 고정점 최대 길이" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" -"내부 채움 선을 짧게 연장하여 내부 둘레에 연결합니다. 백분율(예: 15%)로 표시되" -"는 경우 내부 채움 선 너비에 대해 계산됩니다. Slice3r은 두 개의 가까운 내부 채" -"움 선을 짧은 둘레 세그먼트에 연결하려고 시도합니다. 이 매개변수보다 짧은 둘" -"레 세그먼트를 찾을 수 없는 경우, 내부 채움 선은 한 쪽의 둘레 세그먼트에만 연" -"결되고 취한 둘레 세그먼트의 길이는 infill_anchor로 제한되지만 이 매개변수보" -"다 길지 않습니다.\n" -"0으로 설정하면 주입 연결에 대한 이전 알고리즘이 사용되며, 1000 & 0과 동일한 " -"결과가 생성됩니다." +"추가 둘레의 짧은 세그먼트를 사용하여 채우기 선을 내부 둘레에 연결합니다. 백분" +"율(예: 15%)로 표시되는 경우 채우기 돌출 너비에 대해 계산됩니다. Orca Slicer" +"은 두 개의 가까운 채우기 선을 짧은 주변 세그먼트에 연결하려고 합니다. 이 매개" +"변수보다 짧은 주변 세그먼트가 발견되지 않으면 채우기 선은 한쪽 측면의 주변 세" +"그먼트에 연결되고 사용된 주변 세그먼트의 길이는 앵커 채우기(infill_anchor)로 " +"제한되지만 이 매개변수보다 길지 않습니다.\n" +"0으로 설정하면 채우기 연결에 대한 이전 알고리즘이 사용되며 1000 & 0과 동일한 " +"결과를 생성해야 합니다." msgid "0 (Simple connect)" msgstr "0 (단순 연결)" @@ -8907,8 +9675,8 @@ msgid "" "Acceleration of bridges. If the value is expressed as a percentage (e.g. " "50%), it will be calculated based on the outer wall acceleration." msgstr "" -"다리의 가속도. 값을 백분율 (ex. 50%)로 표시하면 외벽 가속도 기준으로 계산됩니" -"다." +"브릿지의 가속도. 값을 백분율 (ex. 50%)로 표시하면 외벽 가속도 기준으로 계산됩" +"니다." msgid "mm/s² or %" msgstr "mm/s² or %" @@ -8917,16 +9685,16 @@ msgid "" "Acceleration of sparse infill. If the value is expressed as a percentage (e." "g. 100%), it will be calculated based on the default acceleration." msgstr "" -"드문 내부 채움 가속도. 값이 백분율 (예. 100%)로 표시되면 기본 가속도를 기준으" -"로 계산됩니다." +"드문 채우기 가속도. 값이 백분율 (예. 100%)로 표시되면 기본 가속도를 기준으로 " +"계산됩니다." msgid "" "Acceleration of internal solid infill. If the value is expressed as a " "percentage (e.g. 100%), it will be calculated based on the default " "acceleration." msgstr "" -"내부 꽉찬 내부 채움 가속도. 값이 백분율 (예. 100%)로 표시되면 기본 가속도를 " -"기준으로 계산됩니다." +"꽉찬 내부 채우기 가속도. 값이 백분율 (예. 100%)로 표시되면 기본 가속도를 기준" +"으로 계산됩니다." msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " @@ -8959,7 +9727,7 @@ msgid "Jerk for top surface" msgstr "상단 표면 저크" msgid "Jerk for infill" -msgstr "내부 채움 저크" +msgstr "채우기 저크" msgid "Jerk for initial layer" msgstr "초기 레이어 저크" @@ -8983,13 +9751,13 @@ msgstr "" "접착력을 향상시킬 수 있습니다" msgid "Speed of initial layer except the solid infill part" -msgstr "꽉찬 내부 채움 부분을 제외한 초기 레이어 속도" +msgstr "꽉찬 채우기 부분을 제외한 초기 레이어 속도" msgid "Initial layer infill" -msgstr "초기 레이어 내부 채움" +msgstr "초기 레이어 채우기" msgid "Speed of solid infill part of initial layer" -msgstr "초기 레이어의 꽉찬 내부 채움 속도" +msgstr "초기 레이어의 꽉찬 채우기 속도" msgid "Initial layer travel speed" msgstr "초기 레이어 이동 속도" @@ -9004,7 +9772,7 @@ msgid "" "The first few layers are printed slower than normal. The speed is gradually " "increased in a linear fashion over the specified number of layers." msgstr "" -"처음 몇 개의 레이어는 평소보다 느리게 인쇄됩니다. 속도는 지정된 레이어 수에 " +"처음 몇 개의 레이어는 평소보다 느리게 출력됩니다. 속도는 지정된 레이어 수에 " "걸쳐 선형 방식으로 점차 증가합니다." msgid "Initial layer nozzle temperature" @@ -9018,10 +9786,10 @@ msgstr "팬 최대 속도 레이어" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "팬 속도는 \"close_fan_the_first_x_layers\" 의 0에서 \"full_fan_speed_layer\" " "의 최고 속도까지 선형적으로 증가합니다. \"full_fan_speed_layer\"가 " @@ -9046,11 +9814,8 @@ msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" msgstr "" -"표면이 거칠게 보이도록 벽을 출력하는 동안 임의로 움직입니다. 이 설정은 퍼지 " -"위치를 제어합니다" - -msgid "None" -msgstr "없음" +"벽을 출력하는 동안 무작위로 지터가 발생하여 표면이 거칠게 보입니다. 이 설정" +"은 퍼지 위치를 제어합니다" msgid "Contour" msgstr "윤곽" @@ -9081,23 +9846,23 @@ msgid "Apply fuzzy skin to first layer" msgstr "첫 번째 레이어에 퍼지 스킨 적용" msgid "Whether to apply fuzzy skin on the first layer" -msgstr "첫 번째 레이어에 보송보송한 스킨을 적용할지 여부" +msgstr "첫 번째 레이어에 퍼지 스킨을 적용할지 여부" msgid "Filter out tiny gaps" -msgstr "작은 갭 필터링" +msgstr "작은 간격 필터링" msgid "Layers and Perimeters" msgstr "레이어와 윤곽선" msgid "Filter out gaps smaller than the threshold specified" -msgstr "지정된 임계값보다 작은 갭을 필터링합니다" +msgstr "지정된 임계값보다 작은 간격을 필터링합니다" msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " "printed more slowly" msgstr "" -"갭 내부 채움 속도. 갭은 일반적으로 불규칙한 선 너비를 가지며 더 느리게 출력되" -"어야 합니다" +"간격 채우기 속도. 간격은 일반적으로 선 너비가 불규칙하므로 더 천천히 출력해" +"야 합니다" msgid "Arc fitting" msgstr "원호 맞춤" @@ -9140,7 +9905,7 @@ msgid "Undefine" msgstr "알수없음" msgid "Hardened steel" -msgstr "경화강 노즐" +msgstr "경화강" msgid "Stainless steel" msgstr "스테인레스강 노즐" @@ -9205,7 +9970,7 @@ msgstr "" "목표한 시작 시간보다 이 시간(소수 초를 사용할 수 있음) 일찍 팬을 시작합니다. " "이 시간 추정을 위해 무한 가속을 가정하고 G1 및 G0 이동만 고려합니다(원호 맞춤" "은 지원되지 않음).\n" -"사용자 지정 G코드에서 팬 명령을 이동하지 않습니다(일종의 '장벽' 역할을 함).\n" +"사용자 정의 G코드에서 팬 명령을 이동하지 않습니다(일종의 '장벽' 역할을 함).\n" "'사용자 정의 시작 G코드만'이 활성화된 경우 팬 명령을 시작 G코드로 이동하지 않" "습니다.\n" "비활성화하려면 0을 사용하세요." @@ -9280,9 +10045,10 @@ msgid "" "plugin. This settings is NOT compatible with Single Extruder Multi Material " "setup and Wipe into Object / Wipe into Infill." msgstr "" -"이 옵션을 선택하면 G코드 출력시 이동에 이름표를 추가할 수 있습니다. 이는 " -"Octoprint CancelObject 플러그인에 유용합니다. 단일 압출기 다중 재료 설정 및 " -"개체에서 닦기/내부 채움에서 닦기와 호환되지 않습니다." +"이 옵션을 선택하면 G코드 출력시 이동에 설명을 추가할 수 있습니다. 이는 " +"Octoprint CancelObject 플러그인에 유용합니다. \n" +"이 설정은 단일 압출기 다중 재료 설정 및 개체에서 닦기 / 채우기에서 닦기와 호" +"환되지 않습니다." msgid "Exclude objects" msgstr "개체 제외" @@ -9303,37 +10069,36 @@ msgstr "" "속도가 느려질 수 있습니다." msgid "Infill combination" -msgstr "내부 채움 결합" +msgstr "채우기 결합" msgid "" "Automatically Combine sparse infill of several layers to print together to " "reduce time. Wall is still printed with original layer height." msgstr "" -"여러 레이어의 드문 내부 채움을 자동으로 결합 후 함께 출력하여 시간을 단축합니" +"여러 레이어의 드문 채우기를 자동으로 결합 후 함께 출력하여 시간을 단축합니" "다. 벽은 여전히 설정된 레이어 높이로 출력됩니다." msgid "Filament to print internal sparse infill." -msgstr "내부 드문 내부 채움을 출력할 필라멘트." +msgstr "내부 드문 채우기를 출력할 필라멘트." msgid "" "Line width of internal sparse infill. If expressed as a %, it will be " "computed over the nozzle diameter." msgstr "" -"내부 드문 내부 채움의 선 너비. %로 입력 시 노즐 직경에 대한 비율로 계산됩니" -"다." +"드문 내부 채우기의 선 너비. %로 입력 시 노즐 직경에 대한 비율로 계산됩니다." msgid "Infill/Wall overlap" -msgstr "내부 채움/벽 겹치기" +msgstr "채우기/벽 겹치기" msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " "The percentage value is relative to line width of sparse infill" msgstr "" -"내부 채움 영역이 벽과 겹치도록 약간 확장되어 접착력이 향상됩니다. 드문 내부 " -"채움 선 너비의 백분율 값입니다" +"채우기 영역이 벽과 겹치도록 약간 확장되어 접착력이 향상됩니다. 드문 채우기 " +"선 너비의 백분율 값입니다" msgid "Speed of internal sparse infill" -msgstr "내부 드문 내부 채움 속도" +msgstr "내부 드문 채우기 속도" msgid "Interface shells" msgstr "접점 쉘" @@ -9429,6 +10194,19 @@ msgid "" "acceleration to print" msgstr "기기가 낮은 가속도를 사용하여 출력하는 무음 모드 지원 여부" +msgid "Emit limits to G-code" +msgstr "G코드에 대한 방출 제한" + +msgid "Machine limits" +msgstr "장치 한계" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" +"활성화되면 기계의 한계가 G코드 파일로 내보내집니다.\n" +"G코드 유형이 Klipper로 설정된 경우 이 옵션은 무시됩니다." + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9437,7 +10215,7 @@ msgstr "" "일시 정지 G코드를 삽입할 수 있습니다" msgid "This G-code will be used as a custom code" -msgstr "이 G코드는 사용자 지정 코드로 사용됩니다" +msgstr "이 G코드는 사용자 정의 코드로 사용됩니다" msgid "Maximum speed X" msgstr "X축 최대 속도" @@ -9451,9 +10229,6 @@ msgstr "Z축 최대 속도" msgid "Maximum speed E" msgstr "E축 최대 속도" -msgid "Machine limits" -msgstr "장치 한계" - msgid "Maximum X speed" msgstr "X축 최대 속도" @@ -9533,10 +10308,10 @@ msgid "Maximum acceleration for extruding (M204 P)" msgstr "압출 중 최대 가속도 (M204 P)" msgid "Maximum acceleration for retracting" -msgstr "퇴출 중 최대 가속도" +msgstr "후퇴 중 최대 가속도" msgid "Maximum acceleration for retracting (M204 R)" -msgstr "퇴출 중 최대 가속도 (M204 R)" +msgstr "후퇴 중 최대 가속도 (M204 R)" msgid "Maximum acceleration for travel" msgstr "이동 최대 가속도" @@ -9602,12 +10377,12 @@ msgstr "" "\n" "값이 0이면 기능이 비활성화됩니다.\n" "\n" -"고속, 고유량 직접 구동 프린터(예: Bambu lab 또는 Voron)의 경우 일반적으로 이 " -"값이 필요하지 않습니다. 그러나 기능 속도가 크게 달라지는 특정 경우에는 약간" -"의 이점을 제공할 수 있습니다. 예를 들어 돌출부로 인해 급격하게 감속이 발생하" -"는 경우입니다. 이러한 경우 약 300-350mm3/s2의 높은 값이 권장됩니다. 이렇게 하" -"면 프레셔 어드밴스가 더 부드러운 유량 전환을 달성하는 데 도움이 될 만큼 충분" -"히 매끄러워질 수 있기 때문입니다.\n" +"고속, 고유량 직접 구동 프린터(예: 뱀부랩 또는 보론)의 경우 일반적으로 이 값" +"이 필요하지 않습니다. 그러나 기능 속도가 크게 달라지는 특정 경우에는 약간의 " +"이점을 제공할 수 있습니다. 예를 들어 돌출부로 인해 급격하게 감속이 발생하는 " +"경우입니다. 이러한 경우 약 300-350mm3/s2의 높은 값이 권장됩니다. 이렇게 하면 " +"프레셔 어드밴스가 더 부드러운 유량 전환을 달성하는 데 도움이 될 만큼 충분히 " +"매끄러워질 수 있기 때문입니다.\n" "\n" "프레셔 어드밴스 기능이 없는 느린 프린터의 경우 값을 훨씬 낮게 설정해야 합니" "다. 10-15mm3/s2 값은 직접 구동 압출기의 좋은 시작점이고 보우덴 스타일의 경우 " @@ -9698,11 +10473,11 @@ msgid "Host Type" msgstr "호스트 유형" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r은 G코드 파일을 프린터 호스트에 업로드할 수 있습니다. 이 필드는 호스트" -"의 종류를 포함해야 합니다." +"Orca Slicer은 G코드 파일을 프린터 호스트에 업로드할 수 있습니다. 이 필드는 호" +"스트의 종류를 포함해야 합니다." msgid "Nozzle volume" msgstr "노즐 부피" @@ -9764,17 +10539,16 @@ msgid "The start and end points which is from cutter area to garbage can." msgstr "절단 영역에서 버릴 영역까지의 시작점과 끝점." msgid "Reduce infill retraction" -msgstr "내부 채움 퇴출 감소" +msgstr "채우기 후퇴 감소" msgid "" "Don't retract when the travel is in infill area absolutely. That means the " "oozing can't been seen. This can reduce times of retraction for complex " "model and save printing time, but make slicing and G-code generating slower" msgstr "" -"이동 구간이 확실히 내부 채움 지역에 있을 때 퇴출하지 않습니다. 이는 외부에서" -"는 필라멘트의 누액(우즈)이 보이지 않는다는 것을 의미합니다. 복잡한 모델의 퇴" -"출 시간을 줄이고 출력 시간을 절약할 수 있지만 슬라이싱 및 G코드 생성 속도가 " -"느려집니다" +"이동 구간이 채우기 영역에 있을 때 수축하지 마십시오. 즉, 스며드는 것을 볼 수 " +"없습니다. 이는 복잡한 모델의 후퇴 시간을 줄이고 출력 시간을 절약할 수 있지만 " +"슬라이싱 및 G 코드 생성 속도를 느리게 만듭니다" msgid "Enable" msgstr "활성화" @@ -9817,7 +10591,7 @@ msgid "mm²" msgstr "mm²" msgid "Detect overhang wall" -msgstr "돌출벽 감지" +msgstr "돌출부 벽 감지" #, c-format, boost-format msgid "" @@ -9825,7 +10599,7 @@ msgid "" "speed to print. For 100%% overhang, bridge speed is used." msgstr "" "선 너비에 비례하여 돌출부 백분율을 감지하고 다른 속도를 사용하여 출력합니다. " -"100%% 돌출부의 경우 다리 속도가 사용됩니다." +"100%% 돌출부의 경우 브릿지 속도가 사용됩니다." msgid "" "Line width of inner wall. If expressed as a %, it will be computed over the " @@ -9838,17 +10612,38 @@ msgstr "내벽 속도" msgid "Number of walls of every layer" msgstr "모든 레이어의 벽 수" +msgid "Alternate extra wall" +msgstr "대체 추가 벽" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" +"이 설정은 다른 모든 레이어에 추가 벽을 추가합니다. 이렇게 하면 충전재가 벽 사" +"이에 수직으로 끼워져 더 강한 출력물을 얻을 수 있습니다.\n" +"\n" +"이 옵션이 활성화되면 수직 쉘 두께 확인 옵션을 비활성화해야 합니다.\n" +"\n" +"추가 경계를 고정할 채우기가 제한되어 있으므로 이 옵션과 함께 번개 채우기를 사" +"용하는 것은 권장되지 않습니다." + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" "사용자 정의 스크립트를 통해 출력 G코드를 처리하려면 여기에 절대 경로를 나열하" "세요. 여러 스크립트는 세미콜론(;)으로 구분합니다. 스크립트는 G코드 파일의 절" -"대 경로를 첫 번째 인수로 전달하며 환경 변수를 읽어 Slic3r 구성 설정에 접근할 " -"수 있습니다." +"대 경로를 첫 번째 값으로 전달하며 환경 변수를 읽어 Orca Slicer 구성 설정에 접" +"근할 수 있습니다." msgid "Printer notes" msgstr "프린터 메모" @@ -9905,48 +10700,45 @@ msgstr "이동 거리 임계값" msgid "" "Only trigger retraction when the travel distance is longer than this " "threshold" -msgstr "임계값보다 먼 거리 이동의 경우에만 퇴출을 실행합니다" +msgstr "이동 거리가 이 임계값보다 긴 경우에만 후퇴를 실행합니다" msgid "Retract amount before wipe" -msgstr "닦기 전 퇴출량" +msgstr "닦기 전 후퇴량" msgid "" "The length of fast retraction before wipe, relative to retraction length" msgstr "" -"퇴출 길이에 비례한 닦기 전 퇴출량(닦기를 시작하기 전에 일부 필라멘트를 퇴출시" +"후퇴 길이에 비례한 닦기 전 후퇴량(닦기를 시작하기 전에 일부 필라멘트를 후퇴시" "키면 노즐 끝에 녹아있는 소량의 필라멘트만 남게되어 추가 누수 위험이 줄어들 " "수 있습니다)" msgid "Retract when change layer" -msgstr "레이어 변경 시 퇴출" +msgstr "레이어 변경 시 후퇴" msgid "Force a retraction when changes layer" -msgstr "레이어 변경 시 강제로 퇴출을 실행합니다" - -msgid "Length" -msgstr "길이" +msgstr "레이어 변경 시 강제로 후퇴를 실행합니다" msgid "Retraction Length" -msgstr "퇴출 길이" +msgstr "후퇴 길이" msgid "" "Some amount of material in extruder is pulled back to avoid ooze during long " "travel. Set zero to disable retraction" msgstr "" -"긴 이동 중에 필라멘트가 스며드는 것을 방지하기 위해 압출기의 재료를 약간 뒤" -"로 당깁니다. 퇴출을 비활성화하려면 0을 설정하세요" +"긴 이동 중에 필라멘트가 흘러나오는 것을 방지하기 위해 압출기의 일정량의 재료" +"를 뒤로 당깁니다. 후퇴를 비활성화하려면 0을 설정하세요" msgid "Z hop when retract" -msgstr "퇴출 시 Z 올리기" +msgstr "후퇴 시 Z 올리기" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " "clearance between nozzle and the print. It prevents nozzle from hitting the " "print when travel move. Using spiral line to lift z can prevent stringing" msgstr "" -"퇴출 동작을 할 때마다 노즐을 약간 들어 올려 노즐과 출력물 사이의 간격을 만듭" -"니다. 이동 시 노즐이 출력물에 부딪히는 것을 방지합니다. 나선 라인(Spiral " -"line)을 사용하여 Z를 올리면 실 발생을 방지할 수 있습니다" +"후퇴가 완료될 때마다 노즐이 약간 올라가서 노즐과 출력물 사이에 간격이 생깁니" +"다. 이동 시 노즐이 출력물에 닿는 것을 방지합니다. 나선형 선을 사용하여 z를 들" +"어 올리면 스트링 현상을 방지할 수 있습니다" msgid "Z hop lower boundary" msgstr "Z 올리기 하한 경계" @@ -10026,46 +10818,46 @@ msgid "" "When the retraction is compensated after the travel move, the extruder will " "push this additional amount of filament. This setting is rarely needed." msgstr "" -"이동 후 퇴출이 보정되면 압출기가 보정된 양 만큼의 추가 필라멘트를 밀어냅니" -"다. 이 설정은 거의 필요하지 않습니다." +"이동 후 후퇴가 보상되면 압출기는 이 추가 양의 필라멘트를 밀어냅니다. 이 설정" +"은 거의 필요하지 않습니다." msgid "" "When the retraction is compensated after changing tool, the extruder will " "push this additional amount of filament." msgstr "" -"툴 교체 후 퇴출이 보정되면 압출기가 보정된 양 만큼의 추가 필라멘트를 밀어냅니" -"다." +"툴 교체 후 후퇴가 보상되면 압출기는 이 추가 양의 필라멘트를 밀어냅니다." msgid "Retraction Speed" -msgstr "퇴출 속도" +msgstr "후퇴 속도" msgid "Speed of retractions" -msgstr "퇴출 속도" +msgstr "후퇴 속도" msgid "Deretraction Speed" -msgstr "퇴출 복귀 속도" +msgstr "후퇴 복귀 속도" msgid "" "Speed for reloading filament into extruder. Zero means same speed with " "retraction" msgstr "" -"필라멘트를 압출기로 되돌리는 속도. 0은 퇴출 속도와 동일한 속도를 의미합니다" +"필라멘트를 압출기에 다시 로드하는 속도입니다. 0은 후퇴와 동일한 속도를 의미합" +"니다" msgid "Use firmware retraction" -msgstr "펌웨어 퇴출 사용" +msgstr "펌웨어 후퇴 사용" msgid "" "This experimental setting uses G10 and G11 commands to have the firmware " "handle the retraction. This is only supported in recent Marlin." msgstr "" -"이 실험적 설정은 G10 및 G11 명령을 사용하여 펌웨어가 퇴출을 처리하도록 합니" +"이 실험적 설정은 G10 및 G11 명령을 사용하여 펌웨어가 후퇴를 처리하도록 합니" "다. 이것은 최근의 Marlin에서만 지원됩니다." msgid "Show auto-calibration marks" msgstr "자동 교정 기호 표시" msgid "Disable set remaining print time" -msgstr "남은 인쇄 시간 설정 비활성화" +msgstr "설정된 남은 출력 시간 비활성화" msgid "Seam position" msgstr "솔기 위치" @@ -10096,7 +10888,7 @@ msgstr "" "합니다." msgid "Seam gap" -msgstr "솔기 갭" +msgstr "솔기 간격" msgid "" "In order to reduce the visibility of the seam in a closed loop extrusion, " @@ -10130,6 +10922,21 @@ msgstr "" "폐쇄 루프 압출에서 솔기의 가시성을 최소화하기 위해 압출기가 루프를 떠나기 전" "에 안쪽으로의 작은 이동이 실행됩니다." +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "닦기 속도" @@ -10177,21 +10984,21 @@ msgstr "" "선하기 위해 느려집니다" msgid "Minimum sparse infill threshold" -msgstr "최소 드문 내부 채움 임계값" +msgstr "최소 드문 채우기 임계값" msgid "" "Sparse infill area which is smaller than threshold value is replaced by " "internal solid infill" -msgstr "임계값보다 작은 드문 내부 채움 영역은 내부 꽉찬 내부 채움로 대체됩니다" +msgstr "임계값보다 작은 드문 채우기 영역은 꽉찬 내부 채우기로 대체됩니다" msgid "" "Line width of internal solid infill. If expressed as a %, it will be " "computed over the nozzle diameter." msgstr "" -"내부 꽉찬 내부 채움 선 너비. %로 입력 시 노즐 직경에 대한 비율로 계산됩니다." +"꽉찬 내부 채우기 선 너비. %로 입력 시 노즐 직경에 대한 비율로 계산됩니다." msgid "Speed of internal solid infill, not the top and bottom surface" -msgstr "상단 및 하단 표면을 제외한 내부 꽉찬 내부 채움 속도" +msgstr "상단 및 하단 표면을 제외한 꽉찬 내부 채우기 속도" msgid "Spiral vase" msgstr "나선형 꽃병 모드" @@ -10318,8 +11125,8 @@ msgid "" "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" "간격 폐쇄 반경의 2배보다 작은 균열은 삼각형 메쉬 슬라이싱 중에 채워집니다. 간" -"격 채움 작업은 최종 출력 해상도를 감소시킬 수 있으므로 값을 합리적으로 낮게 " -"유지하는 것이 좋습니다." +"격 채우기 작업은 최종 출력 해상도를 감소시킬 수 있으므로 값을 합리적으로 낮" +"게 유지하는 것이 좋습니다." msgid "Slicing Mode" msgstr "슬라이싱 모드" @@ -10442,7 +11249,7 @@ msgstr "베이스용 인터페이스 필라멘트 줄이기" msgid "" "Avoid using support interface filament to print support base if possible." msgstr "" -"서포트 베이스를 프린트하기 위해 서포트 인터페이스 필라멘트를 사용하지 마세요" +"지지대 베이스를 프린트하기 위해 지지대 인터페이스 필라멘트를 사용하지 마세요." msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -10665,13 +11472,13 @@ msgstr "끝 직경" #. TRN PrintSettings: "Organic supports" > "Tip Diameter" msgid "Branch tip diameter for organic supports." -msgstr "유기체 지지대의 가지 끝 직경." +msgstr "유기 지지체의 가지 끝 직경." msgid "Tree support branch diameter" msgstr "나무 지지대 가지 직경" msgid "This setting determines the initial diameter of support nodes." -msgstr "이 설정은 트리 지지대 지점의 초기 직경을 결정합니다." +msgstr "이 설정은 지지 노드의 초기 직경을 결정합니다." #. TRN PrintSettings: #lmFIXME msgid "Branch Diameter Angle" @@ -10689,7 +11496,7 @@ msgstr "" "수 있습니다." msgid "Branch Diameter with double walls" -msgstr "이중벽 허용 가지 직경" +msgstr "이중 벽이 있는 가지 직경" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" msgid "" @@ -10707,13 +11514,13 @@ msgid "This setting specify the count of walls around support" msgstr "이 설정은 지지대 주변의 벽 수를 지정합니다" msgid "Tree support with infill" -msgstr "내부 채움이 있는 나무 지지대" +msgstr "채우기가 있는 나무 지지대" msgid "" "This setting specifies whether to add infill inside large hollows of tree " "support" msgstr "" -"이 설정은 나무 지지대의 큰 공동 내부에 내부 채움을 추가할지 여부를 지정합니다" +"이 설정은 나무 지지대의 큰 공동 내부에 채우기를 추가할지 여부를 지정합니다" msgid "Activate temperature control" msgstr "온도 제어 활성화" @@ -10774,7 +11581,7 @@ msgid "" msgstr "상단 표면의 선 너비. %로 입력 시 노즐 직경에 대한 비율로 계산됩니다." msgid "Speed of top surface infill which is solid" -msgstr "상단 표면 내부 채움 속도" +msgstr "꽉찬 상단 표면 채우기 속도" msgid "Top shell layers" msgstr "상단 쉘 레이어" @@ -10809,14 +11616,14 @@ msgid "Speed of travel which is faster and without extrusion" msgstr "압출이 없을 때의 이동 속도" msgid "Wipe while retracting" -msgstr "퇴출 시 닦기" +msgstr "후퇴 시 닦기" msgid "" "Move nozzle along the last extrusion path when retracting to clean leaked " "material on nozzle. This can minimize blob when print new part after travel" msgstr "" -"노즐에서 누출된 재료를 청소하기 위해 퇴출할 때 마지막 압출 경로를 따라 노즐" -"을 이동합니다. 이동 후 출력을 시작할 때 방울(Blob)을 최소화할 수 있습니다" +"노즐에서 누출된 재료를 청소하기 위해 후퇴할 때 마지막 압출 경로를 따라 노즐" +"을 이동합니다. 이동 후 출력을 시작할 때 방울(blob)을 최소화할 수 있습니다" msgid "Wipe Distance" msgstr "닦기 거리" @@ -10866,9 +11673,6 @@ msgstr "프라임 부피" msgid "The volume of material to prime extruder on tower." msgstr "탑에서 압출을 실행할 재료의 부피." -msgid "Width" -msgstr "너비" - msgid "Width of prime tower" msgstr "프라임 타워의 너비" @@ -10921,10 +11725,10 @@ msgid "" "printed with transparent filament, the mixed color infill will be seen " "outside. It will not take effect, unless the prime tower is enabled." msgstr "" -"필라멘트 변경 후 버리기는 개체의 내부 채움 내부에서 수행됩니다. 이렇게 하면 " -"낭비되는 양이 줄어들고 출력 시간이 단축될 수 있습니다. 만약 벽이 투명한 필라" -"멘트로 출력된다면, 혼합된 색 내부 채움이 밖에서 보일 것입니다. 프라임 타워가 " -"활성화되지 않으면 적용되지 않습니다." +"필라멘트 교체 후 버리기는 개체의 채우기 내부에서 수행됩니다. 이렇게 하면 낭비" +"되는 양이 줄어들고 출력 시간이 단축될 수 있습니다. 벽이 투명 필라멘트로 출력" +"된 경우 혼합 색상 충전재가 외부에 보입니다. 프라임 타워가 활성화되지 않으면 " +"적용되지 않습니다." msgid "" "Purging after filament change will be done inside objects' support. This may " @@ -10945,10 +11749,10 @@ msgstr "" "다. 기본 타워가 활성화되지 않으면 적용되지 않습니다." msgid "Maximal bridging distance" -msgstr "최대 다리 거리" +msgstr "최대 브릿지 거리" msgid "Maximal distance between supports on sparse infill sections." -msgstr "드문 내부 채움 부분의 지지대 사이의 최대 거리." +msgstr "드문 채우기 부분의 지지대 사이의 최대 거리." msgid "X-Y hole compensation" msgstr "X-Y 구멍 보정" @@ -11038,21 +11842,17 @@ msgstr "상대적 E 거리 사용" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" -"상대적 압출은 \"label_objects\" 옵션(기타; 개체 이름표)을 사용할 때 권장됩니" -"다. 일부 압출기는 이 옵션을 해제하면 더 잘 작동합니다(절대 압출 모드). 닦기 " -"타워는 상대 모드에서만 호환됩니다" msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " "variable extrusion width" msgstr "" -"클래식 벽 생성기는 일정한 압출 너비를 가진 벽을 생성하며 매우 얇은 영역에 대" -"해 갭 내부 채움이 사용됩니다. 아라크네 엔진은 다양한 압출 너비를 가진 벽을 생" -"성합니다" +"클래식 벽 생성기는 돌출 폭이 일정한 벽을 생성하며 매우 얇은 영역에는 간격 채" +"움이 사용됩니다. 아라크네 엔진은 압출 폭이 가변적인 벽을 생성합니다." msgid "Classic" msgstr "클래식" @@ -11101,9 +11901,9 @@ msgid "" "leave gaps or overextrude" msgstr "" "벽의 짝수와 홀수 사이에 변환을 만드는 시기. 이 설정보다 큰 각도의 쐐기 모양" -"은 변환되지 않으며 나머지 공간 채움을 위해 중앙에 벽이 출력되지 않습니다. 이 " -"설정을 줄이면 중앙 벽의 수와 길이가 줄어들지만 간격이 남거나 과도하게 돌출될 " -"수 있습니다" +"은 변환되지 않으며 나머지 공간 채우기를 위해 중앙에 벽이 출력되지 않습니다. " +"이 설정을 줄이면 중앙 벽의 수와 길이가 줄어들지만 간격이 남거나 과도하게 돌출" +"될 수 있습니다" msgid "Wall distribution count" msgstr "벽 분포 수" @@ -11153,16 +11953,16 @@ msgstr "" "대한 백분율로 표시됩니다" msgid "Detect narrow internal solid infill" -msgstr "좁은 내부 꽉찬 내부 채움 감지" +msgstr "좁은 꽉찬 내부 채우기 감지" msgid "" "This option will auto detect narrow internal solid infill area. If enabled, " "concentric pattern will be used for the area to speed printing up. " "Otherwise, rectilinear pattern is used defaultly." msgstr "" -"이 옵션은 좁은 내부 꽉찬 내부 채움 영역을 자동으로 감지합니다. 활성화하면 출" -"력 속도를 높이기 위해 해당 영역에 동심 패턴이 사용됩니다. 그렇지 않으면 직선 " -"패턴이 기본적으로 사용됩니다." +"이 옵션은 좁은 꽉찬 내부 채우기 영역을 자동으로 감지합니다. 활성화하면 출력 " +"속도를 높이기 위해 해당 영역에 동심 패턴이 사용됩니다. 그렇지 않으면 기본적으" +"로 직선 패턴이 사용됩니다." msgid "invalid value " msgstr "잘못된 값 " @@ -11220,26 +12020,26 @@ msgid "" "maintaining different profiles or including configurations from a network " "storage." msgstr "" -"지정된 디렉토리에 설정을 로드하고 저장합니다. 이 기능은 서로 다른 프로필을 유" -"지하거나 네트워크 스토리지의 구성을 포함하는 데 유용합니다." +"지정된 디렉토리에 설정을 로드하고 저장합니다. 이 기능은 서로 다른 사전설정을 " +"유지하거나 네트워크 스토리지의 구성을 포함하는 데 유용합니다." msgid "Load custom gcode" -msgstr "사용자 설정 G코드 불러오기" +msgstr "사용자 정의 G코드 불러오기" msgid "Load custom gcode from json" -msgstr "사용자 설정 G코드를 json에서 불러오기" +msgstr "사용자 정의 G코드를 json에서 불러오기" msgid "Error in zip archive" -msgstr "ZIP 압축파일 오류" +msgstr "zip 압축파일 오류" msgid "Generating walls" msgstr "벽 생성 중" msgid "Generating infill regions" -msgstr "내부 채움 영역 생성 중" +msgstr "채우기 영역 생성 중" msgid "Generating infill toolpath" -msgstr "내부 채움 툴 경로 생성 중" +msgstr "채우기 툴 경로 생성 중" msgid "Detect overhangs for auto-lift" msgstr "Z 올리기를 위한 돌출부 감지" @@ -11513,7 +12313,7 @@ msgstr "" "3. 필라멘트 설정에서 최대 체적 속도나 출력 온도가 변경된 경우." msgid "About this calibration" -msgstr "이 교정 정보" +msgstr "교정 정보" msgid "" "Please find the details of Flow Dynamics Calibration from our wiki.\n" @@ -11593,10 +12393,10 @@ msgid "" "more details, please check out the wiki article." msgstr "" "유량 교정은 예상되는 압출량과 실제 압출량의 비율을 측정합니다. 기본 설정은 사" -"전 보정되고 미세 조정된 Bambu Lab 프린터 및 공식 필라멘트에서 잘 작동합니다. " -"일반 필라멘트의 경우 일반적으로 다른 교정을 수행한 후에도 나열된 결함이 표시" -"되지 않는 한 유량 교정을 수행할 필요가 없습니다. 자세한 내용은 위키를 확인하" -"시기 바랍니다." +"전 보정되고 미세 조정된 뱀부랩 프린터 및 공식 필라멘트에서 잘 작동합니다. 일" +"반 필라멘트의 경우 일반적으로 다른 교정을 수행한 후에도 나열된 결함이 표시되" +"지 않는 한 유량 교정을 수행할 필요가 없습니다. 자세한 내용은 위키를 확인하시" +"기 바랍니다." msgid "" "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " @@ -11783,7 +12583,7 @@ msgid "" msgstr "" "교정 재료에 대한 팁:\n" "- 동일한 히트베드 온도를 공유할 수 있는 소재\n" -"- 다양한 필라멘트 브랜드 및 제품군(브랜드 = Bambu, 제품군 = Basic, Matte)" +"- 다양한 필라멘트 브랜드 및 제품군(브랜드 = 뱀부, 제품군 = 기본, 메트)" msgid "Pattern" msgstr "패턴" @@ -12007,10 +12807,10 @@ msgstr "" "끝 > 시작 + 단계)" msgid "Start retraction length: " -msgstr "퇴출 시작 길이: " +msgstr "후퇴 시작 길이: " msgid "End retraction length: " -msgstr "퇴출 종료 길이: " +msgstr "후퇴 종료 길이: " msgid "mm/mm" msgstr "mm/mm" @@ -12102,10 +12902,10 @@ msgid "selected" msgstr "선택됨" msgid "Part 1" -msgstr "요소 1" +msgstr "부품 1" msgid "Part 2" -msgstr "요소 2" +msgstr "부품 2" msgid "Delete input" msgstr "입력개체 삭제" @@ -12219,7 +13019,7 @@ msgid "Serial" msgstr "시리얼" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "예를 들어 베이직, 매트, 실크, 마블" +msgstr "예를 들어 기본, 매트, 실크, 마블" msgid "Filament Preset" msgstr "필라멘트 사전 설정" @@ -12231,7 +13031,9 @@ msgid "Vendor is not selected, please reselect vendor." msgstr "공급업체가 선택되지 않았습니다. 공급업체를 다시 선택하세요." msgid "Custom vendor is not input, please input custom vendor." -msgstr "맞춤 공급업체가 입력되지 않았습니다. 맞춤 공급업체를 입력해 주세요." +msgstr "" +"사용자 정의 공급업체가 입력되지 않았습니다. 사용자 정의 공급업체를 입력해 주" +"세요." msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." @@ -12274,8 +13076,8 @@ msgstr "" "다시 작성하시겠습니까?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more prinetrs, Please go to printer selection" msgstr "" "사전 설정의 이름을 \"선택한 공급업체 유형 직렬 @프린터\"로 변경합니다.\n" @@ -12296,9 +13098,6 @@ msgstr "템플릿에서 생성" msgid "Create Based on Current Printer" msgstr "현재 프린터를 기반으로 생성" -msgid "wiki" -msgstr "위키" - msgid "Import Preset" msgstr "사전 설정 가져오기" @@ -12324,7 +13123,7 @@ msgid "Rectangle" msgstr "직사각형" msgid "Printable Space" -msgstr "인쇄 가능 공간" +msgstr "출력 가능 공간" msgid "X" msgstr "X" @@ -12345,7 +13144,7 @@ msgid "Load svg" msgstr "SVG 로드" msgid "Max Print Height" -msgstr "최대 인쇄 높이" +msgstr "최대 출력 높이" #, c-format, boost-format msgid "The file exceeds %d MB, please import again." @@ -12392,7 +13191,7 @@ msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" -"첫 번째 페이지의 인쇄 가능 영역 섹션에 잘못된 입력을 입력했습니다. 작성 전 " +"첫 번째 페이지의 출력 가능 영역 섹션에 잘못된 입력을 입력했습니다. 작성 전 " "꼭 확인해주세요." msgid "The custom printer or model is not inputed, place input." @@ -12453,7 +13252,7 @@ msgstr "" "주세요." msgid "Please check bed printable shape and origin input." -msgstr "인쇄 가능한 베드 형태와 원산지 입력을 확인해주세요." +msgstr "출력 가능한 베드 형태를 확인해주세요." msgid "" "You have not yet selected the printer to replace the nozzle, please choose." @@ -12481,7 +13280,7 @@ msgid "" "them carefully." msgstr "" "필요한 경우 필라멘트 설정으로 이동하여 사전 설정을 편집하세요.\n" -"노즐 온도, 핫베드 온도 및 최대 체적 속도는 인쇄 품질에 큰 영향을 미칩니다. 신" +"노즐 온도, 핫베드 온도 및 최대 체적 속도는 출력 품질에 큰 영향을 미칩니다. 신" "중하게 설정해 주세요." msgid "Printer Setting" @@ -12490,11 +13289,11 @@ msgstr "프린터 설정" msgid "Export Configs" msgstr "구성 내보내기" -msgid "Printer config bundle(.bbscfg)" -msgstr "프린터 구성 번들(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" +msgstr "프린터 구성 번들(.orca_printer)" -msgid "Filament bundle(.bbsflmt)" -msgstr "필라멘트 번들(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" +msgstr "필라멘트 번들(.orca_filament)" msgid "Printer presets(.zip)" msgstr "프린터 사전 설정(.zip)" @@ -12518,7 +13317,7 @@ msgid "finalize fail" msgstr "마무리 실패" msgid "open zip written fail" -msgstr "ZIP 열기 실패" +msgstr "zip 열기 실패" msgid "Export successful" msgstr "내보내기 성공" @@ -12534,7 +13333,7 @@ msgstr "" "그렇지 않은 경우 시간 접미사가 추가되며 생성 후 이름을 수정할 수 있습니다." msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" "프린터와 프린터에 속한 모든 필라멘트 및 프로세스 사전 설정.\n" @@ -12544,7 +13343,7 @@ msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" -"사용자의 채우기 사전 설정입니다.\n" +"사용자 채우기 사전 설정입니다.\n" "다른 사람과 공유할 수 있습니다." msgid "" @@ -12711,7 +13510,7 @@ msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " "Keychain." msgstr "" -"사용자 지정 CA 파일을 사용하려면 CA 파일을 인증서 저장소/키체인으로 가져오십" +"사용자 정의 CA 파일을 사용하려면 CA 파일을 인증서 저장소/키체인으로 가져오십" "시오." msgid "Connection to printers connected via the print host failed." @@ -12719,7 +13518,7 @@ msgstr "출력 호스트를 통해 연결된 프린터에 연결하지 못했습 #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "일치하지 않는 인쇄 호스트 유형: %s" +msgstr "일치하지 않는 출력 호스트 유형: %s" msgid "Connection to AstroBox works correctly." msgstr "AstroBox 연결이 올바르게 작동합니다." @@ -12903,6 +13702,19 @@ msgstr "" "공기 여과/배기 팬\n" "오르카 슬라이서가 공기 여과/배기 팬을 지원할 수 있다는 사실을 알고 계셨나요?" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -12910,8 +13722,14 @@ msgid "" "3D scene operations." msgstr "" "키보드 단축키를 사용하는 방법\n" -"Orca Slicer가 다양한 키보드 단축키와 3D 장면 작업을 제공한다는 사실을 알고 계" -"셨습니까?" +"Orca Slicer가 다양한 키보드 단축키와 3D 장면 작업을 제공합니다." + +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -12939,7 +13757,7 @@ msgid "" "Did you know that you can generate a timelapse video during each print?" msgstr "" "타임랩스\n" -"각 인쇄 중에 타임랩스 비디오를 생성할 수 있다는 것을 알고 계셨습니까?" +"각 출력 중에 타임랩스 비디오를 생성할 수 있다는 것을 알고 계셨습니까?" #: resources/data/hints.ini: [hint:Auto-Arrange] msgid "" @@ -12956,7 +13774,7 @@ msgid "" "printing by a simple click?" msgstr "" "자동 방향 지정\n" -"간단한 클릭만으로 개체를 최적의 인쇄 방향으로 회전할 수 있다는 것을 알고 계셨" +"간단한 클릭만으로 개체를 최적의 출력 방향으로 회전할 수 있다는 것을 알고 계셨" "습니까?" #: resources/data/hints.ini: [hint:Lay on Face] @@ -12967,7 +13785,7 @@ msgid "" "F key." msgstr "" "면에 위치\n" -"모델의 바닥 표면을 빠르게 지정하여 인쇄 베드에 놓을 수 있다는 것을 알고 계셨" +"모델의 바닥 표면을 빠르게 지정하여 출력 베드에 놓을 수 있다는 것을 알고 계셨" "습니까? 면에 배치 기능을 선택하십시오. 또는F 키를 누르세요." #: resources/data/hints.ini: [hint:Object List] @@ -13054,7 +13872,7 @@ msgid "" "the overall look of your model. Check it out!" msgstr "" "Z 솔기 위치\n" -"Z 솔기의 위치를 사용자 지정하고 출력물에 칠하여 잘 보이지 않는 위치에 배치할 " +"Z 솔기의 위치를 사용자 정의하고 출력물에 칠하여 잘 보이지 않는 위치에 배치할 " "수 있다는 사실을 알고 있습니까? 이렇게 하면 모델의 전반적인 모양이 향상됩니" "다. 확인해 보세요!" @@ -13088,7 +13906,7 @@ msgid "" "Did you know that you can print a model even faster, by using the Adaptive " "Layer Height option? Check it out!" msgstr "" -"적응형 레이어 높이로 인쇄 속도를 높이세요\n" +"적응형 레이어 높이로 출력 속도를 높이세요\n" "적응형 레이어를 사용하면 모델을 더욱 빠르게 프린트할 수 있다는 사실을 알고 계" "셨습니까?레이어 높이 옵션을 확인해 보세요!" @@ -13101,7 +13919,7 @@ msgid "" msgstr "" "지지대 칠하기\n" "지지대의 위치를 칠할 수 있다는 것을 알고 있습니까? 이 기능을 사용하면 실제로 " -"필요한 모델 부위에만 서포트 재료를 쉽게 배치할 수 있습니다." +"필요한 모델 부위에만 지지대 재료를 쉽게 배치할 수 있습니다." #: resources/data/hints.ini: [hint:Different types of supports] msgid "" @@ -13122,7 +13940,7 @@ msgid "" "successfully? Higher temperature and lower speed are always recommended for " "the best results." msgstr "" -"실크 필라멘트 인쇄\n" +"실크 필라멘트 출력\n" "실크 필라멘트를 성공적으로 프린팅하려면 특별한 주의가 필요하다는 사실을 알고 " "계셨나요? 최상의 결과를 얻으려면 항상 더 높은 온도와 더 낮은 속도를 권장합니" "다." @@ -13133,9 +13951,9 @@ msgid "" "Did you know that when printing models have a small contact interface with " "the printing surface, it's recommended to use a brim?" msgstr "" -"더 나은 안착을 위한 브림\n" -"출력 모델이 베드 표면과의 접촉면이 작을 때 브림를 사용하는 것이 좋다는 사실" -"을 알고 있습니까?" +"접착력이 더 좋아지는 브림\n" +"모델을 출력할 때 베드 표면과의 접촉면이 작을 경우 브림을 사용하는 것이 권장된" +"다는 사실을 알고 계셨습니까?" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] msgid "" @@ -13161,9 +13979,9 @@ msgid "" "Did you know that you can save the wasted filament by flushing them into " "support/objects/infill during filament change?" msgstr "" -"지지대/개체/내부 채움에 버리기\n" -"필라멘트를 교체하는 동안 낭비되는 필라멘트를 지지대/개체/내부 채움에 버리기하" -"여 절약할 수 있다는 사실을 알고 있습니까?" +"지지대/개체/채우기에 버리기\n" +"필라멘트를 교체하는 동안 낭비되는 필라멘트를 지지대/개체/채우기에 버리기하여 " +"절약할 수 있다는 사실을 알고 있습니까?" #: resources/data/hints.ini: [hint:Improve strength] msgid "" @@ -13172,8 +13990,8 @@ msgid "" "density to improve the strength of the model?" msgstr "" "강도 향상\n" -"모델의 강도를 개선하기 위해 더 많은 벽 루프와 더 높은 드문 내부 채움 밀도를 " -"사용할 수 있다는 것을 알고 있습니까?" +"모델의 강도를 개선하기 위해 더 많은 벽 루프와 더 높은 드문 채우기 밀도를 사용" +"할 수 있다는 것을 알고 있습니까?" #: resources/data/hints.ini: [hint:When need to print with the printer door #: opened] @@ -13183,10 +14001,10 @@ msgid "" "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature. More info about this in the Wiki." msgstr "" -"프린터 도어를 연 상태에서 인쇄해야 하는 경우\n" -"프린터 도어를 열면 다음과 같은 위험이 줄어든다는 사실을 알고 계셨습니까?낮은 " -"온도의 필라멘트를 인쇄할 때 압출기/핫엔드 막힘인클로저 온도가 높아집니다. 이" -"에 대한 자세한 내용은 Wiki에서 확인하세요." +"프린터 도어를 연 상태로 출력해야 하는 경우\n" +"더 높은 프린터 내부 온도로 낮은 온도의 필라멘트를 출력할 때 프린터 도어를 열" +"면 압출기/핫엔드가 막힐 가능성을 줄일 수 있다는 것을 알고 계셨습니까? 이에 대" +"한 자세한 내용은 Wiki에서 확인하세요." #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -13196,8 +14014,65 @@ msgid "" "probability of warping." msgstr "" "뒤틀림 방지\n" -"다음과 같이 휘어지기 쉬운 소재를 인쇄할 때 알고 계셨나요?ABS, 히팅베드 온도" -"를 적절히 높이면 온도를 낮출 수 있습니다.뒤틀림 확률." +"ABS 등 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이" +"면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" + +#~ msgid "wiki" +#~ msgstr "위키" + +#~ msgid "" +#~ "Relative extrusion is recommended when using \"label_objects\" option." +#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "mode). Wipe tower is only compatible with relative mode. It is always " +#~ "enabled on BambuLab printers. Default is checked" +#~ msgstr "" +#~ "상대적 압출은 \"label_objects\" 옵션(기타; 개체 이름표)을 사용할 때 권장됩" +#~ "니다. 일부 압출기는 이 옵션을 해제하면 더 잘 작동합니다(절대 압출 모드). " +#~ "닦기 타워는 상대 모드에서만 호환됩니다" + +#~ msgid "Movement:" +#~ msgstr "이동:" + +#~ msgid "Movement" +#~ msgstr "이동" + +#~ msgid "Auto Segment" +#~ msgstr "자동 분할" + +#~ msgid "Depth ratio" +#~ msgstr "깊이 비율" + +#~ msgid "Prizm" +#~ msgstr "원기둥" + +#~ msgid "connector is out of cut contour" +#~ msgstr "커넥터가 잘라내기 윤곽을 벗어났습니다" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "커넥터가 잘라내기 윤곽을 벗어났습니다" + +#~ msgid "connector is out of object" +#~ msgstr "커넥터가 개체에서 벗어났습니다" + +#~ msgid "connectors is out of object" +#~ msgstr "커넥터가 개체에서 벗어났습니다" + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "잘못된 상태입니다.\n" +#~ "절단 후 유지를 위해 선택된 부품이 없습니다" + +#~ msgid "Recalculate" +#~ msgstr "다시계산" + +#~ msgid "" +#~ "Orca recalculates your flushing volumes everytime the filament colors " +#~ "change. You can change this behavior in Preferences." +#~ msgstr "" +#~ "Orca Slicer는 필라멘트 색상이 바뀔 때마다 플러싱 볼륨을 다시 계산합니다. " +#~ "환경 설정에서 이 동작을 변경할 수 있습니다." #~ msgid "" #~ "The printer timed out while receiving a print job. Please check if the " @@ -13242,30 +14117,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "빠른" -#~ msgid "Auto-Calc" -#~ msgstr "자동 계산" - -#~ msgid "Re-calculate" -#~ msgstr "다시 계산" - -#~ msgid "" -#~ "Studio would re-calculate your flushing volumes everytime the filaments " -#~ "color changed. You could disable the auto-calculate in Bambu Studio > " -#~ "Preferences" -#~ msgstr "" -#~ "Studio는 필라멘트를 교체할 때마다 플러싱 볼륨을 다시 계산합니다.색상이 변" -#~ "경되었습니다. Bambu Studio > 에서 자동 계산을 비활성화할 수 있습니다.환경" -#~ "설정" - -#~ msgid "unloaded" -#~ msgstr "언로드됨" - -#~ msgid "loaded" -#~ msgstr "로드됨" - -#~ msgid "Filament #" -#~ msgstr "필라멘트 #" - #~ msgid "Print sequence of inner wall and outer wall. " #~ msgstr "내벽과 외벽의 순서를 인쇄합니다." @@ -13300,11 +14151,11 @@ msgstr "" #~ "세요." #~ msgid "Filling bed " -#~ msgstr "베드 채움 " +#~ msgstr "베드 채우기 " #, boost-format #~ msgid "%1% infill pattern doesn't support 100%% density." -#~ msgstr "%1% 내부 채움 패턴은 100%% 밀도를 지원하지 않습니다." +#~ msgstr "%1% 내부 채우기 패턴은 100%% 밀도를 지원하지 않습니다." #~ msgid "" #~ "Switch to rectilinear pattern?\n" @@ -13330,7 +14181,7 @@ msgstr "" #, c-format #~ msgid "Density of internal sparse infill, 100% means solid throughout" #~ msgstr "" -#~ "내부 드문 내부 채움 밀도, 100은 전체가 꽉찬 내부 채움임을 의미합니다" +#~ "내부 드문 내부 채우기 밀도, 100은 전체가 꽉찬 내부 채우기임을 의미합니다" #~ msgid "Tree support wall loops" #~ msgstr "나무 지지대 벽 루프" @@ -13416,25 +14267,25 @@ msgstr "" #~ "패턴은 가파른 돌출부를 대폭 개선할 수 있습니다." #~ msgid "Order of inner wall/outer wall/infil" -#~ msgstr "내벽/외벽/내부 채움 순서" +#~ msgstr "내벽/외벽/내부 채우기 순서" #~ msgid "Print sequence of inner wall, outer wall and infill. " -#~ msgstr "내벽, 외벽 및 내부 채움 출력 순서 " +#~ msgstr "내벽, 외벽 및 내부 채우기 출력 순서 " #~ msgid "inner/outer/infill" -#~ msgstr "내벽/외벽/내부 채움" +#~ msgstr "내벽/외벽/내부 채우기" #~ msgid "outer/inner/infill" -#~ msgstr "외벽/내벽/내부 채움" +#~ msgstr "외벽/내벽/내부 채우기" #~ msgid "infill/inner/outer" -#~ msgstr "내부 채움/내벽/외벽" +#~ msgstr "내부 채우기/내벽/외벽" #~ msgid "infill/outer/inner" -#~ msgstr "내부 채움/외벽/내벽" +#~ msgstr "내부 채우기/외벽/내벽" #~ msgid "inner-outer-inner/infill" -#~ msgstr "내벽-외벽-내벽/내부 채움" +#~ msgstr "내벽-외벽-내벽/내부 채우기" #, c-format, boost-format #~ msgid "%%" diff --git a/localization/i18n/list.txt b/localization/i18n/list.txt index b8fde002ae..103b4ecaa8 100644 --- a/localization/i18n/list.txt +++ b/localization/i18n/list.txt @@ -7,13 +7,16 @@ src/slic3r/GUI/Gizmos/GLGizmoScale.cpp src/slic3r/GUI/Gizmos/GLGizmosManager.cpp src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp -src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +src/slic3r/GUI/Gizmos/GLGizmoCut.cpp src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp src/slic3r/GUI/Gizmos/GLGizmoFaceDetector.cpp src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp src/slic3r/GUI/Gizmos/GLGizmoText.cpp src/slic3r/GUI/Gizmos/GLGizmoText.hpp +src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp +src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp src/slic3r/GUI/GUI.cpp src/slic3r/GUI/GUI_App.cpp src/slic3r/GUI/GUI_AuxiliaryList.cpp diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index d81f0da686..409dfa75c2 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -213,6 +213,9 @@ msgstr "mm" msgid "Position" msgstr "Positie" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Rotatie" @@ -252,6 +255,7 @@ msgstr "Wereldcoördinaten" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Maat" @@ -261,6 +265,113 @@ msgstr "%" msgid "uniform scale" msgstr "Uniform schalen" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "Automatisch" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "Plug" + +msgid "Dowel" +msgstr "Deuvel" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Frustum" + +msgid "Square" +msgstr "Vierkant" + +msgid "Hexagon" +msgstr "Zeskant" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "Op kniplijn plaatsen" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "Verbindingen" + +msgid "Type" +msgstr "Type" + +msgid "Style" +msgstr "Stijl" + +msgid "Shape" +msgstr "Vorm" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "Breedte" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "Onderdeel" + +msgid "Object" +msgstr "Voorwerp" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Speling" + +msgid "Drag" +msgstr "Sleep" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Linker muisklik" @@ -273,9 +384,6 @@ msgstr "Rechter muisklik" msgid "Remove connector" msgstr "Verbinding verwijderen" -msgid "Drag" -msgstr "Sleep" - msgid "Move connector" msgstr "Verbinding verplaatsen" @@ -291,23 +399,51 @@ msgstr "Selecteer alle verbindingen" msgid "Cut" msgstr "Knippen" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "Model object repareren" +msgid "Remove connectors" +msgstr "Verbindingen verwijderen" -msgid "Connector" -msgstr "Verbinding" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "Beweging:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "Beweging" +msgid "Space" +msgstr "Ruimte" -msgid "Height" -msgstr "Hoogte" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Verbindingen bevestigen" + +msgid "Cancel" +msgstr "Annuleren" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "Terugzetten" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Verbindingen bewerken" @@ -315,6 +451,12 @@ msgstr "Verbindingen bewerken" msgid "Add connectors" msgstr "Verbindingen toevoegen" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Bovenste deel" @@ -324,9 +466,6 @@ msgstr "Onderste deel" msgid "Keep" msgstr "Behouden" -msgid "Place on cut" -msgstr "Op kniplijn plaatsen" - msgid "Flip" msgstr "Omdraaien" @@ -336,88 +475,56 @@ msgstr "Na knippen" msgid "Cut to parts" msgstr "In delen knippen" -msgid "Auto Segment" -msgstr "Automatische segmenteren" - msgid "Perform cut" msgstr "Knippen uitvoeren" -msgid "Reset" -msgstr "Terugzetten" - -msgid "Connectors" -msgstr "Verbindingen" - -msgid "Type" -msgstr "Type" - -msgid "Style" -msgstr "Stijl" - -msgid "Shape" -msgstr "Vorm" - -msgid "Depth ratio" -msgstr "Diepteratio" - -msgid "Remove connectors" -msgstr "Verbindingen verwijderen" - -msgid "Prizm" -msgstr "Prisma" - -msgid "Frustum" -msgstr "Frustum" - -msgid "Square" -msgstr "Vierkant" - -msgid "Hexagon" -msgstr "Zeskant" - -msgid "Confirm connectors" -msgstr "Verbindingen bevestigen" - -msgid "Cancel" -msgstr "Annuleren" - msgid "Warning" msgstr "Waarschuwing" msgid "Invalid connectors detected" msgstr "Onjuiste verbindingen gevonden" -msgid "connector is out of cut contour" -msgstr "Verbinding ligt buiten knipcontour" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" -msgid "connectors are out of cut contour" -msgstr "Verbindingen liggen buiten knipcontour" - -msgid "connector is out of object" -msgstr "Verbinding ligt buiten object" - -# Source and destination string both English, but different. Please clarify! -msgid "connectors is out of object" -msgstr "Connectors must be on object surface." +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" msgid "Some connectors are overlapped" msgstr "Sommige verbindingen overlappen" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"Foutieve staat. \n" -"Geen onderdelen geselecteerd om te behouden na knippen" -msgid "Plug" -msgstr "Plug" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "Deuvel" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "Speling" +msgid "Connector" +msgstr "Verbinding" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "Model object repareren" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Meshnaam" @@ -516,6 +623,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Lettertype" @@ -551,6 +660,655 @@ msgstr "Draai tekst" msgid "Text shape" msgstr "Tekstvorm" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "Geavanceerd" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "Aanpasser" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "Offline" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "Laden" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Hoogte" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Spiegelen" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "Verwijderen" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "Geen" + +msgid "Diameter" +msgstr "Diameter" + +msgid "Length" +msgstr "Lengte" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "Kopieer naar klembord" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -736,9 +1494,6 @@ msgstr "" msgid "Sync user presets" msgstr "" -msgid "Loading" -msgstr "Laden" - msgid "Loading user preset" msgstr "Voorinstelling voor gebruiker laden" @@ -769,9 +1524,6 @@ msgstr "Selecteer een G-code bestand:" msgid "Import File" msgstr "Importeer bestand" -msgid "Delete" -msgstr "Verwijderen" - msgid "Choose files" msgstr "Kies bestanden" @@ -842,9 +1594,6 @@ msgstr "Veeg opties" msgid "Bed adhension" msgstr "Printbed hechting" -msgid "Advanced" -msgstr "Geavanceerd" - msgid "Add part" msgstr "Onderdeel toevoegen" @@ -896,6 +1645,21 @@ msgstr "Verwijder het geselecteerde object" msgid "Load..." msgstr "Laden..." +msgid "Cube" +msgstr "Kubus" + +msgid "Cylinder" +msgstr "Cilinder" + +msgid "Cone" +msgstr "Kegel" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "Orca-kubus" @@ -908,19 +1672,10 @@ msgstr "Autodesk FDM Test" msgid "Voron Cube" msgstr "Voron-kubus" -msgid "Cube" -msgstr "Kubus" - -msgid "Cylinder" -msgstr "Cilinder" - -msgid "Cone" -msgstr "Kegel" - -msgid "Text" +msgid "Stanford Bunny" msgstr "" -msgid "SVG" +msgid "Text" msgstr "" msgid "Height range Modifier" @@ -1052,9 +1807,6 @@ msgstr "Langs de Z as" msgid "Mirror along the Z axis" msgstr "Spiegelen langs de Z as" -msgid "Mirror" -msgstr "Spiegelen" - msgid "Mirror object" msgstr "Spiegel object" @@ -1076,6 +1828,9 @@ msgstr "Invalideer knipsnede-info" msgid "Add Primitive" msgstr "Primitief toevoegen" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "Toon labels" @@ -1330,12 +2085,6 @@ msgstr "Hoogtebereiken" msgid "Settings for height range" msgstr "Instellingen voor hoogtebereik" -msgid "Object" -msgstr "Voorwerp" - -msgid "Part" -msgstr "Onderdeel" - msgid "Layer" msgstr "Laag" @@ -1362,9 +2111,6 @@ msgstr "" msgid "Negative Part" msgstr "Negatief deel" -msgid "Modifier" -msgstr "Aanpasser" - msgid "Support Blocker" msgstr "Ondersteuningsblokkade" @@ -1444,9 +2190,6 @@ msgstr "Vulling (infill) dichtheid(%)" msgid "Auto Brim" msgstr "Brim automatisch instellen" -msgid "Auto" -msgstr "Automatisch" - msgid "Mouse ear" msgstr "" @@ -1522,9 +2265,6 @@ msgstr "Aangepaste G-code" msgid "Enter Custom G-code used on current layer:" msgstr "Voer de aangepaste G-code in die op de huidige laag wordt gebruikt:" -msgid "OK" -msgstr "Offline" - msgid "Jump to Layer" msgstr "Spring naar laag" @@ -1579,15 +2319,15 @@ msgstr "Geen printer" msgid "..." msgstr "" -msgid "Failed to connect to the server" -msgstr "Verbinding maken met de server is mislukt" - msgid "Check the status of current system services" msgstr "Check the status of current system services" msgid "code" msgstr "code" +msgid "Failed to connect to the server" +msgstr "Verbinding maken met de server is mislukt" + msgid "Failed to connect to cloud service" msgstr "Failed to connect to cloud service" @@ -2427,9 +3167,6 @@ msgstr "Upload inplannen in `%1%`. Zie Venster -> Print Host Upload Queue" msgid "Origin" msgstr "Begin" -msgid "Diameter" -msgstr "Diameter" - msgid "Size in X and Y of the rectangular plate." msgstr "Maat in X en Y van de vierkante printplaat." @@ -2604,6 +3341,18 @@ msgstr "" "Ja - Pas de instellingen aan en zet de vaas modus automatisch aan\n" "Nee - Pas de vaas modus deze keer niet toe" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2974,6 +3723,9 @@ msgstr "Tijd" msgid "Percent" msgstr "Procent" +msgid "Used filament" +msgstr "Verbruikt filament" + msgid "Layer Height (mm)" msgstr "Laaghoogte (mm)" @@ -2992,9 +3744,6 @@ msgstr "Temperatuur (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Volumestroom (mm³/s)" -msgid "Used filament" -msgstr "Verbruikt filament" - msgid "Travel" msgstr "Verplaatsen" @@ -5179,6 +5928,9 @@ msgstr "Inlogregio" msgid "Stealth Mode" msgstr "" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "Metriek" @@ -6077,6 +6829,11 @@ msgstr "" "0 top z distance, 0 interface spacing, concentric pattern and disable " "independent support layer height" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6723,15 +7480,18 @@ msgstr "" msgid "Ramming line spacing" msgstr "" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "Automatisch berekenen" + +msgid "Re-calculate" msgstr "" msgid "Flushing volumes for filament change" msgstr "Volumes reinigen voor filament wijziging" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6749,6 +7509,15 @@ msgstr "" msgid "Multiplier" msgstr "Vermenigvuldiger" +msgid "unloaded" +msgstr "uitgeladen" + +msgid "loaded" +msgstr "Geladen" + +msgid "Filament #" +msgstr "Filament #" + msgid "From" msgstr "Van" @@ -6785,9 +7554,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "Kopieer naar klembord" - msgid "Paste from clipboard" msgstr "Plakken vanuit klembord" @@ -6901,9 +7667,6 @@ msgstr "Shift+willekeurige pijl" msgid "Movement step set to 1 mm" msgstr "Bewegingsinterval ingesteld op 1mm" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "Toets 1-9: kies filament voor het object/onderdeel" @@ -6952,7 +7715,7 @@ msgstr "Gizmo SLA-ondersteuningspunten" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM seam schilderen" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "" msgid "Plater" @@ -6988,9 +7751,6 @@ msgstr "Stel het extrudernnumer in voor de objecten en onderdelen" msgid "Delete objects, parts, modifiers " msgstr "Verwijder objecten, onderdelen, aanpassingen " -msgid "Space" -msgstr "Ruimte" - msgid "Select the object/part and press space to change the name" msgstr "" "Selecteer het object/onderdeel en druk op de spatiebalk om de naam aan te " @@ -7700,14 +8460,14 @@ msgid "Hostname, IP or URL" msgstr "Hostnaam, IP of URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r kan G-codebestanden uploaden naar een printerhost. Dit veld moet de " -"hostnaam, het IP-adres of de URL van de printerhostinstantie bevatten. " +"Orca Slicer kan G-codebestanden uploaden naar een printerhost. Dit veld moet " +"de hostnaam, het IP-adres of de URL van de printerhostinstantie bevatten. " "Printhost achter HAProxy met ingeschakelde basisauthenticatie is " "toegankelijk door de gebruikersnaam en het wachtwoord in de volgende " "indeling in de URL te plaatsen: https://username:password@your-octopi-" @@ -7724,11 +8484,11 @@ msgid "API Key / Password" msgstr "API sleutel / wachtwoord" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r kan G-codebestanden uploaden naar een printerhost. Dit veld moet de " -"API-sleutel of het wachtwoord bevatten dat nodig is voor authenticatie." +"Orca Slicer kan G-codebestanden uploaden naar een printerhost. Dit veld moet " +"de API-sleutel of het wachtwoord bevatten dat nodig is voor authenticatie." msgid "Name of the printer" msgstr "Naam van de printer" @@ -8705,8 +9465,8 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" msgid "Speed of the last cooling move" @@ -8875,11 +9635,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -8896,11 +9657,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -9063,9 +9825,6 @@ msgstr "" "printen van muren, zodat het oppervlak er ruw uitziet. Deze instelling " "regelt de \"fuzzy\" positie." -msgid "None" -msgstr "Geen" - msgid "Contour" msgstr "Contour" @@ -9426,6 +10185,17 @@ msgstr "" "Dit geeft aan of de machine de stille modus ondersteunt waarin de machine " "een lagere versnelling gebruikt om te printen" +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "Machine limieten" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9448,9 +10218,6 @@ msgstr "Maximale snelheid voor Z" msgid "Maximum speed E" msgstr "Maximale snelheid voor E" -msgid "Machine limits" -msgstr "Machine limieten" - msgid "Maximum X speed" msgstr "Maximale X snelheid" @@ -9656,11 +10423,11 @@ msgid "Host Type" msgstr "Hosttype" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r kan G-codebestanden uploaden naar een printerhost. Dit veld moet het " -"type host bevatten." +"Orca Slicer kan G-codebestanden uploaden naar een printerhost. Dit veld moet " +"het type host bevatten." msgid "Nozzle volume" msgstr "Nozzle volume" @@ -9788,11 +10555,25 @@ msgstr "Dit is de snelheid voor de binnenste wanden" msgid "Number of walls of every layer" msgstr "Dit is het aantal wanden per laag." +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" @@ -9877,9 +10658,6 @@ msgstr "" "Dit forceert retraction (terugtrekken van filament) als er gewisseld wordt " "van laag" -msgid "Length" -msgstr "Lengte" - msgid "Retraction Length" msgstr "Terugtrek (retraction) lengte" @@ -10062,6 +10840,21 @@ msgid "" "inward movement is executed before the extruder leaves the loop." msgstr "" +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "" @@ -10780,9 +11573,6 @@ msgstr "" "Dit is het volume van het materiaal dat de extruder op de prime toren " "uitwerpt." -msgid "Width" -msgstr "Breedte" - msgid "Width of prime tower" msgstr "Dit is de breedte van de prime toren." @@ -10938,8 +11728,8 @@ msgstr "" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" msgid "" @@ -12099,9 +12889,6 @@ msgstr "" msgid "Create Based on Current Printer" msgstr "" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "" @@ -12274,10 +13061,10 @@ msgstr "" msgid "Export Configs" msgstr "" -msgid "Printer config bundle(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" msgstr "" -msgid "Filament bundle(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" @@ -12316,7 +13103,7 @@ msgid "" msgstr "" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" @@ -12636,6 +13423,19 @@ msgid "" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -12643,6 +13443,13 @@ msgid "" "3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -12907,6 +13714,41 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Movement:" +#~ msgstr "Beweging:" + +#~ msgid "Movement" +#~ msgstr "Beweging" + +#~ msgid "Auto Segment" +#~ msgstr "Automatische segmenteren" + +#~ msgid "Depth ratio" +#~ msgstr "Diepteratio" + +#~ msgid "Prizm" +#~ msgstr "Prisma" + +#~ msgid "connector is out of cut contour" +#~ msgstr "Verbinding ligt buiten knipcontour" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "Verbindingen liggen buiten knipcontour" + +#~ msgid "connector is out of object" +#~ msgstr "Verbinding ligt buiten object" + +# Source and destination string both English, but different. Please clarify! +#~ msgid "connectors is out of object" +#~ msgstr "Connectors must be on object surface." + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Foutieve staat. \n" +#~ "Geen onderdelen geselecteerd om te behouden na knippen" + #~ msgid "Edit Text" #~ msgstr "Pas tekst aan" @@ -12940,18 +13782,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Quick" -#~ msgid "Auto-Calc" -#~ msgstr "Automatisch berekenen" - -#~ msgid "unloaded" -#~ msgstr "uitgeladen" - -#~ msgid "loaded" -#~ msgstr "Geladen" - -#~ msgid "Filament #" -#~ msgstr "Filament #" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 9721171694..102ab54d6a 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V1.8.0 Official Release\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: 2023-11-20 01:07+0700\n" "Last-Translator: Andylg \n" "Language-Team: \n" @@ -225,6 +225,9 @@ msgstr "мм" msgid "Position" msgstr "Позиция" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Вращение" @@ -264,6 +267,7 @@ msgstr "Мировая СК" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Размер" @@ -273,6 +277,113 @@ msgstr "%" msgid "uniform scale" msgstr "Равномерное масштабирование" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "Автоматич." + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "Шип-паз" + +msgid "Dowel" +msgstr "Штифт" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Усечённый конус" + +msgid "Square" +msgstr "Квадрат" + +msgid "Hexagon" +msgstr "Шестиугольник" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "Срезом на стол" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "Соединения" + +msgid "Type" +msgstr "Тип" + +msgid "Style" +msgstr "Стиль" + +msgid "Shape" +msgstr "Форма" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "Ширина" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "Модель" + +msgid "Object" +msgstr "Модель" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Допуск" + +msgid "Drag" +msgstr "Перетащить" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Левая кнопка мыши" @@ -285,9 +396,6 @@ msgstr "Правая кнопка мыши" msgid "Remove connector" msgstr "Удалить соединение" -msgid "Drag" -msgstr "Перетащить" - msgid "Move connector" msgstr "Переместить соединение" @@ -303,23 +411,51 @@ msgstr "Выбрать все соединения" msgid "Cut" msgstr "Разрезать" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "Починка модели" +msgid "Remove connectors" +msgstr "Удалить соединения" -msgid "Connector" -msgstr "Соединение" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "Перемещение:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "Перемещение" +msgid "Space" +msgstr "Пробел" -msgid "Height" -msgstr "Высота" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Подтвердить" + +msgid "Cancel" +msgstr "Отмена" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "Сброс" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Редактировать соединения" @@ -327,6 +463,12 @@ msgstr "Редактировать соединения" msgid "Add connectors" msgstr "Добавить соединения" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Верхняя часть" @@ -336,9 +478,6 @@ msgstr "Нижняя часть" msgid "Keep" msgstr "Сохранять" -msgid "Place on cut" -msgstr "Срезом на стол" - msgid "Flip" msgstr "Перевернуть" @@ -348,87 +487,58 @@ msgstr "После разрезания" msgid "Cut to parts" msgstr "Разрезать на части" -msgid "Auto Segment" -msgstr "Автосегментация" - msgid "Perform cut" msgstr "Выполнить разрез" -msgid "Reset" -msgstr "Сброс" - -msgid "Connectors" -msgstr "Соединения" - -msgid "Type" -msgstr "Тип" - -msgid "Style" -msgstr "Стиль" - -msgid "Shape" -msgstr "Форма" - -msgid "Depth ratio" -msgstr "Глубина" - -msgid "Remove connectors" -msgstr "Удалить соединения" - -msgid "Prizm" -msgstr "Призма" - -msgid "Frustum" -msgstr "Усечённый конус" - -msgid "Square" -msgstr "Квадрат" - -msgid "Hexagon" -msgstr "Шестиугольник" - -msgid "Confirm connectors" -msgstr "Подтвердить" - -msgid "Cancel" -msgstr "Отмена" - msgid "Warning" msgstr "Предупреждение" msgid "Invalid connectors detected" msgstr "Обнаружены недопустимые соединения" -msgid "connector is out of cut contour" -msgstr "соединение выходит за контур модели" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -msgid "connectors are out of cut contour" -msgstr "соединения выходят за контур модели" - -msgid "connector is out of object" -msgstr "соединение находится за пределами модели" - -msgid "connectors is out of object" -msgstr "соединения находится за пределами модели" +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" msgid "Some connectors are overlapped" msgstr "Имеются пересекающие соединения" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"Недопустимое состояние.\n" -"Не выбрана ни одна из частей для сохранения после выполнения разреза" -msgid "Plug" -msgstr "Шип-паз" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "Штифт" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "Допуск" +msgid "Connector" +msgstr "Соединение" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "Починка модели" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Имя сетки" @@ -524,6 +634,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Шрифт" @@ -563,6 +675,655 @@ msgstr "Поворот текста" msgid "Text shape" msgstr "Форма текста" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "Дополнительно" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "Модификатор" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "Загрузка" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Высота" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Отразить" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "Удалить" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "Нет" + +msgid "Diameter" +msgstr "Диаметр" + +msgid "Length" +msgstr "Длина" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "Скопировать в буфер обмена" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -751,9 +1512,6 @@ msgstr "" msgid "Sync user presets" msgstr "" -msgid "Loading" -msgstr "Загрузка" - msgid "Loading user preset" msgstr "Загрузка пользовательского профиля" @@ -784,9 +1542,6 @@ msgstr "Выберите файл G-кода:" msgid "Import File" msgstr "Импорт файла" -msgid "Delete" -msgstr "Удалить" - msgid "Choose files" msgstr "Выберите файлы" @@ -857,9 +1612,6 @@ msgstr "Параметры очистки" msgid "Bed adhension" msgstr "Адгезия к столу" -msgid "Advanced" -msgstr "Дополнительно" - msgid "Add part" msgstr "Добавить элемент" @@ -911,6 +1663,21 @@ msgstr "Удаление выбранных моделей" msgid "Load..." msgstr "Загрузить…" +msgid "Cube" +msgstr "Куб" + +msgid "Cylinder" +msgstr "Цилиндр" + +msgid "Cone" +msgstr "Конус" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "Куб Orca Design" @@ -923,19 +1690,10 @@ msgstr "FDM тест от Autodesk" msgid "Voron Cube" msgstr "Куб Voron Design" -msgid "Cube" -msgstr "Куб" - -msgid "Cylinder" -msgstr "Цилиндр" - -msgid "Cone" -msgstr "Конус" - -msgid "Text" +msgid "Stanford Bunny" msgstr "" -msgid "SVG" +msgid "Text" msgstr "" msgid "Height range Modifier" @@ -1066,9 +1824,6 @@ msgstr "Вдоль оси Z" msgid "Mirror along the Z axis" msgstr "Отразить модель вдоль оси Z" -msgid "Mirror" -msgstr "Отразить" - msgid "Mirror object" msgstr "Отразить модель" @@ -1090,6 +1845,9 @@ msgstr "Удалить информацию о разрезе" msgid "Add Primitive" msgstr "Добавить примитив" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "Показать имена файлов" @@ -1340,12 +2098,6 @@ msgstr "Диапазон высот слоёв" msgid "Settings for height range" msgstr "Настройки для диапазона высот слоёв" -msgid "Object" -msgstr "Модель" - -msgid "Part" -msgstr "Модель" - msgid "Layer" msgstr "Слой" @@ -1371,9 +2123,6 @@ msgstr "Вы не можете изменить тип последнего тв msgid "Negative Part" msgstr "Объём для вычитания" -msgid "Modifier" -msgstr "Модификатор" - msgid "Support Blocker" msgstr "Блокировщик поддержки" @@ -1452,9 +2201,6 @@ msgstr "Плот. заполнения (%)" msgid "Auto Brim" msgstr "Автокайма" -msgid "Auto" -msgstr "Автоматич." - msgid "Mouse ear" msgstr "Мышиные ушки" @@ -1530,9 +2276,6 @@ msgstr "Пользовательский G-код" msgid "Enter Custom G-code used on current layer:" msgstr "Введите пользовательский G-код для текущего слоя:" -msgid "OK" -msgstr "OK" - msgid "Jump to Layer" msgstr "Перейти к слою" @@ -1587,15 +2330,15 @@ msgstr "Принтер не выбран" msgid "..." msgstr "..." -msgid "Failed to connect to the server" -msgstr "Не удалось подключиться к серверу" - msgid "Check the status of current system services" msgstr "Проверка состояния текущих системных служб" msgid "code" msgstr "код" +msgid "Failed to connect to the server" +msgstr "Не удалось подключиться к серверу" + msgid "Failed to connect to cloud service" msgstr "Не удалось подключиться к облачному сервису" @@ -2459,9 +3202,6 @@ msgstr "" msgid "Origin" msgstr "Начало координат" -msgid "Diameter" -msgstr "Диаметр" - msgid "Size in X and Y of the rectangular plate." msgstr "Размеры прямоугольного стола в XY координатах." @@ -2642,6 +3382,18 @@ msgstr "" "Да - Изменить эти настройки и включить режим «Спиральная ваза»\n" "Нет - Отказаться от использования режима «Спиральная ваза»" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3030,6 +3782,9 @@ msgstr "Время" msgid "Percent" msgstr "%" +msgid "Used filament" +msgstr "Использовано прутка" + msgid "Layer Height (mm)" msgstr "Высота слоя (мм)" @@ -3048,9 +3803,6 @@ msgstr "Температура (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Объёмная скорость потока (мм³/с)" -msgid "Used filament" -msgstr "Использовано прутка" - msgid "Travel" msgstr "Перемещения" @@ -5201,7 +5953,7 @@ msgid "" "on Orca Slicer(windows) or CAD softwares." msgstr "" "Функция «Починить модель» в настоящее время доступна только в Windows. " -"Пожалуйста, почините модель с помощью Bambu Studio (Windows) или другой CAD " +"Пожалуйста, почините модель с помощью Orca Slicer (Windows) или другой CAD " "программой." #, c-format, boost-format @@ -5268,6 +6020,9 @@ msgstr "Регион входа" msgid "Stealth Mode" msgstr "Режим конфиденциальности (отключение телеметрии Bambulab)" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "Метрическая СИ" @@ -6178,6 +6933,11 @@ msgstr "" "шаблон связующего слоя - концентрический, \n" "отключение независимой высоты слоя поддержки." +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6837,15 +7597,18 @@ msgstr "Ширина линии при рэмминге" msgid "Ramming line spacing" msgstr "Расстояние между линиями при рэмминге" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "Авторасчёт" + +msgid "Re-calculate" msgstr "" msgid "Flushing volumes for filament change" msgstr "Объёмы очистки при смене пластиковой нити" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6864,6 +7627,15 @@ msgstr "Множитель должен находиться в диапазон msgid "Multiplier" msgstr "Множитель" +msgid "unloaded" +msgstr "выгрузку" + +msgid "loaded" +msgstr "загрузку" + +msgid "Filament #" +msgstr "Пруток #" + msgid "From" msgstr "С" @@ -6901,9 +7673,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "Скопировать в буфер обмена" - msgid "Paste from clipboard" msgstr "Вставить из буфера обмена" @@ -7017,9 +7786,6 @@ msgstr "Shift + Любая стрелка" msgid "Movement step set to 1 mm" msgstr "Зафиксировать шаг перемещения на 1 мм" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "Клавиши 1-9: задать пруток для модели/части модели" @@ -7068,7 +7834,7 @@ msgstr "Гизмо точки SLA поддержки" msgid "Gizmo FDM paint-on seam" msgstr "Гизмо рисования шва (FDM)" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "Переключение между окном подготовки и окном предпросмотра нарезки" msgid "Plater" @@ -7104,9 +7870,6 @@ msgstr "Задать номер экструдера для моделей/ча msgid "Delete objects, parts, modifiers " msgstr "Удаление моделей, частей, модификаторов " -msgid "Space" -msgstr "Пробел" - msgid "Select the object/part and press space to change the name" msgstr "Выберите модель/часть и нажмите пробел, чтобы изменить имя" @@ -7837,13 +8600,13 @@ msgid "Hostname, IP or URL" msgstr "Имя хоста, IP/URL-адрес" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r может загружать файл G-кода на хост принтера. В этом поле нужно " +"Orca Slicer может загружать файл G-кода на хост принтера. В этом поле нужно " "указать имя хоста, IP-адрес или URL-адрес хост-экземпляра печати. Доступ к " "узлу печати на основе HAProxy с включенной базовой аутентификацией можно " "получить, указав имя пользователя и пароль в поле URL-адрес в следующем " @@ -7862,10 +8625,10 @@ msgid "API Key / Password" msgstr "API-ключ/Пароль" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r может загружать файл G-кода на хост принтера. Это поле должно " +"Orca Slicer может загружать файл G-кода на хост принтера. Это поле должно " "содержать API ключ или пароль, необходимые для проверки подлинности." msgid "Name of the printer" @@ -8906,14 +9669,15 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "После смены инструмента, точное положение вновь загруженного прутка внутри " "него может быть неизвестно, и давление прутка, вероятно, ещё не стабильно. " "Перед тем, как очистить печатающую головку в заполнение или в «жертвенную» " -"модель Slic3r всегда будет выдавливать это количество материала на черновую " -"башню, чтобы обеспечить надёжную печать заполнения или «жертвенной» модели." +"модель Orca Slicer всегда будет выдавливать это количество материала на " +"черновую башню, чтобы обеспечить надёжную печать заполнения или «жертвенной» " +"модели." msgid "Speed of the last cooling move" msgstr "Скорость последнего охлаждающего движения" @@ -9099,11 +9863,12 @@ msgstr "Длина привязок разреженного заполнени msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -9131,19 +9896,20 @@ msgstr "Максимальная длина привязок разреженн msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" "Соединять линию заполнения с внутренним периметром с помощью короткого " "отрезка дополнительного периметра (привязок). Если выражено в процентах, то " -"она вычисляется по ширине экструзии заполнения. Slic3r пытается соединить " -"две ближайшие линии заполнения с коротким отрезком периметра. Если не " -"найдено такого отрезка периметра короче этого параметра, линия заполнения " +"она вычисляется по ширине экструзии заполнения. Orca Slicer пытается " +"соединить две ближайшие линии заполнения с коротким отрезком периметра. Если " +"не найдено такого отрезка периметра короче этого параметра, линия заполнения " "соединяется с отрезком периметра только с одной стороны, а длина отрезка " "периметра ограничена значением «Длина привязок разреженного " "заполнения» (infill_anchor), но не больше этого параметра. \n" @@ -9331,9 +10097,6 @@ msgstr "" "шероховатой поверхности. Эта настройка определяет положение нечетной " "оболочки." -msgid "None" -msgstr "Нет" - msgid "Contour" msgstr "Внешний периметр" @@ -9732,6 +10495,17 @@ msgstr "" "Поддержка тихого режима, в котором принтер использует меньшее ускорение " "печати для уменьшения уровня шума." +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "Ограничения принтера" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9754,9 +10528,6 @@ msgstr "Максимальная скорость перемещения по Z" msgid "Maximum speed E" msgstr "Максимальная скорость подачи у экструдера (E)" -msgid "Machine limits" -msgstr "Ограничения принтера" - msgid "Maximum X speed" msgstr "Максимальная скорость перемещения по X" @@ -10015,10 +10786,10 @@ msgid "Host Type" msgstr "Тип хоста" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r может загружать файл G-кода на хост принтера. Это поле должно " +"Orca Slicer может загружать файл G-кода на хост принтера. Это поле должно " "содержать тип хоста." msgid "Nozzle volume" @@ -10162,18 +10933,32 @@ msgstr "Скорость печати внутренних периметров. msgid "Number of walls of every layer" msgstr "Количество периметров на каждом слое модели." +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" "Если вы хотите обработать выходной G-код с помощью пользовательских " "скриптов, просто перечислите здесь абсолютные пути к ним. Разделяйте скрипты " "точкой с запятой. Скриптам будет передан абсолютный путь к файлу G-кода в " "качестве первого аргумента, и они смогут получить доступ к настройкам " -"конфигурации Slic3r, читая переменные окружения." +"конфигурации Orca Slicer, читая переменные окружения." msgid "Printer notes" msgstr "Примечания к принтеру" @@ -10254,9 +11039,6 @@ msgstr "Откат при смене слоя" msgid "Force a retraction when changes layer" msgstr "Эта опция включает принудительный откат при переходе со слоя на слой." -msgid "Length" -msgstr "Длина" - msgid "Retraction Length" msgstr "Длина отката" @@ -10471,6 +11253,21 @@ msgstr "" "Чтобы минимизировать видимость шва при экструзии по замкнутому контуру, " "перед выходом экструдера из контура выполняется небольшое движение внутрь." +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "Скорость очистки" @@ -11261,9 +12058,6 @@ msgid "The volume of material to prime extruder on tower." msgstr "" "Объём выдавленного материала для заправки экструдера на черновой башне." -msgid "Width" -msgstr "Ширина" - msgid "Width of prime tower" msgstr "Ширина черновой башни." @@ -11444,16 +12238,9 @@ msgstr "Исп. относительные координаты для экст msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" -"Относительная экструзия рекомендуется при использовании опции «Название " -"моделей».\n" -"\n" -"Черновая башня совместима только с относительной экструзией. На принтерах " -"BambuLab она всегда включена (флажок стоит).\n" -"Некоторые экструдеры работают лучше при отключении этой опции (абсолютный " -"режим экструзии)." msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -12743,9 +13530,6 @@ msgstr "" msgid "Create Based on Current Printer" msgstr "" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "" @@ -12918,10 +13702,10 @@ msgstr "" msgid "Export Configs" msgstr "" -msgid "Printer config bundle(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" msgstr "" -msgid "Filament bundle(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" @@ -12960,7 +13744,7 @@ msgid "" msgstr "" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" @@ -13289,6 +14073,19 @@ msgid "" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -13296,6 +14093,13 @@ msgid "" "3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -13567,6 +14371,54 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "" +#~ "Relative extrusion is recommended when using \"label_objects\" option." +#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "mode). Wipe tower is only compatible with relative mode. It is always " +#~ "enabled on BambuLab printers. Default is checked" +#~ msgstr "" +#~ "Относительная экструзия рекомендуется при использовании опции «Название " +#~ "моделей».\n" +#~ "\n" +#~ "Черновая башня совместима только с относительной экструзией. На принтерах " +#~ "BambuLab она всегда включена (флажок стоит).\n" +#~ "Некоторые экструдеры работают лучше при отключении этой опции (абсолютный " +#~ "режим экструзии)." + +#~ msgid "Movement:" +#~ msgstr "Перемещение:" + +#~ msgid "Movement" +#~ msgstr "Перемещение" + +#~ msgid "Auto Segment" +#~ msgstr "Автосегментация" + +#~ msgid "Depth ratio" +#~ msgstr "Глубина" + +#~ msgid "Prizm" +#~ msgstr "Призма" + +#~ msgid "connector is out of cut contour" +#~ msgstr "соединение выходит за контур модели" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "соединения выходят за контур модели" + +#~ msgid "connector is out of object" +#~ msgstr "соединение находится за пределами модели" + +#~ msgid "connectors is out of object" +#~ msgstr "соединения находится за пределами модели" + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Недопустимое состояние.\n" +#~ "Не выбрана ни одна из частей для сохранения после выполнения разреза" + #~ msgid "Edit Text" #~ msgstr "Изменить текст" @@ -13600,18 +14452,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Скорость" -#~ msgid "Auto-Calc" -#~ msgstr "Авторасчёт" - -#~ msgid "unloaded" -#~ msgstr "выгрузку" - -#~ msgid "loaded" -#~ msgstr "загрузку" - -#~ msgid "Filament #" -#~ msgstr "Пруток #" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "" @@ -13790,15 +14630,6 @@ msgstr "" #~ msgid "Initialize failed (Not supported by printer)!" #~ msgstr "Ошибка инициализации (не поддерживается принтером)!" -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "Уже работает одна виртуальная камера.\n" -#~ "Bambu Studio поддерживает только одну виртуальную камеру.\n" -#~ "Хотите остановить эту виртуальную камеру?" - #~ msgid "Not supported by this model of printer!" #~ msgstr "Не поддерживается этой моделью принтера!" @@ -13821,7 +14652,7 @@ msgstr "" #~ "Studio and export a new .gcode.3mf file." #~ msgstr "" #~ "Файл .gcode.3mf не содержит G-кода. Пожалуйста, нарежьте его в программе " -#~ "Bambu Studio и экспортируйте новый файл .gcode.3mf." +#~ "Orca Slicer и экспортируйте новый файл .gcode.3mf." #~ msgid "Immediately score" #~ msgstr "Оценить сейчас" @@ -13924,8 +14755,6 @@ msgstr "" #~ msgid "%s is not supported by AMS." #~ msgstr "%s не поддерживается АСПП." -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "Принтер должен находиться в одной локальной сети с Bambu Studio." #~ msgid "Recommended temperature range" #~ msgstr "Рекомендуемый диапазон температур" @@ -13944,25 +14773,9 @@ msgstr "" #~ msgid "Switch between Prepare/Prewview" #~ msgstr "Переключение между окном подготовки и окном предпросмотра нарезки" -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "" -#~ "Нажмите OK, чтобы обновить сетевой плагин при следующем запуске Bambu " -#~ "Studio." - -#~ msgid "New version of Bambu Studio" -#~ msgstr "Доступна новая версия Bambu Studio" - #~ msgid "Don't remind me of this version again" #~ msgstr "Больше не напоминай об этой версии" -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "" -#~ "Шаг 1. Пожалуйста, убедитесь, что Bambu Studio и ваш принтер находятся в " -#~ "одной локальной сети." - #~ msgid "Error: IP or Access Code are not correct" #~ msgstr "Ошибка: неверный IP-адрес или код доступа" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 907d840e14..c0a9dda478 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -213,6 +213,9 @@ msgstr "mm" msgid "Position" msgstr "Position" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Rotation" @@ -252,6 +255,7 @@ msgstr "Världskoordinater" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Storlek" @@ -261,6 +265,113 @@ msgstr "%" msgid "uniform scale" msgstr "enhetlig skala" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "Auto" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "Kontakt" + +msgid "Dowel" +msgstr "Plugg" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Avstympat parti" + +msgid "Square" +msgstr "Kvadrat" + +msgid "Hexagon" +msgstr "Hexagon" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "Placera på snitt" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "Kontaktdon" + +msgid "Type" +msgstr "Typ" + +msgid "Style" +msgstr "Stil" + +msgid "Shape" +msgstr "Form" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "Bredd" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "Del" + +msgid "Object" +msgstr "Objekt" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Tolerans" + +msgid "Drag" +msgstr "Dra" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Vänsterklicka" @@ -273,9 +384,6 @@ msgstr "Högerklicka" msgid "Remove connector" msgstr "Ta bort kontakten" -msgid "Drag" -msgstr "Dra" - msgid "Move connector" msgstr "Flytta kontakt" @@ -291,23 +399,51 @@ msgstr "Välj alla kontakter" msgid "Cut" msgstr "Beskär" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "Reparerar modell objektet" +msgid "Remove connectors" +msgstr "Ta bort kontakterna" -msgid "Connector" -msgstr "Kontakt" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "Rörelse:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "Rörelse" +msgid "Space" +msgstr "Mellanslag" -msgid "Height" -msgstr "Höjd" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Bekräfta kontakterna" + +msgid "Cancel" +msgstr "Avbryt" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "Återställ" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Redigera kontaktdon" @@ -315,6 +451,12 @@ msgstr "Redigera kontaktdon" msgid "Add connectors" msgstr "Lägg till kontaktdon" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Övre del" @@ -324,9 +466,6 @@ msgstr "Nedre del" msgid "Keep" msgstr "Behåll" -msgid "Place on cut" -msgstr "Placera på snitt" - msgid "Flip" msgstr "Vänd" @@ -336,87 +475,56 @@ msgstr "Efter skärning" msgid "Cut to parts" msgstr "Beskär till delar" -msgid "Auto Segment" -msgstr "Automatisk Segment" - msgid "Perform cut" msgstr "Utför beskärning" -msgid "Reset" -msgstr "Återställ" - -msgid "Connectors" -msgstr "Kontaktdon" - -msgid "Type" -msgstr "Typ" - -msgid "Style" -msgstr "Stil" - -msgid "Shape" -msgstr "Form" - -msgid "Depth ratio" -msgstr "Djup förhållande" - -msgid "Remove connectors" -msgstr "Ta bort kontakterna" - -msgid "Prizm" -msgstr "Prizm" - -msgid "Frustum" -msgstr "Avstympat parti" - -msgid "Square" -msgstr "Kvadrat" - -msgid "Hexagon" -msgstr "Hexagon" - -msgid "Confirm connectors" -msgstr "Bekräfta kontakterna" - -msgid "Cancel" -msgstr "Avbryt" - msgid "Warning" msgstr "Varning" msgid "Invalid connectors detected" msgstr "Ogiltiga anslutningar upptäckta" -msgid "connector is out of cut contour" -msgstr "kontakten är ur konturen" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" -msgid "connectors are out of cut contour" -msgstr "kontakterna är utanför skuren kontur" - -msgid "connector is out of object" -msgstr "kontakten är utanför objektet" - -msgid "connectors is out of object" -msgstr "Kontakterna måste vara på objektets yta." +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" msgid "Some connectors are overlapped" msgstr "Vissa kontakter är överlappande" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"Ogiltigt tillstånd. \n" -"Ingen del är vald att behålla efter skärning" -msgid "Plug" +msgid "Cut plane is placed out of object" +msgstr "" + +msgid "Cut plane with groove is invalid" +msgstr "" + +msgid "Connector" msgstr "Kontakt" -msgid "Dowel" -msgstr "Plugg" +msgid "Cut by Plane" +msgstr "" -msgid "Tolerance" -msgstr "Tolerans" +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "Reparerar modell objektet" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Mesh namn" @@ -513,6 +621,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Typsnitt" @@ -548,6 +658,655 @@ msgstr "Rotera text" msgid "Text shape" msgstr "Text form" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "Avancerat" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "Modifierare" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "Laddar" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Höjd" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Spegelvänd" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "Radera" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "Ingen" + +msgid "Diameter" +msgstr "Diameter" + +msgid "Length" +msgstr "Längd" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "Kopiera till urklipp" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl +" @@ -723,9 +1482,6 @@ msgstr "" msgid "Sync user presets" msgstr "" -msgid "Loading" -msgstr "Laddar" - msgid "Loading user preset" msgstr "Laddar användarens förinställning" @@ -756,9 +1512,6 @@ msgstr "Välj en G-kod fil:" msgid "Import File" msgstr "Importera fil" -msgid "Delete" -msgstr "Radera" - msgid "Choose files" msgstr "Välj filer" @@ -829,9 +1582,6 @@ msgstr "Avstryknings val" msgid "Bed adhension" msgstr "Byggplattans vidhäftningsförmåga" -msgid "Advanced" -msgstr "Avancerat" - msgid "Add part" msgstr "Lägg till del" @@ -883,6 +1633,21 @@ msgstr "Radera det valda objektet" msgid "Load..." msgstr "Ladda..." +msgid "Cube" +msgstr "Kub" + +msgid "Cylinder" +msgstr "Cylinder" + +msgid "Cone" +msgstr "Kon" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "" @@ -895,19 +1660,10 @@ msgstr "" msgid "Voron Cube" msgstr "" -msgid "Cube" -msgstr "Kub" - -msgid "Cylinder" -msgstr "Cylinder" - -msgid "Cone" -msgstr "Kon" - -msgid "Text" +msgid "Stanford Bunny" msgstr "" -msgid "SVG" +msgid "Text" msgstr "" msgid "Height range Modifier" @@ -1038,9 +1794,6 @@ msgstr "Längs med Z Axis" msgid "Mirror along the Z axis" msgstr "Spegelvänd längs med Z Axis" -msgid "Mirror" -msgstr "Spegelvänd" - msgid "Mirror object" msgstr "Spegelvänd objektet" @@ -1062,6 +1815,9 @@ msgstr "Ogiltig förklara delnings info" msgid "Add Primitive" msgstr "Lägg till Primitiv" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "Visa Etiketter" @@ -1305,12 +2061,6 @@ msgstr "Höjd intervall" msgid "Settings for height range" msgstr "Inställningar för höjdintervall" -msgid "Object" -msgstr "Objekt" - -msgid "Part" -msgstr "Del" - msgid "Layer" msgstr "Lager" @@ -1336,9 +2086,6 @@ msgstr "Den sista fasta objekts delen ska inte ändras." msgid "Negative Part" msgstr "Negativ Del" -msgid "Modifier" -msgstr "Modifierare" - msgid "Support Blocker" msgstr "Support Blockerare" @@ -1419,9 +2166,6 @@ msgstr "Ifyllnads densitet(%)" msgid "Auto Brim" msgstr "Auto Brim" -msgid "Auto" -msgstr "Auto" - msgid "Mouse ear" msgstr "" @@ -1497,9 +2241,6 @@ msgstr "Custom G-kod" msgid "Enter Custom G-code used on current layer:" msgstr "Ange anpassad G-kod som används på det aktuella lagret:" -msgid "OK" -msgstr "OK" - msgid "Jump to Layer" msgstr "Hoppa till lager" @@ -1554,15 +2295,15 @@ msgstr "Ingen skrivare" msgid "..." msgstr "" -msgid "Failed to connect to the server" -msgstr "Uppkoppling till servern misslyckades" - msgid "Check the status of current system services" msgstr "Kontrollera status för aktuella systemtjänster" msgid "code" msgstr "kod" +msgid "Failed to connect to the server" +msgstr "Uppkoppling till servern misslyckades" + msgid "Failed to connect to cloud service" msgstr "Det gick inte att ansluta till molntjänsten" @@ -2393,9 +3134,6 @@ msgstr "" msgid "Origin" msgstr "Ursprung" -msgid "Diameter" -msgstr "Diameter" - msgid "Size in X and Y of the rectangular plate." msgstr "X & Y storlek av den rektangulära plattan." @@ -2564,6 +3302,18 @@ msgstr "" "JA -Ändra dessa inställningar och möjliggör Spiral läge automatiskt\n" "NEJ -Avbryt Spiral läge denna gång" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2933,6 +3683,9 @@ msgstr "Tid" msgid "Percent" msgstr "Procent" +msgid "Used filament" +msgstr "Använt filament" + msgid "Layer Height (mm)" msgstr "Lagerhöjd (mm)" @@ -2951,9 +3704,6 @@ msgstr "Temperatur (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Volymetrisk flödeshastighet (mm³/s)" -msgid "Used filament" -msgstr "Använt filament" - msgid "Travel" msgstr "Flytta" @@ -5110,6 +5860,9 @@ msgstr "Logga in Region" msgid "Stealth Mode" msgstr "" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "Metrisk" @@ -5989,6 +6742,11 @@ msgstr "" "0 top z-avstånd, 0 gränssnittsavstånd, koncentriskt mönster och inaktivera " "oberoende stödskiktshöjd" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6628,15 +7386,18 @@ msgstr "" msgid "Ramming line spacing" msgstr "" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "Autoberäkna" + +msgid "Re-calculate" msgstr "" msgid "Flushing volumes for filament change" msgstr "Rensnings volym för filament byte" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6653,6 +7414,15 @@ msgstr "Multiplikatorn ska ligga inom intervallet [%.2f, %.2f]." msgid "Multiplier" msgstr "Multiplikator" +msgid "unloaded" +msgstr "utmatad" + +msgid "loaded" +msgstr "laddad" + +msgid "Filament #" +msgstr "Filament #" + msgid "From" msgstr "Från" @@ -6689,9 +7459,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Skift+G" -msgid "Copy to clipboard" -msgstr "Kopiera till urklipp" - msgid "Paste from clipboard" msgstr "Klistra in ifrån urklipp" @@ -6802,9 +7569,6 @@ msgstr "Shift+valfri pil" msgid "Movement step set to 1 mm" msgstr "Rörelse steg är vald till 1mm" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "tangentbord 1-9: fastställer filament för objekt/del" @@ -6853,7 +7617,7 @@ msgstr "Gizmo SLA support punkter" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM målad söm" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "" msgid "Plater" @@ -6889,9 +7653,6 @@ msgstr "Välj extruder nummer för objekten och delarna" msgid "Delete objects, parts, modifiers " msgstr "Radera objekten, delarna och anpassningar " -msgid "Space" -msgstr "Mellanslag" - msgid "Select the object/part and press space to change the name" msgstr "Välj objektet/delen och tryck space för att ändra namnet" @@ -7570,15 +8331,15 @@ msgid "Hostname, IP or URL" msgstr "Värdnamn, IP eller URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r kan ladda upp G-kod filer till en printer värd. Det här fältet ska " -"innehålla värdnamn, IP-adress eller URL för printer värd platsen. Du kan få " -"tillgång till printer värd till HAProxy med grundläggande autentisering " +"Orca Slicer kan ladda upp G-kod filer till en printer värd. Det här fältet " +"ska innehålla värdnamn, IP-adress eller URL för printer värd platsen. Du kan " +"få tillgång till printer värd till HAProxy med grundläggande autentisering " "aktiverad genom att ange användarnamn och lösenord i URL:en i följande " "format: https://username:password@your-octopi-address/" @@ -7593,11 +8354,11 @@ msgid "API Key / Password" msgstr "API Nyckel/Lösenord" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r kan ladda upp G-kod filer till en printer värd. Det här fältet ska " -"innehålla API nyckeln eller lösenordet som krävs för autentisering." +"Orca Slicer kan ladda upp G-kod filer till en printer värd. Det här fältet " +"ska innehålla API nyckeln eller lösenordet som krävs för autentisering." msgid "Name of the printer" msgstr "Skrivarens namn" @@ -8553,8 +9314,8 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" msgid "Speed of the last cooling move" @@ -8723,11 +9484,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -8744,11 +9506,12 @@ msgstr "" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -8907,9 +9670,6 @@ msgstr "" "väggar så att ytan får ett strävt utseende. Denna inställning styr fuzzy " "position" -msgid "None" -msgstr "Ingen" - msgid "Contour" msgstr "Kontur" @@ -9267,6 +10027,17 @@ msgstr "" "Om maskinen stöder tyst läge där maskinen använder lägre acceleration för " "att skriva ut" +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "Maskin begränsningar" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9289,9 +10060,6 @@ msgstr "Max hastighet Z" msgid "Maximum speed E" msgstr "Max hastighet E" -msgid "Machine limits" -msgstr "Maskin begränsningar" - msgid "Maximum X speed" msgstr "Max X hastighet" @@ -9496,11 +10264,11 @@ msgid "Host Type" msgstr "Värd typ" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r kan ladda upp G-kod filer till en skrivar värd. Det här fältet måste " -"innehålla typ av värd." +"Orca Slicer kan ladda upp G-kod filer till en skrivar värd. Det här fältet " +"måste innehålla typ av värd." msgid "Nozzle volume" msgstr "Nozzle volym" @@ -9624,11 +10392,25 @@ msgstr "Hastighet för inre vägg" msgid "Number of walls of every layer" msgstr "Antal väggar för varje lager" +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" @@ -9709,9 +10491,6 @@ msgstr "Retraktera vid lager byte" msgid "Force a retraction when changes layer" msgstr "Tvinga retraktion vid lager byte" -msgid "Length" -msgstr "Längd" - msgid "Retraction Length" msgstr "Retraktions längd" @@ -9893,6 +10672,21 @@ msgid "" "inward movement is executed before the extruder leaves the loop." msgstr "" +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "" @@ -10593,9 +11387,6 @@ msgstr "Prime volym (volymen av ut pressat material)" msgid "The volume of material to prime extruder on tower." msgstr "Material volymen att (pressa ut) genom extrudern på tornet." -msgid "Width" -msgstr "Bredd" - msgid "Width of prime tower" msgstr "Prime tornets bredd" @@ -10749,8 +11540,8 @@ msgstr "" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" msgid "" @@ -11910,9 +12701,6 @@ msgstr "" msgid "Create Based on Current Printer" msgstr "" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "" @@ -12085,10 +12873,10 @@ msgstr "" msgid "Export Configs" msgstr "" -msgid "Printer config bundle(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" msgstr "" -msgid "Filament bundle(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" @@ -12127,7 +12915,7 @@ msgid "" msgstr "" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" @@ -12447,6 +13235,19 @@ msgid "" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -12454,6 +13255,13 @@ msgid "" "3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -12718,6 +13526,40 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Movement:" +#~ msgstr "Rörelse:" + +#~ msgid "Movement" +#~ msgstr "Rörelse" + +#~ msgid "Auto Segment" +#~ msgstr "Automatisk Segment" + +#~ msgid "Depth ratio" +#~ msgstr "Djup förhållande" + +#~ msgid "Prizm" +#~ msgstr "Prizm" + +#~ msgid "connector is out of cut contour" +#~ msgstr "kontakten är ur konturen" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "kontakterna är utanför skuren kontur" + +#~ msgid "connector is out of object" +#~ msgstr "kontakten är utanför objektet" + +#~ msgid "connectors is out of object" +#~ msgstr "Kontakterna måste vara på objektets yta." + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Ogiltigt tillstånd. \n" +#~ "Ingen del är vald att behålla efter skärning" + #~ msgid "Edit Text" #~ msgstr "Redigera text" @@ -12751,18 +13593,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Snabb" -#~ msgid "Auto-Calc" -#~ msgstr "Autoberäkna" - -#~ msgid "unloaded" -#~ msgstr "utmatad" - -#~ msgid "loaded" -#~ msgstr "laddad" - -#~ msgid "Filament #" -#~ msgstr "Filament #" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index df8b05e8b5..1b371cc0c5 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" -"PO-Revision-Date: 2023-12-19 22:15+0300\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" +"PO-Revision-Date: 2023-12-29 22:35+0300\n" "Last-Translator: Olcay ÖREN\n" "Language-Team: Türkçe\n" "Language: tr_TR\n" @@ -221,6 +221,9 @@ msgstr "mm" msgid "Position" msgstr "Konum" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Döndürme" @@ -260,6 +263,7 @@ msgstr "Dünya koordinatları" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Boyut" @@ -269,6 +273,118 @@ msgstr "%" msgid "uniform scale" msgstr "düzgün ölçek" +msgid "Planar" +msgstr "Düzlemsel" + +msgid "Dovetail" +msgstr "Kırlangıç Kuyruğu" + +msgid "Auto" +msgstr "Otomatik" + +msgid "Manual" +msgstr "Manual" + +msgid "Plug" +msgstr "Tak" + +msgid "Dowel" +msgstr "Dübel" + +msgid "Snap" +msgstr "Çıt Çıt" + +msgid "Prism" +msgstr "Prizma" + +msgid "Frustum" +msgstr "Kesik" + +msgid "Square" +msgstr "Kare" + +msgid "Hexagon" +msgstr "Altıgen" + +msgid "Keep orientation" +msgstr "Oryantasyonu koru" + +msgid "Place on cut" +msgstr "Kesime yerleştirin" + +msgid "Flip upside down" +msgstr "Baş aşağı çevir" + +msgid "Connectors" +msgstr "Konektörler" + +msgid "Type" +msgstr "Tür" + +msgid "Style" +msgstr "Stil" + +msgid "Shape" +msgstr "Şekil" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "Derinlik" + +msgid "Groove" +msgstr "Oluk" + +msgid "Width" +msgstr "Genişlik" + +msgid "Flap Angle" +msgstr "Kanat Açısı" + +msgid "Groove Angle" +msgstr "Oluk Açısı" + +msgid "Part" +msgstr "Parça" + +msgid "Object" +msgstr "Nesne" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" +"Kesim düzlemini çevirmek için tıklayın\n" +"Kesim düzlemini taşımak için sürükleyin" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" +"Kesim düzlemini çevirmek için tıklayın\n" +"Kesim düzlemini taşımak için sürükleyin\n" +"Bir parçayı diğer tarafa atamak için sağ tıklayın" + +msgid "Move cut plane" +msgstr "Kesim düzlemini hareket ettir" + +msgid "Mode" +msgstr "Mod" + +msgid "Change cut mode" +msgstr "Kesme modunu değiştir" + +msgid "Tolerance" +msgstr "Tolerans" + +msgid "Drag" +msgstr "Sürükle" + +msgid "Draw cut line" +msgstr "Kesim çizgisi çiz" + msgid "Left click" msgstr "Sol tık" @@ -281,9 +397,6 @@ msgstr "Sağ tık" msgid "Remove connector" msgstr "Bağlayıcıyı kaldır" -msgid "Drag" -msgstr "Sürükle" - msgid "Move connector" msgstr "Bağlayıcıyı taşı" @@ -299,23 +412,51 @@ msgstr "Tüm bağlayıcıları seç" msgid "Cut" msgstr "Kes" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" -msgstr "" +msgid "Rotate cut plane" +msgstr "Kesim düzlemini döndür" -msgid "Repairing model object" -msgstr "Model nesnesini onarma" +msgid "Remove connectors" +msgstr "Bağlayıcıları kaldır" -msgid "Connector" -msgstr "Bağlayıcı" +msgid "Bulge" +msgstr "Çıkıntı" -msgid "Movement:" -msgstr "Hareket:" +msgid "Bulge proportion related to radius" +msgstr "Yarıçapla ilgili çıkıntı oranı" -msgid "Movement" -msgstr "Hareket" +msgid "Space" +msgstr "Boşluk" -msgid "Height" -msgstr "Yükseklik" +msgid "Space proportion related to radius" +msgstr "Yarıçapla ilgili alan oranı" + +msgid "Confirm connectors" +msgstr "Bağlayıcıları onayla" + +msgid "Cancel" +msgstr "İptal" + +msgid "Build Volume" +msgstr "Birim Oluştur" + +msgid "Flip cut plane" +msgstr "Kesim düzlemini çevir" + +msgid "Groove change" +msgstr "Oluk değişimi" + +msgid "Reset" +msgstr "Sıfırla" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "Düzenlendi" + +msgid "Cut position" +msgstr "Kesim konumu" + +msgid "Reset cutting plane" +msgstr "Kesme düzlemini sıfırla" msgid "Edit connectors" msgstr "Bağlayıcıları düzenle" @@ -323,6 +464,12 @@ msgstr "Bağlayıcıları düzenle" msgid "Add connectors" msgstr "Bağlayıcı ekle" +msgid "Reset cut" +msgstr "Kesimi sıfırla" + +msgid "Reset cutting plane and remove connectors" +msgstr "Kesme düzlemini sıfırlayın ve bağlayıcıları çıkarın" + msgid "Upper part" msgstr "Üst parça" @@ -332,9 +479,6 @@ msgstr "Alt kısım" msgid "Keep" msgstr "Sakla" -msgid "Place on cut" -msgstr "Kesime yerleştirin" - msgid "Flip" msgstr "Çevir" @@ -344,87 +488,58 @@ msgstr "Kesildikten sonra" msgid "Cut to parts" msgstr "Parçalara ayır" -msgid "Auto Segment" -msgstr "Otomatik Segment" - msgid "Perform cut" msgstr "Kesimi gerçekleştir" -msgid "Reset" -msgstr "Sıfırla" - -msgid "Connectors" -msgstr "Konektörler" - -msgid "Type" -msgstr "Tür" - -msgid "Style" -msgstr "Stil" - -msgid "Shape" -msgstr "Şekil" - -msgid "Depth ratio" -msgstr "Derinlik oranı" - -msgid "Remove connectors" -msgstr "Konektörleri kaldır" - -msgid "Prizm" -msgstr "Prizma" - -msgid "Frustum" -msgstr "Frustum" - -msgid "Square" -msgstr "Kare" - -msgid "Hexagon" -msgstr "Altıgen" - -msgid "Confirm connectors" -msgstr "Bağlayıcıları onayla" - -msgid "Cancel" -msgstr "İptal" - msgid "Warning" msgstr "Uyarı" msgid "Invalid connectors detected" msgstr "Geçersiz bağlayıcılar algılandı" -msgid "connector is out of cut contour" -msgstr "konnektör kesim konturunun dışında" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" -msgid "connectors are out of cut contour" -msgstr "konektörler kesim konturunun dışında" - -msgid "connector is out of object" -msgstr "bağlayıcı nesnenin dışında" - -msgid "connectors is out of object" -msgstr "konektörler nesnenin dışında" +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" msgid "Some connectors are overlapped" msgstr "Bazı konektörler üst üste binmiş" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." +msgstr "Kesimden sonra saklanacak en az bir nesne seçin." + +msgid "Cut plane is placed out of object" +msgstr "Kesilen düzlem nesnenin dışına yerleştirilir" + +msgid "Cut plane with groove is invalid" +msgstr "Oluklu kesme düzlemi geçersiz" + +msgid "Connector" +msgstr "Bağlayıcı" + +msgid "Cut by Plane" +msgstr "Düzlemsel Kes" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" msgstr "" -"Geçersiz durum.\n" -"Kesimden sonra tutmak için hiçbir parça seçilmedi" +"Ana kat olmayan kenarlar kesme aletinden kaynaklanıyor, şimdi düzeltmek " +"istiyor musunuz?" -msgid "Plug" -msgstr "Tak" +msgid "Repairing model object" +msgstr "Model nesnesini onarma" -msgid "Dowel" -msgstr "Dübel" +msgid "Cut by line" +msgstr "Satıra göre kes" -msgid "Tolerance" -msgstr "Tolerans" +msgid "Delete connector" +msgstr "Bağlayıcıyı sil" msgid "Mesh name" msgstr "Mesh adı" @@ -521,6 +636,8 @@ msgstr "Dikiş boyamasından çık" msgid "Paint-on seam editing" msgstr "Boyalı dikiş düzenleme" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Yazı tipi" @@ -558,6 +675,657 @@ msgstr "Metni döndür" msgid "Text shape" msgstr "Metin şekli" +msgid "Set Mirror" +msgstr "Aynayı Ayarla" + +msgid "Embossed text" +msgstr "Kabartmalı metin" + +msgid "Enter emboss gizmo" +msgstr "Kabartma aletine girin" + +msgid "Leave emboss gizmo" +msgstr "Kabartma aletini bırak" + +msgid "Embossing actions" +msgstr "Kabartma eylemleri" + +msgid "Emboss" +msgstr "Kabartma" + +msgid "Text-Rotate" +msgstr "Metin Döndürme" + +msgid "NORMAL" +msgstr "NORMAL" + +msgid "SMALL" +msgstr "KÜÇÜK" + +msgid "ITALIC" +msgstr "YATIK" + +msgid "SWISS" +msgstr "SWISS" + +msgid "MODERN" +msgstr "MODERN" + +msgid "First font" +msgstr "İlk yazı tipi" + +msgid "Default font" +msgstr "Varsayılan yazı tipi" + +msgid "Advanced" +msgstr "Gelişmiş" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" +"Metin seçilen yazı tipi kullanılarak yazılamıyor. Lütfen farklı bir yazı " +"tipi seçmeyi deneyin." + +msgid "Embossed text cannot contain only white spaces." +msgstr "Kabartmalı metin yalnızca beyaz boşluklardan oluşamaz." + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "Metin, yazı tipi tarafından bilinmeyen karakter glifini ('?' ile temsil edilir) içeriyor." + +msgid "Text input doesn't show font skew." +msgstr "Metin girişi yazı tipi çarpıklığını göstermiyor." + +msgid "Text input doesn't show font boldness." +msgstr "Metin girişi yazı tipi kalınlığını göstermiyor." + +msgid "Text input doesn't show gap between lines." +msgstr "Metin girişi satırlar arasındaki boşluğu göstermiyor." + +msgid "Too tall, diminished font height inside text input." +msgstr "Çok uzun, metin girişi içindeki yazı tipi yüksekliği azalmış." + +msgid "Too small, enlarged font height inside text input." +msgstr "Metin girişinde çok küçük, büyütülmüş yazı tipi yüksekliği." + +msgid "Text doesn't show current horizontal alignment." +msgstr "Metin geçerli yatay hizalamayı göstermiyor." + +msgid "Revert font changes." +msgstr "Yazı tipi değişikliklerini geri alın." + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "\"%1%\" yazı tipi seçilemiyor." + +msgid "Operation" +msgstr "Operasyon" + +msgid "Join" +msgstr "Ekle" + +msgid "Click to change text into object part." +msgstr "Metni nesne kısmına değiştirmek için tıklayın." + +msgid "You can't change a type of the last solid part of the object." +msgstr "Nesnenin son katı kısmının türünü değiştiremezsiniz." + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "Kes" + +msgid "Click to change part type into negative volume." +msgstr "Parça tipini negatif hacme değiştirmek için tıklayın." + +msgid "Modifier" +msgstr "Değiştir" + +msgid "Click to change part type into modifier." +msgstr "Parça tipini değiştiriciye değiştirmek için tıklayın." + +msgid "Change Text Type" +msgstr "Metin Türünü Değiştir" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "Kabartma metni için stili yeniden adlandırın (%1%)" + +msgid "Name can't be empty." +msgstr "Ad boş olamaz." + +msgid "Name has to be unique." +msgstr "Adın benzersiz olması gerekiyor." + +msgid "OK" +msgstr "TAMAM" + +msgid "Rename style" +msgstr "Stili yeniden adlandır" + +msgid "Rename current style." +msgstr "Geçerli stili yeniden adlandırın." + +msgid "Can't rename temporary style." +msgstr "Geçici stil yeniden adlandırılamıyor." + +msgid "First Add style to list." +msgstr "İlk önce listeye stil ekleyin." + +#, boost-format +msgid "Save %1% style" +msgstr "%1% stili kaydet" + +msgid "No changes to save." +msgstr "Kaydedilecek değişiklik yok." + +msgid "New name of style" +msgstr "Stilin yeni adı" + +msgid "Save as new style" +msgstr "Yeni stil olarak kaydet" + +msgid "Only valid font can be added to style." +msgstr "Stile yalnızca geçerli yazı tipi eklenebilir." + +msgid "Add style to my list." +msgstr "Stilimi listeme ekle." + +msgid "Save as new style." +msgstr "Yeni stil olarak kaydet." + +msgid "Remove style" +msgstr "Stili kaldır" + +msgid "Can't remove the last existing style." +msgstr "Mevcut son stil kaldırılamıyor." + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "\"%1%\" stilini kalıcı olarak kaldırmak istediğinizden emin misiniz?" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "\"%1%\" stilini silin." + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "\"%1%\" silinemiyor. Son stildir." + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "\"%1%\" geçici stili silinemiyor." + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "Değiştirilen stil \"%1%\"" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "Şu anki stil \"%1%\"" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" +"Stilin \"%1%\" olarak değiştirilmesi mevcut stil değişikliğini iptal edecektir.\n" +"\n" +"Yine de devam etmek ister misin?" + +msgid "Not valid style." +msgstr "Geçerli bir stil değil." + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "\"%1%\" stili kullanılamaz ve listeden kaldırılacaktır." + +msgid "Unset italic" +msgstr "Yatık ayarı kaldır" + +msgid "Set italic" +msgstr "Yatık olarak ayarla" + +msgid "Unset bold" +msgstr "Kalın ayarı kaldır" + +msgid "Set bold" +msgstr "Kalın olarak ayarla" + +msgid "Revert text size." +msgstr "Metin boyutunu geri döndür." + +msgid "Revert embossed depth." +msgstr "Kabartma derinliğini geri alın." + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" +"Seçilen yazı tipi için gelişmiş seçenekler değiştirilemez.\n" +"Başka bir yazı tipi seçin." + +msgid "Revert using of model surface." +msgstr "Model yüzeyinin kullanımını geri alın." + +msgid "Revert Transformation per glyph." +msgstr "Glif başına Dönüşümü Geri Al." + +msgid "Set global orientation for whole text." +msgstr "Tüm metnin genel yönünü ayarlayın." + +msgid "Set position and orientation per glyph." +msgstr "Glif başına konum ve yönlendirmeyi ayarlayın." + +msgctxt "Alignment" +msgid "Left" +msgstr "Sol" + +msgctxt "Alignment" +msgid "Center" +msgstr "Merkez" + +msgctxt "Alignment" +msgid "Right" +msgstr "Sağ" + +msgctxt "Alignment" +msgid "Top" +msgstr "Üst" + +msgctxt "Alignment" +msgid "Middle" +msgstr "Orta" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "Alt" + +msgid "Revert alignment." +msgstr "Hizalamayı geri al." + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "noktalar" + +msgid "Revert gap between characters" +msgstr "Karakterler arasındaki boşluğu geri döndür" + +msgid "Distance between characters" +msgstr "Karakterler arasındaki mesafe" + +msgid "Revert gap between lines" +msgstr "Satırlar arasındaki boşluğu geri döndür" + +msgid "Distance between lines" +msgstr "Çizgiler arası mesafe" + +msgid "Undo boldness" +msgstr "Geri al" + +msgid "Tiny / Wide glyphs" +msgstr "Küçük / Geniş glifler" + +msgid "Undo letter's skew" +msgstr "Harflerin eğrilmesini geri al" + +msgid "Italic strength ratio" +msgstr "Yataylık güç oranı" + +msgid "Undo translation" +msgstr "Çeviriyi geri al" + +msgid "Distance of the center of the text to the model surface." +msgstr "Metnin merkezinin model yüzeyine uzaklığı." + +msgid "Undo rotation" +msgstr "Döndürmeyi geri al" + +msgid "Rotate text Clock-wise." +msgstr "Metni Saat yönünde döndürün." + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "Metni nesnenin yüzeyi boyunca hareket ettirirken metnin dönüşünün kilidini açın." + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "Metni nesnenin yüzeyi boyunca taşırken metnin dönüşünü kilitleyin." + +msgid "Select from True Type Collection." +msgstr "True Type Koleksiyonundan seçim yapın." + +msgid "Set text to face camera" +msgstr "Metni yüz kamerasına ayarla" + +msgid "Orient the text towards the camera." +msgstr "Metni kameraya doğru yönlendirin." + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" +"Tam olarak aynı yazı tipi yüklenemiyor(\"%1%\"). Uygulama benzer bir uygulama " +"seçti(\"%2%\"). Metni düzenlemeyi etkinleştirmek için yazı tipini belirtmeniz gerekir." + +msgid "No symbol" +msgstr "No symbol" + +msgid "Loading" +msgstr "Yükleniyor" + +msgid "In queue" +msgstr "Sırada" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Yükseklik" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "Yüzeyi kullan" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "Glif başına" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "Hizalama" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "Karakter boşluğu" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "Satır boşluğu" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "Boldness" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "Eğrilik oranı" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "Yüzeyden" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "Sürdür" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "Koleksiyon" + +msgid "Enter SVG gizmo" +msgstr "SVG aletine girin" + +msgid "Leave SVG gizmo" +msgstr "SVG aletinden ayrıl" + +msgid "SVG actions" +msgstr "SVG eylemleri" + +msgid "SVG" +msgstr "SVG" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "SVG-Döndürme" + +msgid "Opacity (%1%)" +msgstr "Opaklık (%1)" + +msgid "Color gradient (%1%)" +msgstr "Renk gradyanı (%1)" + +msgid "Undefined fill type" +msgstr "Tanımsız dolgu türü" + +msgid "Linear gradient" +msgstr "Doğrusal degrade" + +msgid "Radial gradient" +msgstr "Radyal degrade" + +msgid "Open filled path" +msgstr "Doldurulmuş yolu aç" + +msgid "Undefined stroke type" +msgstr "Tanımlanmamış vuruş türü" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "Yol kendi kendine kesişmeden ve birden fazla noktadan iyileştirilemez." + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" +"Son şekil, aynı koordinata sahip birden fazla noktanın kendi kendine " +"kesişimini içerir." + +msgid "Shape is marked as invisible (%1%)." +msgstr "Şekil görünmez (%1) olarak işaretlendi." + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "Şeklin dolgusu (%1) desteklenmeyenleri içeriyor: %2%." + +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "Şeklin konturu (%1) çok ince (minimum genişlik %2 mm'dir)." + +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "Şeklin konturu (%1) desteklenmeyenleri içeriyor: %2%." + +msgid "Face the camera" +msgstr "Kameraya bak" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "Bilinmeyen dosya adı" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "SVG dosya yolu \"%1%\"" + +msgid "Reload SVG file from disk." +msgstr "SVG dosyasını diskten yeniden yükleyin." + +msgid "Change file" +msgstr "Dosyayı değiştir" + +msgid "Change to another .svg file" +msgstr "Başka bir .svg dosyasına geçin" + +msgid "Forget the file path" +msgstr "Dosya yolunu unut" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" +"Yerel yolu 3MF dosyasına kaydetmeyin.\n" +"Ayrıca 'diskten yeniden yükle' seçeneğini de devre dışı bırakır." + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "Düzenlenemez parça olarak modele dönüştürün" + +msgid "Save as" +msgstr "Farklı kaydet" + +msgid "Save SVG file" +msgstr "SVG dosyasını kaydet" + +msgid "Save as '.svg' file" +msgstr "'.svg' dosyası olarak kaydet" + +msgid "Size in emboss direction." +msgstr "Kabartma yönünde boyut." + +#. TRN: The placeholder contains a number. +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "Ölçek ayrıca eğri örneklerinin miktarını da değiştirir (%1)" + +msgid "Width of SVG." +msgstr "SVG'nin genişliği." + +msgid "Height of SVG." +msgstr "SVG'nin yüksekliği." + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "SVG'nin en boy oranını kilitleyin/kilidini açın." + +msgid "Reset scale" +msgstr "Ölçeği sıfırla" + +msgid "Resize" +msgstr "Boyutlandır" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "SVG merkezinin model yüzeyine uzaklığı." + +msgid "Reset distance" +msgstr "Mesafeyi sıfırla" + +msgid "Reset rotation" +msgstr "Döndürmeyi sıfırla" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "Yüzeyin üzerinde sürüklerken dönüş açısını kilitleyin/kilidini açın." + +msgid "Mirror vertically" +msgstr "Dikey olarak yansıt" + +msgid "Mirror horizontally" +msgstr "Yatay olarak yansıt" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "SVG Türünü Değiştir" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Ayna" + +msgid "Choose SVG file for emboss:" +msgstr "Kabartma için SVG dosyasını seçin:" + +msgid "File does NOT exist (%1%)." +msgstr "Dosya mevcut DEĞİL (%1)." + +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "Dosya adının \".svg\" ile bitmesi gerekiyor ancak siz %1%'i seçtiniz" + +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "Nano SVG ayrıştırıcı dosyadan (%1) yüklenemiyor." + +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "SVG dosyası kabartma yapılacak tek bir yol İÇERMEZ (%1)." + +msgid "Vertex" +msgstr "Tepe noktası" + +msgid "Edge" +msgstr "Edge" + +msgid "Plane" +msgstr "Düzlem" + +msgid "Point on edge" +msgstr "Kenarın noktası" + +msgid "Point on circle" +msgstr "Çemberin noktası" + +msgid "Point on plane" +msgstr "Düzlemin noktası" + +msgid "Center of edge" +msgstr "Kenarın merkezi" + +msgid "Center of circle" +msgstr "Çemberin merkezi" + +msgid "ShiftLeft mouse button" +msgstr "Shift Sol fare düğmesi" + +msgid "Select feature" +msgstr "Özellik seçin" + +msgid "Select point" +msgstr "Nokta seç" + +msgid "Delete" +msgstr "Sil" + +msgid "Restart selection" +msgstr "Seçimi yeniden başlat" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "Seçimi kaldır" + +msgid "Measure" +msgstr "Ölçüm" + +msgid "Edit to scale" +msgstr "Ölçeğe göre düzenleyin" + +msgctxt "Verb" +msgid "Scale" +msgstr "Ölçek" + +msgid "None" +msgstr "Hiçbiri" + +msgid "Diameter" +msgstr "Çap" + +msgid "Length" +msgstr "Uzunluk" + +msgid "Selection" +msgstr "Seçim" + +msgid "Copy to clipboard" +msgstr "Panoya kopyala" + +msgid "Perpendicular distance" +msgstr "Dikey mesafe" + +msgid "Distance" +msgstr "Mesafe" + +msgid "Direct distance" +msgstr "Doğrudan mesafe" + +msgid "Distance XYZ" +msgstr "Uzaklık XYZ" + msgid "Ctrl+" msgstr "Ctrl+" @@ -741,13 +1509,12 @@ msgid "" "The number of user presets cached in the cloud has exceeded the upper limit, " "newly created user presets can only be used locally." msgstr "" +"Bulutta önbelleğe alınan kullanıcı ön ayarlarının sayısı üst sınırı aştı; " +"yeni oluşturulan kullanıcı ön ayarları yalnızca yerel olarak kullanılabilir." msgid "Sync user presets" msgstr "Kullanıcı ön ayarlarını senkronize edin" -msgid "Loading" -msgstr "Yükleniyor" - msgid "Loading user preset" msgstr "Kullanıcı ön ayarı yükleniyor" @@ -778,9 +1545,6 @@ msgstr "G kodu dosyası seçin:" msgid "Import File" msgstr "Dosya İçe Aktar" -msgid "Delete" -msgstr "Sil" - msgid "Choose files" msgstr "Dosyaları seç" @@ -851,9 +1615,6 @@ msgstr "Temizleme seçenekleri" msgid "Bed adhension" msgstr "Etek" -msgid "Advanced" -msgstr "Gelişmiş" - msgid "Add part" msgstr "Parça ekle" @@ -905,6 +1666,21 @@ msgstr "Seçilen nesneyi sil" msgid "Load..." msgstr "Yükle..." +msgid "Cube" +msgstr "Küp" + +msgid "Cylinder" +msgstr "Silindir" + +msgid "Cone" +msgstr "Koni" + +msgid "Disc" +msgstr "Disk" + +msgid "Torus" +msgstr "Simit" + msgid "Orca Cube" msgstr "Orca Küpü" @@ -917,21 +1693,12 @@ msgstr "Autodesk FDM Testi" msgid "Voron Cube" msgstr "Voron Küpü" -msgid "Cube" -msgstr "Küp" - -msgid "Cylinder" -msgstr "Silindir" - -msgid "Cone" -msgstr "Koni" +msgid "Stanford Bunny" +msgstr "Stanford Tavşanı" msgid "Text" msgstr "Metin" -msgid "SVG" -msgstr "SVG" - msgid "Height range Modifier" msgstr "Yükseklik aralığı Değiştirici" @@ -1059,9 +1826,6 @@ msgstr "Z ekseni boyunca" msgid "Mirror along the Z axis" msgstr "Z ekseni boyunca aynalama" -msgid "Mirror" -msgstr "Ayna" - msgid "Mirror object" msgstr "Nesneyi aynala" @@ -1083,6 +1847,9 @@ msgstr "Kesim bilgisini geçersiz kıl" msgid "Add Primitive" msgstr "Primitif Ekle" +msgid "Add Handy models" +msgstr "Pratik Modeller Ekle" + msgid "Show Labels" msgstr "Etiketleri Göster" @@ -1326,12 +2093,6 @@ msgstr "Yükseklik aralıkları" msgid "Settings for height range" msgstr "Yükseklik aralığı ayarları" -msgid "Object" -msgstr "Nesne" - -msgid "Part" -msgstr "Parça" - msgid "Layer" msgstr "Katman" @@ -1354,9 +2115,6 @@ msgstr "Son katı nesne parçasının tipi değiştirilNozullidir." msgid "Negative Part" msgstr "Negatif Kısım" -msgid "Modifier" -msgstr "Değiştirici" - msgid "Support Blocker" msgstr "Destek Engelleyici" @@ -1431,9 +2189,6 @@ msgstr "Dolgu yoğunluğu (%)" msgid "Auto Brim" msgstr "Otomatik Kenar" -msgid "Auto" -msgstr "Otomatik" - msgid "Mouse ear" msgstr "Fare Kulağı" @@ -1509,9 +2264,6 @@ msgstr "Özel G kodu" msgid "Enter Custom G-code used on current layer:" msgstr "Geçerli katmanda kullanılan Özel G kodunu girin:" -msgid "OK" -msgstr "TAMAM" - msgid "Jump to Layer" msgstr "Katmana Atla" @@ -1566,15 +2318,15 @@ msgstr "Yazıcı yok" msgid "..." msgstr "..." -msgid "Failed to connect to the server" -msgstr "Sunucuya bağlanırken hata oluştu" - msgid "Check the status of current system services" msgstr "Mevcut sistem hizmetlerinin durumunu kontrol edin" msgid "code" msgstr "kod" +msgid "Failed to connect to the server" +msgstr "Sunucuya bağlanırken hata oluştu" + msgid "Failed to connect to cloud service" msgstr "Bulut hizmetine bağlanılamadı" @@ -2420,9 +3172,6 @@ msgstr "" msgid "Origin" msgstr "Menşei" -msgid "Diameter" -msgstr "Çap" - msgid "Size in X and Y of the rectangular plate." msgstr "Dikdörtgen plakanın X ve Y boyutları." @@ -2592,6 +3341,24 @@ msgstr "" "etkinleştirin\n" "Hayır - Bu sefer spiral modunu kullanmaktan vazgeçin" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" +"Alternatif ekstra duvar yalnızca dikey kabuk kalınlığının devre dışı " +"bırakılmasıyla çalışır. " + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" +"Bu ayarlar otomatik olarak değiştirilsin mi?\n" +"Evet - Dikey kabuk kalınlığını sağlamayı devre dışı bırakın ve alternatif ekstra " +"duvarı etkinleştirin\n" +"Hayır - Alternatif ekstra duvar kullanmayın" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2975,6 +3742,9 @@ msgstr "Zaman" msgid "Percent" msgstr "Yüzde" +msgid "Used filament" +msgstr "Kullanılan filament" + msgid "Layer Height (mm)" msgstr "Katman Yüksekliği (mm)" @@ -2993,9 +3763,6 @@ msgstr "Sıcaklık (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Hacimsel akış hızı (mm³/s)" -msgid "Used filament" -msgstr "Kullanılan filament" - msgid "Travel" msgstr "Seyahat" @@ -5214,6 +5981,9 @@ msgstr "Giriş Bölgesi" msgid "Stealth Mode" msgstr "Gizli mod" +msgid "Check for stable updates only" +msgstr "Yalnızca kararlı güncellemeleri kontrol edin" + msgid "Metric" msgstr "Metrik" @@ -6103,6 +6873,13 @@ msgstr "" "0 üst z mesafesi, 0 arayüz aralığı, eş merkezli desen ve bağımsız destek " "katmanı yüksekliğini devre dışı bırakma" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" +"Katman yüksekliği çok küçük.\n" +"min_layer_height olarak ayarlanacak\n" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6243,13 +7020,13 @@ msgid "Setting Overrides" msgstr "Ayarların Üzerine Yazma" msgid "Retraction" -msgstr "Geri çekme" +msgstr "Geri Çekme" msgid "Basic information" msgstr "Temel Bilgiler" msgid "Recommended nozzle temperature" -msgstr "Önerilen Nozul sıcaklığı" +msgstr "Önerilen nozul sıcaklığı" msgid "Recommended nozzle temperature range of this filament. 0 means no set" msgstr "" @@ -6758,18 +7535,22 @@ msgstr "Sıkıştırma hattı genişliği" msgid "Ramming line spacing" msgstr "Sıkıştırma hattı aralığı" -msgid "Recalculate" -msgstr "Yeniden hesapla" +msgid "Auto-Calc" +msgstr "Otomatik Hesaplama" + +msgid "Re-calculate" +msgstr "Tekrar Hesaplama" msgid "Flushing volumes for filament change" msgstr "Filament değişimi için temizleme hacmi" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" -"Orca, filament renkleri her değiştiğinde yıkama hacimlerinizi yeniden " -"hesaplar. Bu davranışı Tercihler'de değiştirebilirsiniz." +"Orca, filamentlerin rengi her değiştiğinde yıkama hacimlerinizi yeniden " +"hesaplar. Otomatik hesaplamayı Orca Slicer > Tercihler bölümünden devre dışı " +"bırakabilirsiniz." msgid "Flushing volume (mm³) for each filament pair." msgstr "Her filament çifti için yıkama hacmi (mm³)." @@ -6785,6 +7566,15 @@ msgstr "Çarpan [%.2f, %.2f] aralığında olmalıdır." msgid "Multiplier" msgstr "Çarpan" +msgid "unloaded" +msgstr "boşaltılmış" + +msgid "loaded" +msgstr "yüklenmiş" + +msgid "Filament #" +msgstr "Filament #" + msgid "From" msgstr "İtibaren" @@ -6821,9 +7611,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "Panoya kopyala" - msgid "Paste from clipboard" msgstr "Panodan yapıştır" @@ -6935,9 +7722,6 @@ msgstr "Shift+Herhangi bir ok tuşu" msgid "Movement step set to 1 mm" msgstr "Hareket adımı 1 mm'ye ayarlandı" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "klavye 1-9: nesne/parça için filamenti ayarlayın" @@ -6986,7 +7770,7 @@ msgstr "Gizmo SLA destek noktaları" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM boyalı dikiş" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "Hazırlama/Önizleme arasında geçiş yap" msgid "Plater" @@ -7022,9 +7806,6 @@ msgstr "Nesneler ve parçalar için ekstruder numarasını ayarlayın" msgid "Delete objects, parts, modifiers " msgstr "Nesneleri, parçaları, değiştiricileri silin " -msgid "Space" -msgstr "Boşluk" - msgid "Select the object/part and press space to change the name" msgstr "Nesneyi/parçayı seçin ve adını değiştirmek için boşluk tuşuna basın" @@ -7157,7 +7938,7 @@ msgid "Idle" msgstr "Boşta" msgid "Beta version" -msgstr "" +msgstr "Beta sürüm" msgid "Latest version" msgstr "Son sürüm" @@ -7749,18 +8530,18 @@ msgid "Hostname, IP or URL" msgstr "Ana bilgisayar adı, IP veya URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. Bu " -"alan, yazıcı ana bilgisayar örneğinin ana bilgisayar adını, IP adresini veya " -"URL'sini içermelidir. Temel kimlik doğrulamanın etkin olduğu HAProxy'nin " -"arkasındaki yazdırma ana bilgisayarına, kullanıcı adı ve parolanın aşağıdaki " -"biçimdeki URL'ye girilmesiyle erişilebilir: https://username:password@your-" -"octopi-address/" +"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. " +"Bu alan, yazıcı ana bilgisayar örneğinin ana bilgisayar adını, IP adresini " +"veya URL'sini içermelidir. Temel kimlik doğrulamanın etkin olduğu " +"HAProxy'nin arkasındaki yazdırma ana bilgisayarına, kullanıcı adı ve " +"parolanın aşağıdaki biçimdeki URL'ye girilmesiyle erişilebilir: https://" +"username:password@your-octopi-address/" msgid "Device UI" msgstr "Cihaz kullanıcı arayüzü" @@ -7775,11 +8556,12 @@ msgid "API Key / Password" msgstr "API Anahtarı / Şifre" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. Bu " -"alan, kimlik doğrulama için gereken API Anahtarını veya şifreyi içermelidir." +"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. " +"Bu alan, kimlik doğrulama için gereken API Anahtarını veya şifreyi " +"içermelidir." msgid "Name of the printer" msgstr "Yazıcı adı" @@ -7833,7 +8615,7 @@ msgid "Detour and avoid to travel across wall which may cause blob on surface" msgstr "Yüzeyde lekelenmeye neden olabilecek duvar boyunca ilerlemekten kaçın" msgid "Avoid crossing wall - Max detour length" -msgstr "Duvarı geçmekten kaçının - Maksimum servis yolu uzunluğu" +msgstr "Duvarı geçmekten kaçının - maksimum servis yolu uzunluğu" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " @@ -8652,7 +9434,7 @@ msgid "Only used as a visual help on UI" msgstr "Yalnızca kullanıcı arayüzünde görsel yardım olarak kullanılır" msgid "Extruder offset" -msgstr "Ekstruder Konum" +msgstr "Ekstruder konum" msgid "Flow ratio" msgstr "Akış oranı" @@ -8852,14 +9634,14 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "Bir takım değişiminden sonra, yeni yüklenen filamentin nozul içindeki kesin " "konumu bilinmeyebilir ve filament basıncı muhtemelen henüz stabil değildir. " -"Yazdırma kafasını bir dolguya veya kurban nesneye boşaltmadan önce Slic3r, " -"ardışık dolgu veya kurban nesne ekstrüzyonlarını güvenilir bir şekilde " -"üretmek için her zaman bu miktardaki malzemeyi silme kulesine " +"Yazdırma kafasını bir dolguya veya kurban nesneye boşaltmadan önce Orca " +"Slicer, ardışık dolgu veya kurban nesne ekstrüzyonlarını güvenilir bir " +"şekilde üretmek için her zaman bu miktardaki malzemeyi silme kulesine " "hazırlayacaktır." msgid "Speed of the last cooling move" @@ -9046,17 +9828,18 @@ msgstr "Dolgu uzunluğu" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" "Bir dolgu hattını, ek bir çevrenin kısa bir bölümü ile bir iç çevreye " "bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon " -"genişliği üzerinden hesaplanır. Slic3r iki yakın dolgu hattını kısa bir " +"genişliği üzerinden hesaplanır. Orca Slicer iki yakın dolgu hattını kısa bir " "çevre segmentine bağlamaya çalışıyor. infill_anchor_max'tan daha kısa böyle " "bir çevre segmenti bulunamazsa, dolgu hattı yalnızca bir taraftaki bir çevre " "segmentine bağlanır ve alınan çevre segmentinin uzunluğu bu parametreyle " @@ -9076,17 +9859,18 @@ msgstr "Dolgu maksimum uzunluk" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" "Bir dolgu hattını, ek bir çevrenin kısa bir bölümü ile bir iç çevreye " "bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon " -"genişliği üzerinden hesaplanır. Slic3r iki yakın dolgu hattını kısa bir " +"genişliği üzerinden hesaplanır. Orca Slicer iki yakın dolgu hattını kısa bir " "çevre segmentine bağlamaya çalışıyor. Bu parametreden daha kısa bir çevre " "segmenti bulunamazsa, dolgu hattı sadece bir kenardaki bir çevre segmentine " "bağlanır ve alınan çevre segmentinin uzunluğu infill_anchor ile sınırlıdır " @@ -9267,9 +10051,6 @@ msgstr "" "Duvara baskı yaparken rastgele titreme, böylece yüzeyin pürüzlü bir görünüme " "sahip olması. Bu ayar bulanık konumu kontrol eder" -msgid "None" -msgstr "Hiçbiri" - msgid "Contour" msgstr "Kontur" @@ -9665,6 +10446,19 @@ msgstr "" "Makinenin yazdırmak için daha düşük hızlanma kullandığı sessiz modu " "destekleyip desteklemediği" +msgid "Emit limits to G-code" +msgstr "G-code sınırları" + +msgid "Machine limits" +msgstr "Yazıcı sınırları" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" +"Etkinleştirilirse, makine sınırları G kodu dosyasına aktarılacaktır.\n" +"G kodu tadı Klipper olarak ayarlandığında bu seçenek göz ardı edilecektir." + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9687,9 +10481,6 @@ msgstr "Maksimum hız Z" msgid "Maximum speed E" msgstr "Maksimum hız E" -msgid "Machine limits" -msgstr "Yazıcısınırları" - msgid "Maximum X speed" msgstr "Maksimum X hızı" @@ -9941,11 +10732,11 @@ msgid "Host Type" msgstr "Bağlantı Türü" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. Bu " -"alan ana bilgisayarın türünü içermelidir." +"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. " +"Bu alan ana bilgisayarın türünü içermelidir." msgid "Nozzle volume" msgstr "Nozul hacmi" @@ -10088,17 +10879,39 @@ msgstr "İç duvarın hızı" msgid "Number of walls of every layer" msgstr "Her katmanın duvar sayısı" +msgid "Alternate extra wall" +msgstr "Alternatif ekstra duvar" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" +"Bu ayar her iki katmana ekstra bir duvar ekler. Bu şekilde dolgu duvarlar " +"arasında dikey olarak sıkışır ve daha güçlü baskılar elde edilir.\n" +"\n" +"Bu seçenek etkinleştirildiğinde dikey kabuk kalınlığını sağla seçeneğinin " +"devre dışı bırakılması gerekir. \n" +"\n" +"İlave çevrelerin sabitleneceği dolgu sınırlı olduğundan, bu seçenekle " +"birlikte yıldırım dolgusunun kullanılması önerilmez." + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" "Çıktı G-kodunu özel komut dosyaları aracılığıyla işlemek istiyorsanız, " "mutlak yollarını burada listeleyin. Birden fazla betiği noktalı virgülle " "ayırın. Betiklere ilk argüman olarak G-code dosyasının mutlak yolu aktarılır " -"ve ortam değişkenlerini okuyarak Slic3r yapılandırma ayarlarına " +"ve ortam değişkenlerini okuyarak Orca Slicer yapılandırma ayarlarına " "erişebilirler." msgid "Printer notes" @@ -10177,9 +10990,6 @@ msgstr "Katman değişiminde geri çek" msgid "Force a retraction when changes layer" msgstr "Katmanı değiştirdiğinde geri çekilmeyi zorla" -msgid "Length" -msgstr "Uzunluk" - msgid "Retraction Length" msgstr "Geri Çekme Uzunluğu" @@ -10390,6 +11200,30 @@ msgstr "" "ekstruder döngüden ayrılmadan önce içeriye doğru küçük bir hareket " "gerçekleştirilir." +msgid "Wipe before external loop" +msgstr "Harici döngüden önce silin" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" +"Dış/İç veya İç/Dış/İç duvar baskı sırası ile yazdırırken, dış çevrenin " +"başlangıcında olası aşırı çıkıntının görünürlüğünü en aza indirmek " +"için, kaldırma işlemi dış çevrenin başlangıcından itibaren biraz " +"içeride gerçekleştirilir. Bu şekilde herhangi bir aşırı ekstrüzyon " +"potansiyeli dış yüzeyden gizlenir. \n" +"\n" +"Bu, Dış/İç veya İç/Dış/İç duvar yazdırma sırası ile yazdırırken " +"kullanışlıdır, çünkü bu modlarda, bir geri çekilme hareketinin " +"hemen ardından bir dış çevrenin yazdırılması daha olasıdır." + msgid "Wipe speed" msgstr "Temizleme hızı" @@ -10468,23 +11302,27 @@ msgid "" msgstr "" "Spiralleştirme, dış konturun z hareketlerini yumuşatır. Ve katı bir modeli, " "katı alt katmanlara sahip tek duvarlı bir baskıya dönüştürür. Oluşturulan " -"son modelde dikiş yok" +"son modelde dikiş yok." msgid "Smooth Spiral" -msgstr "" +msgstr "Pürüzsüz spiral" msgid "" "Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " "at all, even in the XY directions on walls that are not vertical" msgstr "" +"Pürüzsüz Spiral, X ve Y hareketlerini de yumuşatır ve dikey olmayan " +"duvarlarda XY yönlerinde bile hiçbir görünür ek yeri oluşmamasını sağlar." msgid "Max XY Smoothing" -msgstr "" +msgstr "Maksimum xy yumuşatma" msgid "" "Maximum distance to move points in XY to try to achieve a smooth spiralIf " "expressed as a %, it will be computed over nozzle diameter" msgstr "" +"Düzgün bir spiral elde etmek için XY'deki noktaları hareket ettirmek için " +"maksimum mesafe % olarak ifade edilirse nozül çapı üzerinden hesaplanacaktır." msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -10521,13 +11359,13 @@ msgid "Start G-code when start the printing of this filament" msgstr "Bu filament ile baskı başladığında çalıştırılacak G-Kod" msgid "Single Extruder Multi Material" -msgstr "Tek Ekstruder Çoklu Malzeme" +msgstr "Tek ekstruder çoklu malzeme" msgid "Use single nozzle to print multi filament" msgstr "Çoklu filament basmak için tek nozul kullan" msgid "Manual Filament Change" -msgstr "Manuel Filament Değişimi" +msgstr "Manuel filament değişimi" msgid "" "Enable this option to omit the custom Change filament G-code only at the " @@ -10543,7 +11381,7 @@ msgstr "" "PAUSE kullanırız." msgid "Purge in prime tower" -msgstr "Prime Tower'da temizlik" +msgstr "Prime tower'da temizlik" msgid "Purge remaining filament into prime tower" msgstr "Kalan filamenti Prime Tower'da boşalt" @@ -10637,16 +11475,16 @@ msgstr "" "uygulayıcıları oluşturulur" msgid "normal(auto)" -msgstr "normal(otomatik)" +msgstr "Normal(Otomatik)" msgid "tree(auto)" -msgstr "ağaç(otomatik)" +msgstr "Ağaç(Otomatik)" msgid "normal(manual)" -msgstr "normal(manuel)" +msgstr "Normal(Manuel)" msgid "tree(manual)" -msgstr "ağaç(manuel)" +msgstr "Ağaç(Manuel)" msgid "Support/object xy distance" msgstr "Destek/nesne xy mesafesi" @@ -11110,7 +11948,7 @@ msgstr "" "damlamayı en aza indirebilir" msgid "Wipe Distance" -msgstr "Temizleme Mesafesi" +msgstr "Temizleme mesafesi" msgid "" "Discribe how long the nozzle will move along the last path when " @@ -11162,9 +12000,6 @@ msgstr "Ana hacim" msgid "The volume of material to prime extruder on tower." msgstr "Kule üzerindeki ana ekstruder malzeme hacmi." -msgid "Width" -msgstr "Genişlik" - msgid "Width of prime tower" msgstr "Prime tower genişliği" @@ -11342,13 +12177,13 @@ msgstr "Göreceli (relative) E mesafelerini kullan" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" "\"label_objects\" seçeneği kullanılırken göreceli ekstrüzyon önerilir. Bazı " -"ekstruderler bu seçeneğin işareti kaldırıldığında (mutlak ekstrüzyon modu) " -"daha iyi çalışır. Temizleme kulesi yalnızca göreceli modla uyumludur. " -"BambuLab yazıcılarında her zaman etkindir. Varsayılan olarak işaretlendi" +"ekstrüderler bu seçenek işaretlenmediğinde daha iyi çalışır (mutlak ekstrüzyon modu). " +"Silme kulesi yalnızca göreceli modla uyumludur. Çoğu yazıcıda önerilir. " +"Varsayılan işaretlendi." msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -12593,7 +13428,7 @@ msgstr "" "Lütfen tekrar girin." msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "Üretici bir sayı olamaz. Lütfen tekrar girin." msgid "" "You have not selected a printer or preset yet. Please select at least one." @@ -12633,9 +13468,6 @@ msgstr "Şablondan oluştur" msgid "Create Based on Current Printer" msgstr "Mevcut Yazıcıya Göre Oluşturun" -msgid "wiki" -msgstr "wiki" - msgid "Import Preset" msgstr "Ön Ayarı İçe Aktar" @@ -12830,11 +13662,11 @@ msgstr "Yazıcı Ayarı" msgid "Export Configs" msgstr "Yapılandırmaları Dışa Aktar" -msgid "Printer config bundle(.bbscfg)" -msgstr "Yazıcı yapılandırma paketi(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" +msgstr "Yazıcı yapılandırma paketi(.orca_printer)" -msgid "Filament bundle(.bbsflmt)" -msgstr "Filament demeti(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" +msgstr "Filament demeti(.orca_filament)" msgid "Printer presets(.zip)" msgstr "Yazıcı ön ayarları (.zip)" @@ -12876,7 +13708,7 @@ msgstr "" "değiştirebilirsiniz." msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" "Yazıcı ve yazıcıya ait tüm filament ve işlem ön ayarları. \n" @@ -13254,12 +14086,43 @@ msgstr "" "OrcaSlicer'ın Hava filtreleme/Egzoz Fanını destekleyebileceğini biliyor " "muydunuz?" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" +"G-kodu penceresi\n" +"C tuşuna basarak G*kodu penceresini açabilir/kapatabilirsiniz." + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" +"Çalışma alanlarını değiştir\n" +"Sekme tuşuna basarak Hazırlık ve Önizleme çalışma " +"alanları arasında geçiş yapabilirsiniz." + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" "Did you know that Orca Slicer offers a wide range of keyboard shortcuts and " "3D scene operations." msgstr "" +"Klavye kısayolları nasıl kullanılır?\n" +"Orca Slicer'ın çok çeşitli klavye kısayolları ve 3B sahne işlemleri " +"sunduğunu biliyor muydunuz?" + +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" +"Tek sayıyı tersine çevir\n" +"Tek sayıyı ters çevir özelliğinin çıkıntılarınızın yüzey kalitesini " +"önemli ölçüde artırabileceğini biliyor muydunuz?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -13267,6 +14130,9 @@ msgid "" "Did you know that you can cut a model at any angle and position with the " "cutting tool?" msgstr "" +"Kesme Aleti\n" +"Kesici aletle bir modeli istediğiniz açıda ve konumda kesebileceğinizi " +"biliyor muydunuz?" #: resources/data/hints.ini: [hint:Fix Model] msgid "" @@ -13274,18 +14140,26 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems on the Windows system?" msgstr "" +"Modeli Düzelt\n" +"Windows sisteminde birçok dilimleme sorununu önlemek için bozuk bir 3D " +"modeli düzeltebileceğinizi biliyor muydunuz?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" "Timelapse\n" "Did you know that you can generate a timelapse video during each print?" msgstr "" +"Timelapse\n" +"Her baskı sırasında timelapse video oluşturabileceğinizi biliyor muydunuz?" #: resources/data/hints.ini: [hint:Auto-Arrange] msgid "" "Auto-Arrange\n" "Did you know that you can auto-arrange all objects in your project?" msgstr "" +"Otomatik Düzenleme\n" +"Projenizdeki tüm nesneleri otomatik olarak düzenleyebileceğinizi biliyor " +"muydunuz?" #: resources/data/hints.ini: [hint:Auto-Orient] msgid "" @@ -13293,6 +14167,9 @@ msgid "" "Did you know that you can rotate objects to an optimal orientation for " "printing by a simple click?" msgstr "" +"Otomatik Yönlendirme\n" +"Basit bir tıklamayla nesneleri yazdırma için en uygun yöne " +"döndürebileceğinizi biliyor muydunuz?" #: resources/data/hints.ini: [hint:Lay on Face] msgid "" @@ -13426,6 +14303,9 @@ msgid "" "Did you know that you can print a model even faster, by using the Adaptive " "Layer Height option? Check it out!" msgstr "" +"Uyarlanabilir Katman Yüksekliği ile baskınızı hızlandırın\n" +"Uyarlanabilir Katman Yüksekliği seçeneğini kullanarak bir modeli daha da " +"hızlı yazdırabileceğinizi biliyor muydunuz? Buna bir bak!" #: resources/data/hints.ini: [hint:Support painting] msgid "" @@ -13458,6 +14338,10 @@ msgid "" "successfully? Higher temperature and lower speed are always recommended for " "the best results." msgstr "" +"İpek Filament Baskı\n" +"İpek filamentin başarılı bir şekilde basılabilmesi için özel dikkat " +"gösterilmesi gerektiğini biliyor muydunuz? En iyi sonuçlar için her zaman " +"daha yüksek sıcaklık ve daha düşük hız önerilir." #: resources/data/hints.ini: [hint:Brim for better adhesion] msgid "" @@ -13533,6 +14417,65 @@ msgstr "" "sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını " "azaltabileceğini biliyor muydunuz?" +#~ msgid "wiki" +#~ msgstr "wiki" + +#~ msgid "" +#~ "Relative extrusion is recommended when using \"label_objects\" option." +#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "mode). Wipe tower is only compatible with relative mode. It is always " +#~ "enabled on BambuLab printers. Default is checked" +#~ msgstr "" +#~ "\"label_objects\" seçeneği kullanılırken göreceli ekstrüzyon önerilir. " +#~ "Bazı ekstruderler bu seçeneğin işareti kaldırıldığında (mutlak ekstrüzyon " +#~ "modu) daha iyi çalışır. Temizleme kulesi yalnızca göreceli modla " +#~ "uyumludur. BambuLab yazıcılarında her zaman etkindir. Varsayılan olarak " +#~ "işaretlendi" + +#~ msgid "Movement:" +#~ msgstr "Hareket:" + +#~ msgid "Movement" +#~ msgstr "Hareket" + +#~ msgid "Auto Segment" +#~ msgstr "Otomatik Segment" + +#~ msgid "Depth ratio" +#~ msgstr "Derinlik oranı" + +#~ msgid "Prizm" +#~ msgstr "Prizma" + +#~ msgid "connector is out of cut contour" +#~ msgstr "konnektör kesim konturunun dışında" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "konektörler kesim konturunun dışında" + +#~ msgid "connector is out of object" +#~ msgstr "bağlayıcı nesnenin dışında" + +#~ msgid "connectors is out of object" +#~ msgstr "konektörler nesnenin dışında" + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Geçersiz durum.\n" +#~ "Kesimden sonra tutmak için hiçbir parça seçilmedi" + +#~ msgid "Recalculate" +#~ msgstr "Yeniden hesapla" + +#~ msgid "" +#~ "Orca recalculates your flushing volumes everytime the filament colors " +#~ "change. You can change this behavior in Preferences." +#~ msgstr "" +#~ "Orca, filament renkleri her değiştiğinde yıkama hacimlerinizi yeniden " +#~ "hesaplar. Bu davranışı Tercihler'de değiştirebilirsiniz." + #~ msgid "" #~ "The printer timed out while receiving a print job. Please check if the " #~ "network is functioning properly and send the print again." @@ -13577,30 +14520,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Hızlı" -#~ msgid "Auto-Calc" -#~ msgstr "Otomatik Hesaplama" - -#~ msgid "Re-calculate" -#~ msgstr "Tekrar Hesaplama" - -#~ msgid "" -#~ "Studio would re-calculate your flushing volumes everytime the filaments " -#~ "color changed. You could disable the auto-calculate in Bambu Studio > " -#~ "Preferences" -#~ msgstr "" -#~ "Studio, filamentlerin rengi her değiştiğinde yıkama hacimlerinizi yeniden " -#~ "hesaplar. Otomatik hesaplamayı Bambu Studio > Tercihler bölümünden devre " -#~ "dışı bırakabilirsiniz." - -#~ msgid "unloaded" -#~ msgstr "boşaltılmış" - -#~ msgid "loaded" -#~ msgstr "yüklenmiş" - -#~ msgid "Filament #" -#~ msgstr "Filament #" - #~ msgid "Print sequence of inner wall and outer wall. " #~ msgstr "İç duvar ve dış duvarın yazdırma sırası." diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 06014bc408..98174279eb 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: 2023-08-10 20:25-0400\n" "Last-Translator: \n" "Language-Team: \n" @@ -221,6 +221,9 @@ msgstr "мм" msgid "Position" msgstr "Позиція" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "Обертання" @@ -260,6 +263,7 @@ msgstr "Світові координати" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "Розмір" @@ -269,6 +273,113 @@ msgstr "%" msgid "uniform scale" msgstr "єдина шкала" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "Авто" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "Підключи" + +msgid "Dowel" +msgstr "Дюбель" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "Усічений" + +msgid "Square" +msgstr "Квадрат" + +msgid "Hexagon" +msgstr "Шестикутник" + +msgid "Keep orientation" +msgstr "" + +msgid "Place on cut" +msgstr "Помістити на зріз" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "З'єднувачі" + +msgid "Type" +msgstr "Тип" + +msgid "Style" +msgstr "Стиль" + +msgid "Shape" +msgstr "Форма" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "Ширина" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "Частина" + +msgid "Object" +msgstr "Об'єкт" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "Допуск" + +msgid "Drag" +msgstr "Перетягніть" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "Клацніть лівою кнопкою миші" @@ -281,9 +392,6 @@ msgstr "Клацніть правою кнопкою миші" msgid "Remove connector" msgstr "Видалити з’єднання" -msgid "Drag" -msgstr "Перетягніть" - msgid "Move connector" msgstr "Перемістити з'єднувач" @@ -299,23 +407,51 @@ msgstr "Виберіть усі з'єднувачі" msgid "Cut" msgstr "Вирізати" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "Відновлення об'єкта моделі" +msgid "Remove connectors" +msgstr "Видалити з’єднання" -msgid "Connector" -msgstr "З'єднувач" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "Рух:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "Рух" +msgid "Space" +msgstr "Пробіл" -msgid "Height" -msgstr "Зростання" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "Підтвердити з'єднувачі" + +msgid "Cancel" +msgstr "Скасувати" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "Скинути" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "Редагувати з'єднувачі" @@ -323,6 +459,12 @@ msgstr "Редагувати з'єднувачі" msgid "Add connectors" msgstr "Додати з'єднувачі" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "Верхня частина" @@ -332,9 +474,6 @@ msgstr "Нижня частина" msgid "Keep" msgstr "Тримати" -msgid "Place on cut" -msgstr "Помістити на зріз" - msgid "Flip" msgstr "Переверніть" @@ -344,86 +483,58 @@ msgstr "Після вирізування" msgid "Cut to parts" msgstr "Розрізати на частини" -msgid "Auto Segment" -msgstr "Автосегмент" - msgid "Perform cut" msgstr "Виконати вирізання" -msgid "Reset" -msgstr "Скинути" - -msgid "Connectors" -msgstr "З'єднувачі" - -msgid "Type" -msgstr "Тип" - -msgid "Style" -msgstr "Стиль" - -msgid "Shape" -msgstr "Форма" - -msgid "Depth ratio" -msgstr "Коефіцієнт глибини" - -msgid "Remove connectors" -msgstr "Видалити з’єднання" - -msgid "Prizm" -msgstr "Призма" - -msgid "Frustum" -msgstr "Усічений" - -msgid "Square" -msgstr "Квадрат" - -msgid "Hexagon" -msgstr "Шестикутник" - -msgid "Confirm connectors" -msgstr "Підтвердити з'єднувачі" - -msgid "Cancel" -msgstr "Скасувати" - msgid "Warning" msgstr "Попередження" msgid "Invalid connectors detected" msgstr "Виявлено неприпустимі з'єднувачі" -msgid "connector is out of cut contour" -msgstr "роз'єм виходить за контур вирізу" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -msgid "connectors are out of cut contour" -msgstr "роз'єми виходять за контур вирізу" - -msgid "connector is out of object" -msgstr "роз'єм поза об'єктом" - -msgid "connectors is out of object" -msgstr "з’єднання відсутні в об'єкті" +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" msgid "Some connectors are overlapped" msgstr "Деякі роз'єми перекриваються" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"Неприпустимий стан. Жодна деталь не вибрана для збереження після вирізання" -msgid "Plug" -msgstr "Підключи" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "Дюбель" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "Допуск" +msgid "Connector" +msgstr "З'єднувач" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "Відновлення об'єкта моделі" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Назва сітки" @@ -519,6 +630,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "Шрифт" @@ -554,6 +667,655 @@ msgstr "Повернути текст" msgid "Text shape" msgstr "Форма тексту" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "Додатково" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "Модифікатор" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "ОК" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "Завантаження" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Зростання" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Дзеркально" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "Видалити" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "Ні" + +msgid "Diameter" +msgstr "Діаметр" + +msgid "Length" +msgstr "Довжина" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "Копіювати в буфер обміну" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -732,9 +1494,6 @@ msgstr "" msgid "Sync user presets" msgstr "" -msgid "Loading" -msgstr "Завантаження" - msgid "Loading user preset" msgstr "Завантаження користувацького пресета" @@ -765,9 +1524,6 @@ msgstr "Виберіть файл G-коду:" msgid "Import File" msgstr "Імпортувати файл" -msgid "Delete" -msgstr "Видалити" - msgid "Choose files" msgstr "Вибрати файли" @@ -838,9 +1594,6 @@ msgstr "Параметри очищення" msgid "Bed adhension" msgstr "Прилягання до столу" -msgid "Advanced" -msgstr "Додатково" - msgid "Add part" msgstr "Додати частину" @@ -892,6 +1645,21 @@ msgstr "Видалити вибраний об'єкт" msgid "Load..." msgstr "Завантажити..." +msgid "Cube" +msgstr "Куб" + +msgid "Cylinder" +msgstr "Циліндр" + +msgid "Cone" +msgstr "Конус" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "Orca Куб" @@ -904,19 +1672,10 @@ msgstr "Autodesk FDM Test" msgid "Voron Cube" msgstr "Voron Куб" -msgid "Cube" -msgstr "Куб" - -msgid "Cylinder" -msgstr "Циліндр" - -msgid "Cone" -msgstr "Конус" - -msgid "Text" +msgid "Stanford Bunny" msgstr "" -msgid "SVG" +msgid "Text" msgstr "" msgid "Height range Modifier" @@ -1046,9 +1805,6 @@ msgstr "По осі Z" msgid "Mirror along the Z axis" msgstr "Відобразити осі Z" -msgid "Mirror" -msgstr "Дзеркально" - msgid "Mirror object" msgstr "Дзеркальний об'єкт" @@ -1070,6 +1826,9 @@ msgstr "Недійсна інформація про вирізування" msgid "Add Primitive" msgstr "Додати примітив" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "Показати ярлики" @@ -1322,12 +2081,6 @@ msgstr "Діапазони висоти" msgid "Settings for height range" msgstr "Налаштування діапазону зростання" -msgid "Object" -msgstr "Об'єкт" - -msgid "Part" -msgstr "Частина" - msgid "Layer" msgstr "Шар" @@ -1352,9 +2105,6 @@ msgstr "Тип останньої твердотільної частини об msgid "Negative Part" msgstr "Негативна частина" -msgid "Modifier" -msgstr "Модифікатор" - msgid "Support Blocker" msgstr "Блокувальник підтримки" @@ -1432,9 +2182,6 @@ msgstr "Щільність заповнення (%)" msgid "Auto Brim" msgstr "Автоматична Кайма" -msgid "Auto" -msgstr "Авто" - msgid "Mouse ear" msgstr "" @@ -1510,9 +2257,6 @@ msgstr "G-код користувача" msgid "Enter Custom G-code used on current layer:" msgstr "Введіть G-код користувача, що використовується в поточному шарі:" -msgid "OK" -msgstr "ОК" - msgid "Jump to Layer" msgstr "Перейти до шару" @@ -1567,15 +2311,15 @@ msgstr "Немає принтера" msgid "..." msgstr "..." -msgid "Failed to connect to the server" -msgstr "Не вдалося підключитися до сервера" - msgid "Check the status of current system services" msgstr "" msgid "code" msgstr "" +msgid "Failed to connect to the server" +msgstr "Не вдалося підключитися до сервера" + msgid "Failed to connect to cloud service" msgstr "" @@ -2417,9 +3161,6 @@ msgstr "" msgid "Origin" msgstr "Джерело" -msgid "Diameter" -msgstr "Діаметр" - msgid "Size in X and Y of the rectangular plate." msgstr "Розмір по осях X та Y прямокутного столу." @@ -2590,6 +3331,18 @@ msgstr "" "Так – змінити ці налаштування та автоматично включити режим спіралі\n" "Ні - цього разу відмовитися від використання режиму спіралі" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2959,6 +3712,9 @@ msgstr "Час" msgid "Percent" msgstr "Відсоток" +msgid "Used filament" +msgstr "Філамент, що використовується" + msgid "Layer Height (mm)" msgstr "Висота шару (мм)" @@ -2977,9 +3733,6 @@ msgstr "Температура (°С)" msgid "Volumetric flow rate (mm³/s)" msgstr "Об'ємна витрата (мм³/с)" -msgid "Used filament" -msgstr "Філамент, що використовується" - msgid "Travel" msgstr "Переміщення" @@ -5164,6 +5917,9 @@ msgstr "Регіон входу" msgid "Stealth Mode" msgstr "" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "Метрика" @@ -6025,6 +6781,11 @@ msgstr "" "0 відстань між вершинами z, 0 відстань між підтримкою, концентричний малюнок " "та відключення висота незалежного опорного шару" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6667,15 +7428,18 @@ msgstr "" msgid "Ramming line spacing" msgstr "" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "Автокалькулятор" + +msgid "Re-calculate" msgstr "" msgid "Flushing volumes for filament change" msgstr "Обсяги промивання для зміни Філаменту" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6692,6 +7456,15 @@ msgstr "Множина повинна знаходитися в діапазон msgid "Multiplier" msgstr "Множина" +msgid "unloaded" +msgstr "вивантажено" + +msgid "loaded" +msgstr "завантажено" + +msgid "Filament #" +msgstr "Філамент #" + msgid "From" msgstr "Від" @@ -6728,9 +7501,6 @@ msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" msgstr "Ctrl+Shift+G" -msgid "Copy to clipboard" -msgstr "Копіювати в буфер обміну" - msgid "Paste from clipboard" msgstr "Вставити з буфера обміну" @@ -6842,9 +7612,6 @@ msgstr "Shift+будь-яка стрілка" msgid "Movement step set to 1 mm" msgstr "Крок переміщення встановлено на 1 мм" -msgid "Esc" -msgstr "Esc" - msgid "keyboard 1-9: set filament for object/part" msgstr "клавіатура 1-9: встановити філамент для об'єкта/деталі" @@ -6893,7 +7660,7 @@ msgstr "Точки підтримки Gizmo SL" msgid "Gizmo FDM paint-on seam" msgstr "Швид, що фарбується Gizmo FDM" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "Переключення між Підготовка/Попередній перегляд" msgid "Plater" @@ -6929,9 +7696,6 @@ msgstr "Встановіть номер екструдера для об'єкт msgid "Delete objects, parts, modifiers " msgstr "Видалення об'єктів, частин, модифікаторів " -msgid "Space" -msgstr "Пробіл" - msgid "Select the object/part and press space to change the name" msgstr "Виберіть об'єкт/деталь і натисніть пробіл, щоб змінити назву" @@ -7618,17 +8382,17 @@ msgid "Hostname, IP or URL" msgstr "Ім'я хоста, IP або URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r може завантажувати файли G-коду на хост принтера. Це поле повинно " -"містити ім'я хоста, IP-адресу або URL-адресу екземпляра вузла принтера. " -"Вузол друку за HAProxy з увімкненою базовою авторизацією можна отримати " -"доступ, ввівши користувача ім'я та пароль в URL у наступному форматі: " -"https://username:\n" +"Orca Slicer може завантажувати файли G-коду на хост принтера. Це поле " +"повинно містити ім'я хоста, IP-адресу або URL-адресу екземпляра вузла " +"принтера. Вузол друку за HAProxy з увімкненою базовою авторизацією можна " +"отримати доступ, ввівши користувача ім'я та пароль в URL у наступному " +"форматі: https://username:\n" "password@your-octopi-address/" msgid "Device UI" @@ -7644,11 +8408,11 @@ msgid "API Key / Password" msgstr "Ключ API / Пароль" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r може завантажувати файли G-коду на хост принтера. Це поле повинно " -"утримувати \n" +"Orca Slicer може завантажувати файли G-коду на хост принтера. Це поле " +"повинно утримувати \n" "API-ключ або пароль, необхідний для автентифікації." msgid "Name of the printer" @@ -8633,13 +9397,13 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "Після заміни інструменту точне положення новонавантаженої нитки " "напруженнявсередині сопла може бути невідомо, і тиск нитки розжарення, " "ймовірно, ще неє стабільним. Перед продуванням друкувальної головки в " -"наповнювач або об'єкт Slic3r, що витрачається, завжди буде дозувати цю " +"наповнювач або об'єкт Orca Slicer, що витрачається, завжди буде дозувати цю " "кількість матеріалу в вежу для протирання, щоб забезпечити надійне " "послідовне заповненняабо видавлювання об'єкта, що витрачається." @@ -8805,17 +9569,18 @@ msgstr "Довжина прив'язки заповнення" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" "З'єднайте лінію заповнення з внутрішнім периметром із коротким " "сегментомдодаткового периметра. Якщо воно виражено у відсотках (наприклад, " -"15%), воно розраховується за шириною екструзії заповнення. Slic3r " +"15%), воно розраховується за шириною екструзії заповнення. Orca Slicer " "намагається з'єднати Дві близькі лінії заповнення з коротким сегментом " "периметра. Якщо такий сегмент периметра коротше infill_anchor_max не " "знайдено, лінія заповнення з'єднується з сегментом периметра лише з одного " @@ -8836,17 +9601,18 @@ msgstr "Максимальна довжина прив'язки, що запов msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" "З'єднайте лінію заповнення з внутрішнім периметром із коротким " "сегментомдодаткового периметра. Якщо воно виражено у відсотках (наприклад, " -"15%), воно розраховується за шириною екструзії заповнення. Slic3r " +"15%), воно розраховується за шириною екструзії заповнення. Orca Slicer " "намагається з'єднати Дві близькі лінії заповнення з коротким сегментом " "периметра. Якщо такий сегмент периметра коротший за цей параметр не " "знайдено, лінія заповнення з'єднується з сегментом периметра лише з одного " @@ -9032,9 +9798,6 @@ msgstr "" "Випадкове тремтіння під час друку зовнішнього периметра, так що поверхня " "була шорсткої. Цей параметр керує нечіткою оболонкою" -msgid "None" -msgstr "Ні" - msgid "Contour" msgstr "Контур" @@ -9415,6 +10178,17 @@ msgstr "" "Чи підтримує машина безшумний режим, у якому машина використовує " "меншеприскорення для друку" +msgid "Emit limits to G-code" +msgstr "" + +msgid "Machine limits" +msgstr "Обмеження машини" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9437,9 +10211,6 @@ msgstr "Максимальна швидкість Z" msgid "Maximum speed E" msgstr "Максимальна швидкість E" -msgid "Machine limits" -msgstr "Обмеження машини" - msgid "Maximum X speed" msgstr "Максимальна швидкість X" @@ -9645,11 +10416,11 @@ msgid "Host Type" msgstr "Тип хоста" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "" -"Slic3r може завантажувати файли G-коду на хост принтера. Це поле повинно " -"утримувати тип хоста." +"Orca Slicer може завантажувати файли G-коду на хост принтера. Це поле " +"повинно утримувати тип хоста." msgid "Nozzle volume" msgstr "Об'єм сопла" @@ -9772,18 +10543,32 @@ msgstr "Швидкість внутрішнього периметра" msgid "Number of walls of every layer" msgstr "Кількість периметрів кожного шару" +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" "Якщо ви хочете обробити вихідний G-код через користувацькі сценарії,Просто " "перерахуйте їх абсолютні шляхи тут. Розділіть кілька сценаріївточкою з " "комою. Сценаріям передається абсолютний шлях до файлу G-коду в як перший " -"аргумент, і вони можуть отримати доступ до налаштувань Slic3r конфігурації " -"шляхом читання змінних середовища." +"аргумент, і вони можуть отримати доступ до налаштувань Orca Slicer " +"конфігурації шляхом читання змінних середовища." msgid "Printer notes" msgstr "" @@ -9856,9 +10641,6 @@ msgstr "Ретракт при зміні шару" msgid "Force a retraction when changes layer" msgstr "Примусовий відкат при зміні шару" -msgid "Length" -msgstr "Довжина" - msgid "Retraction Length" msgstr "Довжина відкату" @@ -10062,6 +10844,21 @@ msgstr "" "Щоб звести до мінімуму видимість шва при екструзії із замкнутим контуром," "Невеликий рух усередину виконується до виходу екструдера з контуру." +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "Швидкість очищення" @@ -10770,9 +11567,6 @@ msgstr "Основний обсяг" msgid "The volume of material to prime extruder on tower." msgstr "Обсяг матеріалу для первинного екструдера на башті." -msgid "Width" -msgstr "Ширина" - msgid "Width of prime tower" msgstr "Ширина основної вежі" @@ -10921,13 +11715,9 @@ msgstr "Використовуйте відносні відстані E екс msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" -"При використанні опції «label_objects» рекомендується відносне Видавлювання. " -"Деякі екструдери працюють краще з цією опцією без перевірки(абсолютний режим " -"екструзії). Обтиральна вежа сумісна лише з відносним режимом. Вона завжди " -"включена на принтерах BambuLab. за замовчуванням встановлено прапорець" msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -12082,9 +12872,6 @@ msgstr "" msgid "Create Based on Current Printer" msgstr "" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "" @@ -12257,10 +13044,10 @@ msgstr "" msgid "Export Configs" msgstr "" -msgid "Printer config bundle(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" msgstr "" -msgid "Filament bundle(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" @@ -12299,7 +13086,7 @@ msgid "" msgstr "" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" @@ -12626,6 +13413,19 @@ msgid "" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -12633,6 +13433,13 @@ msgid "" "3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -12897,6 +13704,51 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "" +#~ "Relative extrusion is recommended when using \"label_objects\" option." +#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "mode). Wipe tower is only compatible with relative mode. It is always " +#~ "enabled on BambuLab printers. Default is checked" +#~ msgstr "" +#~ "При використанні опції «label_objects» рекомендується відносне " +#~ "Видавлювання. Деякі екструдери працюють краще з цією опцією без " +#~ "перевірки(абсолютний режим екструзії). Обтиральна вежа сумісна лише з " +#~ "відносним режимом. Вона завжди включена на принтерах BambuLab. за " +#~ "замовчуванням встановлено прапорець" + +#~ msgid "Movement:" +#~ msgstr "Рух:" + +#~ msgid "Movement" +#~ msgstr "Рух" + +#~ msgid "Auto Segment" +#~ msgstr "Автосегмент" + +#~ msgid "Depth ratio" +#~ msgstr "Коефіцієнт глибини" + +#~ msgid "Prizm" +#~ msgstr "Призма" + +#~ msgid "connector is out of cut contour" +#~ msgstr "роз'єм виходить за контур вирізу" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "роз'єми виходять за контур вирізу" + +#~ msgid "connector is out of object" +#~ msgstr "роз'єм поза об'єктом" + +#~ msgid "connectors is out of object" +#~ msgstr "з’єднання відсутні в об'єкті" + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "Неприпустимий стан. Жодна деталь не вибрана для збереження після вирізання" + #~ msgid "Edit Text" #~ msgstr "Редагувати текст" @@ -12930,18 +13782,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "Швидкий" -#~ msgid "Auto-Calc" -#~ msgstr "Автокалькулятор" - -#~ msgid "unloaded" -#~ msgstr "вивантажено" - -#~ msgid "loaded" -#~ msgstr "завантажено" - -#~ msgid "Filament #" -#~ msgstr "Філамент #" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index f85e391d1f..bd0b0f3266 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: 2023-04-01 13:21+0800\n" "Last-Translator: SoftFever \n" "Language-Team: \n" @@ -218,6 +218,9 @@ msgstr "mm" msgid "Position" msgstr "位置" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "旋转" @@ -257,6 +260,7 @@ msgstr "世界坐标" msgid "°" msgstr "°" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "大小" @@ -266,6 +270,113 @@ msgstr "%" msgid "uniform scale" msgstr "等比例缩放" +msgid "Planar" +msgstr "平面" + +msgid "Dovetail" +msgstr "燕尾榫" + +msgid "Auto" +msgstr "自动" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "插销" + +msgid "Dowel" +msgstr "销钉" + +msgid "Snap" +msgstr "按扣" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "锥体" + +msgid "Square" +msgstr "正方形" + +msgid "Hexagon" +msgstr "六边形" + +msgid "Keep orientation" +msgstr "保持方向" + +msgid "Place on cut" +msgstr "切割面放置到热床" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "连接件" + +msgid "Type" +msgstr "类型" + +msgid "Style" +msgstr "样式" + +msgid "Shape" +msgstr "形状" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "深度" + +msgid "Groove" +msgstr "凹槽" + +msgid "Width" +msgstr "宽度" + +msgid "Flap Angle" +msgstr "翼偏角" + +msgid "Groove Angle" +msgstr "凹槽角" + +msgid "Part" +msgstr "零件" + +msgid "Object" +msgstr "对象" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "模式" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "容差" + +msgid "Drag" +msgstr "拖拽" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "左击" @@ -278,9 +389,6 @@ msgstr "右击" msgid "Remove connector" msgstr "删除连接件" -msgid "Drag" -msgstr "拖拽" - msgid "Move connector" msgstr "移动连接件" @@ -296,23 +404,51 @@ msgstr "选择所有连接件" msgid "Cut" msgstr "剪切" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "修复模型对象" +msgid "Remove connectors" +msgstr "删除所有连接件" -msgid "Connector" -msgstr "连接件" +msgid "Bulge" +msgstr "凸度" -msgid "Movement:" -msgstr "移动:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "移动" +msgid "Space" +msgstr "空格键" -msgid "Height" -msgstr "高度" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "确认" + +msgid "Cancel" +msgstr "取消" + +msgid "Build Volume" +msgstr "零件体积" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "重置" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "切割位置" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "编辑连接件" @@ -320,6 +456,12 @@ msgstr "编辑连接件" msgid "Add connectors" msgstr "添加连接件" +msgid "Reset cut" +msgstr "重置" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "上半部分" @@ -329,9 +471,6 @@ msgstr "下半部分" msgid "Keep" msgstr "保持" -msgid "Place on cut" -msgstr "切割面放置到热床" - msgid "Flip" msgstr "翻转" @@ -341,87 +480,54 @@ msgstr "切割后" msgid "Cut to parts" msgstr "切割为零件" -msgid "Auto Segment" -msgstr "自动分割" - msgid "Perform cut" msgstr "执行切割" -msgid "Reset" -msgstr "重置" - -msgid "Connectors" -msgstr "连接件" - -msgid "Type" -msgstr "类型" - -msgid "Style" -msgstr "样式" - -msgid "Shape" -msgstr "形状" - -msgid "Depth ratio" -msgstr "深度" - -msgid "Remove connectors" -msgstr "删除所有连接件" - -msgid "Prizm" -msgstr "棱柱" - -msgid "Frustum" -msgstr "锥体" - -msgid "Square" -msgstr "正方形" - -msgid "Hexagon" -msgstr "六边形" - -msgid "Confirm connectors" -msgstr "确认" - -msgid "Cancel" -msgstr "取消" - msgid "Warning" msgstr "警告" msgid "Invalid connectors detected" msgstr "检测到无效连接件" -msgid "connector is out of cut contour" -msgstr "个连接件超出了切割面范围" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" -msgid "connectors are out of cut contour" -msgstr "个连接件超出了切割面范围" - -msgid "connector is out of object" -msgstr "个连接件穿透了模型" - -msgid "connectors is out of object" -msgstr "个连接件穿透了模型" +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" msgid "Some connectors are overlapped" msgstr "存在连接件相互重叠" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"无效状态。\n" -"切割后没有选中要保留的部分" -msgid "Plug" -msgstr "插销" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "销钉" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "容差" +msgid "Connector" +msgstr "连接件" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "因切割产生了非流形边,您是否想现在修复?" + +msgid "Repairing model object" +msgstr "修复模型对象" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Mesh名" @@ -515,6 +621,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "字体" @@ -550,6 +658,655 @@ msgstr "旋转文字" msgid "Text shape" msgstr "文本形状" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "浮雕" + +msgid "Text-Rotate" +msgstr "旋转文字" + +msgid "NORMAL" +msgstr "常规" + +msgid "SMALL" +msgstr "小" + +msgid "ITALIC" +msgstr "斜体" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "高级" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "操作" + +msgid "Join" +msgstr "合并" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "切割" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "修改器" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "确认" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "文字面向摄像头" + +msgid "Orient the text towards the camera." +msgstr "选择文字使其面向摄像头" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "载入中" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "高度" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "使用表面" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "按字符" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "对齐" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "字间距" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "行间距" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "粗细" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "斜率" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "距表面" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "保持向上" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "镜像" + +msgid "Choose SVG file for emboss:" +msgstr "选择SVG文件进行浮雕操作:" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "文件不存在 (%1%)。" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "文件名必须以“.svg”结尾,但您选择的是%1%" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "Nano SVG解析器无法从文件中加载 (%1%)。" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "SVG文件不包含路径以进行浮雕操作 (%1%)。" + +msgid "Vertex" +msgstr "顶点" + +msgid "Edge" +msgstr "边" + +msgid "Plane" +msgstr "平面" + +msgid "Point on edge" +msgstr "边上的点" + +msgid "Point on circle" +msgstr "圆上的点" + +msgid "Point on plane" +msgstr "平面上的点" + +msgid "Center of edge" +msgstr "边的中心" + +msgid "Center of circle" +msgstr "圆心" + +msgid "ShiftLeft mouse button" +msgstr "Shift + 鼠标左键" + +msgid "Select feature" +msgstr "选择特征" + +msgid "Select point" +msgstr "选择点" + +msgid "Delete" +msgstr "删除" + +msgid "Restart selection" +msgstr "重新选择" + +msgid "Esc" +msgstr "" + +msgid "Unselect" +msgstr "取消选择" + +msgid "Measure" +msgstr "测量" + +msgid "Edit to scale" +msgstr "编辑比例" + +msgctxt "Verb" +msgid "Scale" +msgstr "比例" + +msgid "None" +msgstr "无" + +msgid "Diameter" +msgstr "直径" + +msgid "Length" +msgstr "长度" + +msgid "Selection" +msgstr "选中" + +msgid "Copy to clipboard" +msgstr "复制到剪贴板" + +msgid "Perpendicular distance" +msgstr "垂直距离" + +msgid "Distance" +msgstr "距离" + +msgid "Direct distance" +msgstr "直线距离" + +msgid "Distance XYZ" +msgstr "距离 XYZ" + msgid "Ctrl+" msgstr "" @@ -716,13 +1473,10 @@ msgstr "隐私协议更新" msgid "" "The number of user presets cached in the cloud has exceeded the upper limit, " "newly created user presets can only be used locally." -msgstr "" +msgstr "云端缓存的用户预设数量已超过上限,新创建的用户预设只能在本地使用。" msgid "Sync user presets" -msgstr "" - -msgid "Loading" -msgstr "载入中" +msgstr "同步用户预设" msgid "Loading user preset" msgstr "正在加载用户预设" @@ -754,9 +1508,6 @@ msgstr "选择一个G-code文件:" msgid "Import File" msgstr "导入文件" -msgid "Delete" -msgstr "删除" - msgid "Choose files" msgstr "选择文件" @@ -827,9 +1578,6 @@ msgstr "擦除选项" msgid "Bed adhension" msgstr "热床粘接" -msgid "Advanced" -msgstr "高级" - msgid "Add part" msgstr "添加部件" @@ -881,6 +1629,21 @@ msgstr "删除所选对象" msgid "Load..." msgstr "加载..." +msgid "Cube" +msgstr "立方体" + +msgid "Cylinder" +msgstr "圆柱体" + +msgid "Cone" +msgstr "锥体" + +msgid "Disc" +msgstr "圆盘" + +msgid "Torus" +msgstr "环面" + msgid "Orca Cube" msgstr "Orca逆方块" @@ -893,21 +1656,12 @@ msgstr "欧特克FDM测试" msgid "Voron Cube" msgstr "Voron方块" -msgid "Cube" -msgstr "立方体" - -msgid "Cylinder" -msgstr "圆柱体" - -msgid "Cone" -msgstr "锥体" +msgid "Stanford Bunny" +msgstr "斯坦福兔子" msgid "Text" msgstr "" -msgid "SVG" -msgstr "" - msgid "Height range Modifier" msgstr "高度范围修改器" @@ -936,10 +1690,10 @@ msgid "Fix model" msgstr "修复模型" msgid "Export as one STL" -msgstr "" +msgstr "导出为一个STL" msgid "Export as STLs" -msgstr "" +msgstr "导出为多个STL" msgid "Reload from disk" msgstr "从磁盘重新加载" @@ -1035,9 +1789,6 @@ msgstr "沿 Z 轴" msgid "Mirror along the Z axis" msgstr "沿Z轴镜像" -msgid "Mirror" -msgstr "镜像" - msgid "Mirror object" msgstr "镜像对象" @@ -1059,6 +1810,9 @@ msgstr "解除切割关系" msgid "Add Primitive" msgstr "添加标准模型" +msgid "Add Handy models" +msgstr "添加实用模型" + msgid "Show Labels" msgstr "显示标签" @@ -1293,12 +2047,6 @@ msgstr "高度范围" msgid "Settings for height range" msgstr "高度范围设置" -msgid "Object" -msgstr "对象" - -msgid "Part" -msgstr "零件" - msgid "Layer" msgstr "层" @@ -1320,9 +2068,6 @@ msgstr "不允许修改对象中最后一个实体零件的类型。" msgid "Negative Part" msgstr "负零件" -msgid "Modifier" -msgstr "修改器" - msgid "Support Blocker" msgstr "支撑去除器" @@ -1394,9 +2139,6 @@ msgstr "填充密度(%)" msgid "Auto Brim" msgstr "自动Brim" -msgid "Auto" -msgstr "自动" - msgid "Mouse ear" msgstr "圆盘" @@ -1452,7 +2194,7 @@ msgid "Pause" msgstr "暂停" msgid "Template" -msgstr "" +msgstr "模板" msgid "Custom" msgstr "自定义" @@ -1472,9 +2214,6 @@ msgstr "自定义 G-code" msgid "Enter Custom G-code used on current layer:" msgstr "输入当前层上使用的自定义G-code:" -msgid "OK" -msgstr "确认" - msgid "Jump to Layer" msgstr "跳转到层" @@ -1529,15 +2268,15 @@ msgstr "无打印机" msgid "..." msgstr "" -msgid "Failed to connect to the server" -msgstr "无法连接服务器" - msgid "Check the status of current system services" msgstr "请检查当前系统服务状态" msgid "code" msgstr "" +msgid "Failed to connect to the server" +msgstr "无法连接服务器" + msgid "Failed to connect to cloud service" msgstr "无法连接到云服务" @@ -1710,7 +2449,7 @@ msgid "Orienting canceled." msgstr "" msgid "Filling" -msgstr "" +msgstr "正在填充" msgid "Bed filling canceled." msgstr "填充热床已取消。" @@ -1786,7 +2525,7 @@ msgid "Sending print job through cloud service" msgstr "正在通过云端服务发送打印任务" msgid "Print task sending times out." -msgstr "" +msgstr "发送打印任务超时。" msgid "Service Unavailable" msgstr "服务不可用" @@ -1976,10 +2715,10 @@ msgid "You need to select the material type and color first." msgstr "您需要先选择材料类型和颜色。" msgid "Please input a valid value (K in 0~0.3)" -msgstr "" +msgstr "请输入有效的数值 (K的范围为0~0.3)" msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" -msgstr "" +msgstr "请输入有效的数值 (K的范围为0~0.3,N的范围为0.6~2.0)" msgid "Other Color" msgstr "其他颜色" @@ -2145,7 +2884,7 @@ msgstr "打印机当前不支持自动补给耗材。" msgid "" "AMS filament backup is not enabled, please enable it in the AMS settings." -msgstr "" +msgstr "AMS耗材备份未启用,请在AMS设置中启用。" msgid "" "If there are two identical filaments in AMS, AMS filament backup will be " @@ -2153,6 +2892,8 @@ msgid "" "(Currently supporting automatic supply of consumables with the same brand, " "material type, and color)" msgstr "" +"如果AMS中有两卷相同的耗材,则自动补给启用。\n" +"(目前支持品牌、材料种类、颜色相同的耗材的自动补给)" msgid "AMS Settings" msgstr "AMS 设置" @@ -2312,9 +3053,6 @@ msgstr "计划上传到 `%1%`。请参阅窗口-> 打印主机上传队列" msgid "Origin" msgstr "原点" -msgid "Diameter" -msgstr "直径" - msgid "Size in X and Y of the rectangular plate." msgstr "矩形框在X和Y方向的尺寸。" @@ -2405,6 +3143,8 @@ msgid "" "it may result in material softening and clogging.The maximum safe " "temperature for the material is %d" msgstr "" +"当前腔体温度高于材料的安全温度,这可能导致材料软化和堵塞。该材料的最高安全温" +"度为 %d。" msgid "" "Too small layer height.\n" @@ -2470,6 +3210,18 @@ msgstr "" "是 - 自动调整这些设置并开启旋转模式\n" "否 - 暂不使用旋转模式" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2600,19 +3352,19 @@ msgid "Paused by the Gcode inserted by user" msgstr "暂停,由于用户插入的Gcode" msgid "Motor noise showoff" -msgstr "" +msgstr "电机噪音标定结果展示" msgid "Nozzle filament covered detected pause" -msgstr "" +msgstr "裹头暂停" msgid "Cutter error pause" -msgstr "" +msgstr "切刀异常暂停" msgid "First layer error pause" -msgstr "" +msgstr "首层扫描异常暂停" msgid "Nozzle clog pause" -msgstr "" +msgstr "堵头暂停" msgid "MC" msgstr "" @@ -2678,7 +3430,7 @@ msgstr "发起打印任务失败" msgid "" "This calibration does not support the currently selected nozzle diameter" -msgstr "" +msgstr "该标定不支持当前选中喷嘴直径" msgid "Current flowrate cali param is invalid" msgstr "当前流量校准参数无效" @@ -2812,7 +3564,7 @@ msgid "Total" msgstr "总计" msgid "Tower" -msgstr "" +msgstr "擦料塔" msgid "Total Estimation" msgstr "总预估" @@ -2841,6 +3593,9 @@ msgstr "时间" msgid "Percent" msgstr "百分比" +msgid "Used filament" +msgstr "使用的耗材丝" + msgid "Layer Height (mm)" msgstr "层高(mm)" @@ -2859,9 +3614,6 @@ msgstr "温度(℃)" msgid "Volumetric flow rate (mm³/s)" msgstr "体积流量速度(mm³/s)" -msgid "Used filament" -msgstr "使用的耗材丝" - msgid "Travel" msgstr "空驶" @@ -3366,10 +4118,10 @@ msgid "Import" msgstr "导入" msgid "Export all objects as one STL" -msgstr "" +msgstr "导出所有对象为一个STL" msgid "Export all objects as STLs" -msgstr "" +msgstr "导出所有对象为多个STL" msgid "Export Generic 3MF" msgstr "导出通用 3MF" @@ -3836,16 +4588,16 @@ msgid "Downloading %d%%..." msgstr "下载中 %d%%..." msgid "Connection lost. Please retry." -msgstr "" +msgstr "连接丢失。请重试。" msgid "The device cannot handle more conversations. Please retry later." -msgstr "" +msgstr "设备无法处理更多的对话。请稍后重试。" msgid "File not exists." -msgstr "" +msgstr "文件不存在" msgid "File checksum error. Please retry." -msgstr "" +msgstr "文件校验和错误。请重试。" msgid "Not supported on the current printer version." msgstr "当前打印机的版本不支持。" @@ -3855,7 +4607,7 @@ msgstr "存储不可用,请插入SD卡。" #, c-format, boost-format msgid "Error code: %d" -msgstr "" +msgstr "错误码:%d" msgid "Speed:" msgstr "速度:" @@ -3917,7 +4669,7 @@ msgstr "清除" msgid "" "You have completed printing the mall model, \n" "but the synchronization of rating information has failed." -msgstr "" +msgstr "您已经完成了商城模型的打印,但是评分信息的同步失败了。" msgid "How do you like this printing file?" msgstr "你觉得这个打印文件怎么样?" @@ -3928,7 +4680,7 @@ msgid "" msgstr "(该模型已进行评分。您的评分将覆盖之前的评分。)" msgid "Rate" -msgstr "" +msgstr "评分" msgid "Camera" msgstr "摄像机" @@ -3999,7 +4751,7 @@ msgstr "层: %d/%d" msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." -msgstr "" +msgstr "请在进料或退料前把喷嘴升温到170℃以上。" msgid "Still unload" msgstr "继续退料" @@ -4113,11 +4865,14 @@ msgid "" "\n" "Would you like to redirect to the webpage for rating?" msgstr "" +"\n" +"\n" +"您是否想要重定向到评分网页?" msgid "" "Some of your images failed to upload. Would you like to redirect to the " "webpage for rating?" -msgstr "" +msgstr "您的一些图像上传失败。您是否想要重定向到评分网页?" msgid "You can select up to 16 images." msgstr "您最多可以选择16张图像。" @@ -4193,7 +4948,7 @@ msgid "Details" msgstr "详情" msgid "New printer config available." -msgstr "" +msgstr "有新的打印机配置可用。" msgid "Wiki" msgstr "Wiki" @@ -4232,13 +4987,13 @@ msgid_plural "%1$d objects were loaded as parts of cut object" msgstr[0] "%1$d对象加载为一个切割对象的子部件" msgid "ERROR" -msgstr "" +msgstr "错误" msgid "CANCELED" -msgstr "" +msgstr "已取消" msgid "COMPLETED" -msgstr "" +msgstr "已完成" msgid "Cancel upload" msgstr "取消上传" @@ -4343,7 +5098,7 @@ msgid "Allow Prompt Sound" msgstr "允许提示音" msgid "Filament Tangle Detect" -msgstr "" +msgstr "缠料检测" msgid "Global" msgstr "全局" @@ -4440,7 +5195,7 @@ msgid "Set filaments to use" msgstr "配置可选择的材料" msgid "Search plate, object and part." -msgstr "" +msgstr "搜索盘、模型和零件。" msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." @@ -4501,6 +5256,8 @@ msgid "" "clogged when printing this filament in a closed enclosure. Please open the " "front door and/or remove the upper glass." msgstr "" +"当前热床温度相对较高。在封闭式外壳中打印这种丝可能会导致喷嘴堵塞。请打开前门" +"和/或取下上部玻璃。" msgid "" "The nozzle hardness required by the filament is higher than the default " @@ -4544,26 +5301,26 @@ msgid "Please correct them in the param tabs" msgstr "请在参数页更正它们" msgid "The 3mf has following modified G-codes in filament or printer presets:" -msgstr "" +msgstr "该3mf文件中的材料或者打印机预设包含以下修改过的G-codes:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" -msgstr "" +msgstr "请确认这些修改过的G-codes是否安全,以防止对机器造成任何损坏!" msgid "Modified G-codes" -msgstr "" +msgstr "修改过的G-codes" msgid "The 3mf has following customized filament or printer presets:" -msgstr "" +msgstr "该3MF文件包含以下自定义的材料或打印机预设:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" -msgstr "" +msgstr "请确认这些预设中的G-codes是否安全,以防止对机器造成任何损坏!" msgid "Customized Preset" -msgstr "" +msgstr "自定义的预设" msgid "Name of components inside step file is not UTF8 format!" msgstr "step 文件中的部件名称包含非UTF8格式的字符!" @@ -4637,9 +5394,11 @@ msgid "" "The file %s already exists\n" "Do you want to replace it?" msgstr "" +"文件 %s 已经存在\n" +"您是否要替换它?" msgid "Comfirm Save As" -msgstr "" +msgstr "确认另存为" msgid "Delete object which is a part of cut object" msgstr "删除切割对象的一部分" @@ -4659,13 +5418,13 @@ msgid "Another export job is running." msgstr "有其他导出任务正在进行中。" msgid "Unable to replace with more than one volume" -msgstr "" +msgstr "超过1个零件,无法替换" msgid "Error during replace" msgstr "替换时发生错误" msgid "Replace from:" -msgstr "" +msgstr "替换:" msgid "Select a new file" msgstr "选择新文件" @@ -4988,6 +5747,9 @@ msgstr "登录区域" msgid "Stealth Mode" msgstr "局域网模式" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "公制" @@ -5021,10 +5783,10 @@ msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "如果启用,使用自由视角。如果未启用,使用约束视角。" msgid "Show splash screen" -msgstr "" +msgstr "显示启动画面" msgid "Show the splash screen during startup." -msgstr "" +msgstr "在启动时显示启动画面。" msgid "Show \"Tip of the day\" notification after start" msgstr "启动后显示“每日小贴士”通知" @@ -5033,10 +5795,10 @@ msgid "If enabled, useful hints are displayed at startup." msgstr "如果启用,将在启动时显示有用的提示。" msgid "Flushing volumes: Auto-calculate everytime the color changed." -msgstr "" +msgstr "冲刷体积:每一次更换颜色时自动计算。" msgid "If enabled, auto-calculate everytime the color changed." -msgstr "" +msgstr "如果启用,会在每一次更换颜色时自动计算。" msgid "Presets" msgstr "预设" @@ -5087,7 +5849,7 @@ msgid "Clear my choice on the unsaved projects." msgstr "清除我对未保存的项目的选择。" msgid "No warnings when loading 3MF with modified G-codes" -msgstr "" +msgstr "加载具有修改的 G-Code 的 3MF 时不会出现警告" msgid "Auto-Backup" msgstr "自动备份" @@ -5097,7 +5859,7 @@ msgid "" msgstr "定期备份你的项目,以便从偶尔的崩溃中恢复过来。" msgid "every" -msgstr "" +msgstr "每" msgid "The peroid of backup in seconds." msgstr "备份的周期" @@ -5241,10 +6003,10 @@ msgid "Add/Remove materials" msgstr "添加/删除材料" msgid "Select/Remove printers(system presets)" -msgstr "" +msgstr "选择/移除打印机(系统预设)" msgid "Create printer" -msgstr "" +msgstr "创建打印机" msgid "Incompatible" msgstr "不兼容的预设" @@ -5397,7 +6159,7 @@ msgid "(LAN)" msgstr "(局域网)" msgid "Search" -msgstr "" +msgstr "搜索" msgid "My Device" msgstr "我的设备" @@ -5558,7 +6320,7 @@ msgstr "当启用旋转花瓶模式时,I3结构的机器将不会生成延时 msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." -msgstr "" +msgstr "切片参数中开启了逐件打印,无法支持延时摄影。" msgid "Errors" msgstr "错误" @@ -5584,30 +6346,30 @@ msgstr "" #, c-format, boost-format msgid "nozzle in preset: %s %s" -msgstr "" +msgstr "预设中的喷嘴:%s %s" #, c-format, boost-format msgid "nozzle memorized: %.1f %s" -msgstr "" +msgstr "记忆中的喷嘴:%.1f %s" msgid "" "Your nozzle diameter in preset is not consistent with memorized nozzle " "diameter. Did you change your nozzle lately?" -msgstr "" +msgstr "预设中的喷嘴直径与记忆的喷嘴直径不一致。您最近更换了喷嘴吗?" #, c-format, boost-format msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "" +msgstr "*使用 %s 材料和 %s 打印可能会导致喷嘴损坏" msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "如果您仍然想继续打印,请单击“确定”按钮。" msgid "Hardened Steel" -msgstr "" +msgstr "硬化钢" msgid "Stainless Steel" -msgstr "" +msgstr "不锈钢" msgid "" "Connecting to the printer. Unable to cancel during the connection process." @@ -5652,7 +6414,7 @@ msgid "Slice ok." msgstr "切片完成." msgid "View all Daily tips" -msgstr "" +msgstr "查看所有每日贴士" msgid "Failed to create socket" msgstr "无法创建套接字" @@ -5789,7 +6551,7 @@ msgstr "" "平滑模式的延时摄影需要擦料塔,否则打印件上可能会有瑕疵。您想打开擦料塔吗?" msgid "Still print by object?" -msgstr "" +msgstr "仍然按对象打印吗?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " @@ -5825,19 +6587,25 @@ msgstr "" "当使用支持界面的支持材料时,我们推荐以下设置:\n" "0顶层z距离,0接触层间距,同心图案,并且禁用独立支撑层高" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." msgstr "" +"层高超出了打印机设置->挤出机->层高限制中的范围,这可能导致打印质量问题。" msgid "Adjust to the set range automatically? \n" -msgstr "" +msgstr "是否自动调整到范围内?\n" msgid "Adjust" -msgstr "" +msgstr "调整" msgid "Ignore" -msgstr "" +msgstr "忽略" msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5861,13 +6629,13 @@ msgid "Wall generator" msgstr "墙生成器" msgid "Walls and surfaces" -msgstr "" +msgstr "墙壁和表面" msgid "Bridging" -msgstr "" +msgstr "搭桥" msgid "Overhangs" -msgstr "" +msgstr "悬垂" msgid "Walls" msgstr "墙" @@ -6102,7 +6870,7 @@ msgid "Machine end G-code" msgstr "打印机结束G-code" msgid "Printing by object G-code" -msgstr "" +msgstr "逐件打印G-code" msgid "Before layer change G-code" msgstr "换层前G-code" @@ -6177,13 +6945,15 @@ msgid "" "%d Filament Preset and %d Process Preset is attached to this printer. Those " "presets would be deleted if the printer is deleted." msgstr "" +"该打印机下已关联 %d 个材料预设与 %d 个工艺预设。如删除该打印机,材料与工艺预" +"设将一并删除。" msgid "Presets inherited by other presets can not be deleted!" -msgstr "" +msgstr "不能删除被其他预设继承的预设!" msgid "The following presets inherit this preset." msgid_plural "The following preset inherits this preset." -msgstr[0] "" +msgstr[0] "以下预设继承此预设。" #. TRN Remove/Delete #, boost-format @@ -6199,6 +6969,8 @@ msgid "" "If the preset corresponds to a filament currently in use on your printer, " "please reset the filament information for that slot." msgstr "" +"确定要删除所选预设吗?\n" +"如果预设对应当前在您的打印机上使用的材料,请重新设置该槽位的材料信息。" #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -6434,16 +7206,21 @@ msgstr "尖端成型线宽" msgid "Ramming line spacing" msgstr "尖端成型线间距" -msgid "Recalculate" -msgstr "" +msgid "Auto-Calc" +msgstr "自动计算" + +msgid "Re-calculate" +msgstr "重新计算" msgid "Flushing volumes for filament change" msgstr "耗材丝更换时的冲刷体积" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" +"Orca 将会在每一次更换耗材颜色时重新计算你的冲刷体积, 你可以在 Orca Slicer > " +"偏好设置 中关闭自动计算" msgid "Flushing volume (mm³) for each filament pair." msgstr "在两个耗材丝间切换所需的冲刷量(mm³)" @@ -6459,6 +7236,15 @@ msgstr "乘数的取值范围是[%.2f, %.2f]" msgid "Multiplier" msgstr "乘数" +msgid "unloaded" +msgstr "卸载" + +msgid "loaded" +msgstr "装载" + +msgid "Filament #" +msgstr "耗材丝#" + msgid "From" msgstr "从" @@ -6466,10 +7252,10 @@ msgid "To" msgstr "到" msgid "Bambu Network plug-in not detected." -msgstr "" +msgstr "未检测到Bambu网络插件。" msgid "Click here to download it." -msgstr "" +msgstr "点此下载" msgid "Login" msgstr "登录" @@ -6495,9 +7281,6 @@ msgstr "" msgid "Ctrl+Shift+G" msgstr "" -msgid "Copy to clipboard" -msgstr "复制到剪贴板" - msgid "Paste from clipboard" msgstr "从剪切板粘贴" @@ -6505,7 +7288,7 @@ msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "显示/隐藏 3Dconnexion设备的设置对话框" msgid "Switch table page" -msgstr "" +msgstr "切换标签页" msgid "Show keyboard shortcuts list" msgstr "显示键盘快捷键列表" @@ -6608,9 +7391,6 @@ msgstr "Shift+方向键" msgid "Movement step set to 1 mm" msgstr "沿X、Y轴以1mm为步进移动对象" -msgid "Esc" -msgstr "" - msgid "keyboard 1-9: set filament for object/part" msgstr "按键1-9:设置对象/零件的耗材丝" @@ -6659,7 +7439,7 @@ msgstr "SLA支撑点" msgid "Gizmo FDM paint-on seam" msgstr "FDM涂装接缝" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "准备/预览之间的切换" msgid "Plater" @@ -6695,9 +7475,6 @@ msgstr "设置对象、零件使用的挤出机编号" msgid "Delete objects, parts, modifiers " msgstr "删除对象、零件、修改器" -msgid "Space" -msgstr "空格键" - msgid "Select the object/part and press space to change the name" msgstr "选中对象、零件,按空格可修改名称" @@ -6756,13 +7533,13 @@ msgid "New version of Orca Slicer" msgstr "新版本的Orca Slicer" msgid "Skip this Version" -msgstr "" +msgstr "跳过本版本" msgid "Done" msgstr "完成" msgid "Confirm and Update Nozzle" -msgstr "" +msgstr "确认并更新喷嘴" msgid "LAN Connection Failed (Sending print file)" msgstr "LAN连接失败 (发送打印文件)" @@ -6786,21 +7563,23 @@ msgid "Where to find your printer's IP and Access Code?" msgstr "在哪里可以找到打印机的IP和访问码?" msgid "Step 3: Ping the IP address to check for packet loss and latency." -msgstr "" +msgstr "步骤3,请ping打印机的IP地址,以此检查丢包和延迟。" msgid "Test" msgstr "测试" msgid "IP and Access Code Verified! You may close the window" -msgstr "" +msgstr "IP地址和访问码验证成功!您可以关闭此窗口。" msgid "Connection failed, please double check IP and Access Code" -msgstr "" +msgstr "连接失败,请再次检查IP地址和访问码。" msgid "" "Connection failed! If your IP and Access Code is correct, \n" "please move to step 3 for troubleshooting network issues" msgstr "" +"连接失败!如果您的IP地址和访问码是正确的,\n" +"请查看第三步的提示,以便定位网络问题所在。" msgid "Model:" msgstr "型号:" @@ -7170,21 +7949,25 @@ msgstr "Organic支撑不支持可变层高。" msgid "" "Different nozzle diameters and different filament diameters is not allowed " "when prime tower is enabled." -msgstr "" +msgstr "启用擦拭塔时,不允许使用不同的喷嘴直径和不同的材料直径。" msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" +"当前仅支持使用相对挤出器寻址(use_relative_e_distances=1)的情况下使用擦拭" +"塔。" msgid "" "Ooze prevention is currently not supported with the prime tower enabled." -msgstr "" +msgstr "当启用擦拭塔时,目前不支持防滴功能。" msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" +"擦拭塔目前仅支持Marlin、RepRap/Sprinter、RepRapFirmware和Repetier G-code风" +"格。" msgid "The prime tower is not supported in \"By object\" print." msgstr "擦拭塔不支持在逐件打印模式下使用。" @@ -7332,10 +8115,10 @@ msgid "Maximum printable height which is limited by mechanism of printer" msgstr "由打印机结构约束的最大可打印高度" msgid "Preferred orientation" -msgstr "" +msgstr "零件朝向偏好" msgid "Automatically orient stls on the Z-axis upon initial import" -msgstr "" +msgstr "导入模型时自动旋转到指定的朝向" msgid "Printer preset names" msgstr "打印机预设名" @@ -7344,15 +8127,15 @@ msgid "Hostname, IP or URL" msgstr "主机名,IP或者URL" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" -"Slic3r可以将G-code文件上传到打印机主机。此字段应包含打印机主机实例的主机名、" -"IP地址或URL。启用基本身份验证的Print host可以通过将用户名和密码放入以下格式的" -"URL中来访问:https://username:password@your-octopi-address/" +"Orca Slicer可以将G-code文件上传到打印机主机。此字段应包含打印机主机实例的主机" +"名、IP地址或URL。启用基本身份验证的Print host可以通过将用户名和密码放入以下格" +"式的URL中来访问:https://username:password@your-octopi-address/" msgid "Device UI" msgstr "设备用户界面" @@ -7362,20 +8145,20 @@ msgid "" msgstr "如果打印机的设备用户界面的URL不同,请在此指定。" msgid "API Key / Password" -msgstr "" +msgstr "API秘钥/密码" msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" -"Slic3r可以将G-code文件上传到打印机主机。此字段应包含用于身份验证的API密钥或密" -"码。" +"Orca Slicer可以将G-code文件上传到打印机主机。此字段应包含用于身份验证的API密" +"钥或密码。" msgid "Name of the printer" msgstr "打印机名称" msgid "HTTPS CA File" -msgstr "" +msgstr "HTTPS CA文件" msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " @@ -7409,10 +8192,10 @@ msgid "Authorization Type" msgstr "授权类型" msgid "API key" -msgstr "" +msgstr "API秘钥" msgid "HTTP digest" -msgstr "" +msgstr "HTTP摘要" msgid "Avoid crossing wall" msgstr "避免跨越外墙" @@ -7586,7 +8369,7 @@ msgid "" msgstr "稍微减小这个数值(比如0.9)可以减小桥接的材料量,来改善下垂。" msgid "Internal bridge flow ratio" -msgstr "" +msgstr "内部搭桥流量比例" msgid "" "This value governs the thickness of the internal bridge layer. This is the " @@ -7674,9 +8457,13 @@ msgid "" "This setting can also help reduce part warping due to the reduction of " "stresses in the part walls." msgstr "" +"在奇数层上,将悬垂部分的走线反转。这种交替的走线模式可以大大改善陡峭的悬" +"垂。\n" +"\n" +"这个设置也可以帮助减少零件变形,因为零件墙壁的应力减少了。" msgid "Reverse only internal perimeters" -msgstr "" +msgstr "仅反转内部墙壁" msgid "" "Apply the reverse perimeters logic only on internal perimeters. \n" @@ -7692,6 +8479,14 @@ msgid "" "Reverse Threshold to 0 so that all internal walls print in alternating " "directions on odd layers irrespective of their overhang degree." msgstr "" +"仅在内墙上应用反转墙壁逻辑。\n" +"\n" +"这个设置大大减少了零件的应力,因为它们现在是交替方向分布的。这应该减少零件变" +"形,同时保持外墙的质量。这个功能对于易变形的材料非常有用,比如ABS/ASA,也对于" +"弹性耗材,比如TPU和丝光PLA。它还可以帮助减少支撑上的悬空区域的变形。\n" +"\n" +"为了使这个设置最有效,建议将反转阈值设置为0,这样所有的内墙都会在奇数层交替打" +"印。" msgid "Reverse threshold" msgstr "反转阈值" @@ -7908,13 +8703,15 @@ msgstr "" "看起来更好,但只适用于较短的桥接距离。" msgid "Thick internal bridges" -msgstr "" +msgstr "内部搭桥用厚桥" msgid "" "If enabled, thick internal bridges will be used. It's usually recommended to " "have this feature turned on. However, consider turning it off if you are " "using large nozzles." msgstr "" +"如果启用,将使用厚内部桥接。通常建议打开此功能。但是,如果您使用大喷嘴,请考" +"虑关闭它。" msgid "Max bridge length" msgstr "最大桥接长度" @@ -7934,12 +8731,12 @@ msgid "End G-code when finish the whole printing" msgstr "所有打印结束时的结尾G-code" msgid "Between Object Gcode" -msgstr "" +msgstr "对象之间Gcode" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" -msgstr "" +msgstr "在对象之间插入 Gcode。此参数仅在逐个打印模型物体时生效。" msgid "End G-code when finish the printing of this filament" msgstr "结束使用该耗材打印时的结尾G-code" @@ -8017,6 +8814,9 @@ msgid "" "example: 80%) it will be calculated on the outer wall speed setting above. " "Set to zero for auto." msgstr "" +"此设置将影响半径小于等于small_perimeter_threshold(通常是孔洞)的围墙的速度。" +"如果以百分比表示(例如:80%),则将根据上面的外壁速度设置进行计算。设置为零时" +"为自动。" msgid "Small perimeters threshold" msgstr "微小部位周长阈值" @@ -8026,7 +8826,7 @@ msgid "" msgstr "这将设置微小部位周长的阈值。默认阈值为0mm" msgid "Walls printing order" -msgstr "" +msgstr "墙顺序" msgid "" "Print sequence of the internal (inner) and external (outer) walls. \n" @@ -8052,18 +8852,32 @@ msgid "" "\n" " " msgstr "" +"内墙和外墙的打印顺序。\n" +"\n" +"使用内墙/外墙以获得最佳悬垂效果。这是因为在打印时,悬垂的墙可以粘附到相邻的围" +"墙上。但是,这个选项会导致外墙的表面质量稍微降低,因为外墙被内墙挤压。\n" +"\n" +"使用内墙/外墙/内墙以获得最佳的外部表面质量和尺寸精度,因为外墙不会受内墙的影" +"响但是,悬垂性能会降低,因为没有内墙来支撑打印外墙。此选项要求至少3层墙壁才能" +"生效,因为它首先从第3个墙壁开始打印内墙,然后是外墙,最后是第一个内墙。在大多" +"数情况下,此选项建议使用而不是外/内选项。\n" +"\n" +"使用外/内以获得与内/外/内选项相同的外部墙质量和尺寸精度优势。但是,由于新层的" +"第一次挤出是在可见表面上开始的,因此z缝隙看起来不那么一致。\n" +"\n" +" " msgid "Inner/Outer" -msgstr "" +msgstr "内墙/外墙" msgid "Outer/Inner" -msgstr "" +msgstr "外墙/内墙" msgid "Inner/Outer/Inner" -msgstr "" +msgstr "内墙/外墙/内墙" msgid "Print infill first" -msgstr "" +msgstr "首先打印填充" msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " @@ -8075,6 +8889,11 @@ msgid "" "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" +"墙/填充的顺序。当未启用时,首先打印墙壁,这在大多数情况下都是最好的。\n" +"\n" +"首先打印墙壁可能有助于极端悬垂,因为墙壁有相邻的填充物可以粘附。但是,填充物" +"会在附着在墙壁上的地方轻微地挤出打印的墙壁,导致外部表面质量更差。它还会导致" +"填充物透过零件的外部表面。" msgid "Height to rod" msgstr "到横杆高度" @@ -8280,12 +9099,12 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "换色后,新加载的耗材在喷嘴内的确切位置可能未知,耗材压力可能还不稳定。在冲刷" -"打印头到填充或作为挤出废料之前,Slic3r将始终将这些的耗材丝冲刷到擦拭塔中以产" -"生连续的填充或稳定的挤出废料。" +"打印头到填充或作为挤出废料之前,Orca Slicer将始终将这些的耗材丝冲刷到擦拭塔中" +"以产生连续的填充或稳定的挤出废料。" msgid "Speed of the last cooling move" msgstr "最后一次冷却移动的速度" @@ -8375,6 +9194,8 @@ msgid "" "equal to or greater than it, it's highly recommended to open the front door " "and/or remove the upper glass to avoid cloggings." msgstr "" +"材料在这个温度下会软化,因此当热床温度等于或高于这个温度时,强烈建议打开前门" +"和/或去除上玻璃以避免堵塞。" msgid "Price" msgstr "价格" @@ -8453,11 +9274,12 @@ msgstr "稀疏填充锚线长度" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -8479,11 +9301,12 @@ msgstr "填充锚线的最大长度" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -8519,7 +9342,7 @@ msgstr "" "桥接加速度。如果该值以百分比(例如50%)表示,则将根据外墙加速度进行计算。" msgid "mm/s² or %" -msgstr "" +msgstr "mm/s² 或 %" msgid "" "Acceleration of sparse infill. If the value is expressed as a percentage (e." @@ -8644,9 +9467,6 @@ msgid "" "look. This setting controls the fuzzy position" msgstr "打印外墙时随机抖动,使外表面产生绒效果。这个设置决定适用的位置。" -msgid "None" -msgstr "无" - msgid "Contour" msgstr "轮廓" @@ -8911,16 +9731,16 @@ msgstr "" "多挤出机打印" msgid "Maximum width of a segmented region" -msgstr "" +msgstr "分段区域的最大宽度" msgid "Maximum width of a segmented region. Zero disables this feature." -msgstr "" +msgstr "分段区域的最大宽度。将其设置为零会禁用此功能。" msgid "Interlocking depth of a segmented region" -msgstr "" +msgstr "分割区域的交错深度" msgid "Interlocking depth of a segmented region. Zero disables this feature." -msgstr "" +msgstr "分割区域的交错深度。0 则禁用此功能。" msgid "Ironing Type" msgstr "熨烫类型" @@ -8989,6 +9809,17 @@ msgid "" "acceleration to print" msgstr "机器是否支持使用低加速度打印的静音模式。" +msgid "Emit limits to G-code" +msgstr "写入限制到G-code" + +msgid "Machine limits" +msgstr "机器限制" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9009,9 +9840,6 @@ msgstr "Z最大速度" msgid "Maximum speed E" msgstr "E最大速度" -msgid "Machine limits" -msgstr "机器限制" - msgid "Maximum X speed" msgstr "X最大速度" @@ -9232,9 +10060,9 @@ msgid "Host Type" msgstr "主机类型" msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." -msgstr "Slic3r可以将G-code文件上传到打印机主机。此字段必须包含主机类型。" +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." +msgstr "Orca Slicer可以将G-code文件上传到打印机主机。此字段必须包含主机类型。" msgid "Nozzle volume" msgstr "喷嘴内腔体积" @@ -9363,11 +10191,32 @@ msgstr "内圈墙打印速度" msgid "Number of walls of every layer" msgstr "每一层的外墙" +msgid "Alternate extra wall" +msgstr "交替额外内墙" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" +"此设置在每隔一层添加一层额外的内墙。这样,填充物就会垂直地夹在墙壁之间,从而" +"产生更牢固的打印件。\n" +"\n" +"启用此选项时,需要禁用确保垂直壳厚度选项。\n" +"\n" +"不建议将闪电填充与此选项一起使用,因为填充物有限,无法将额外的壁厚固定在填充" +"物上。" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" @@ -9439,9 +10288,6 @@ msgstr "换层时回抽" msgid "Force a retraction when changes layer" msgstr "强制在换层时回抽。" -msgid "Length" -msgstr "长度" - msgid "Retraction Length" msgstr "回抽长度" @@ -9566,7 +10412,7 @@ msgid "Show auto-calibration marks" msgstr "显示雷达标定线" msgid "Disable set remaining print time" -msgstr "" +msgstr "禁用M73剩余打印时间" msgid "Seam position" msgstr "接缝位置" @@ -9623,6 +10469,26 @@ msgstr "" "为了最大限度地减少闭环挤出中接缝的可见性,在挤出机离开环之前,会向内执行一个" "小小的移动。" +msgid "Wipe before external loop" +msgstr "额外的外墙打印前擦拭" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" +"为了最大限度地减少在使用外/内或内/外/内墙打印顺序时,外墙起始处的潜在过挤出," +"在外墙起始处外略微向内执行回填。这样,任何潜在的过挤都会隐藏在外表面之下。\n" +"\n" +"当使用外/内或内/外/内墙打印顺序时,这是有用的,因为在这些模式中,外墙可能会在" +"回填移动之后立即打印。" + msgid "Wipe speed" msgstr "擦拭速度" @@ -9693,20 +10559,24 @@ msgstr "" "印。最后生成的打印件没有接缝。" msgid "Smooth Spiral" -msgstr "" +msgstr "光滑螺旋模式" msgid "" "Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " "at all, even in the XY directions on walls that are not vertical" msgstr "" +"光滑螺旋模式平滑X和Y轴移动,从而在所有方向上都没有可见的接缝,即使在不垂直的" +"墙壁上也是如此。" msgid "Max XY Smoothing" -msgstr "" +msgstr "最大XY平滑阈值" msgid "" "Maximum distance to move points in XY to try to achieve a smooth spiralIf " "expressed as a %, it will be computed over nozzle diameter" msgstr "" +"在XY平面上移动点的最大距离,以尝试实现平滑的螺旋。如果以%表示,它将基于喷嘴直" +"径来计算。" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -9903,11 +10773,11 @@ msgstr "" "打印支撑主体和筏层的耗材丝。\"缺省\"代表不指定特定的耗材丝,并使用当前耗材" msgid "Avoid interface filament for base" -msgstr "" +msgstr "界面材料不用于主体" msgid "" "Avoid using support interface filament to print support base if possible." -msgstr "" +msgstr "避免使用支撑界面材料打印支撑主体。" msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -9939,10 +10809,10 @@ msgid "Bottom interface layers" msgstr "底部接触面层数" msgid "Number of bottom interface layers" -msgstr "" +msgstr "底部界面层的数量" msgid "Same as top" -msgstr "" +msgstr "和顶部相同" msgid "Top interface spacing" msgstr "顶部接触面线距" @@ -10150,10 +11020,10 @@ msgstr "" "墙,请将该值设置为0。" msgid "Support wall loops" -msgstr "" +msgstr "支撑外墙层数" msgid "This setting specify the count of walls around support" -msgstr "" +msgstr "此设置指定了支撑的外墙层数" msgid "Tree support with infill" msgstr "树状支撑生成填充" @@ -10184,6 +11054,10 @@ msgid "" "high to avoid cloggings, so 0 which stands for turning off is highly " "recommended" msgstr "" +"更高的腔温可以帮助抑制或减少翘曲,同时可能会提高高温材料(如ABS、ASA、PC、PA" +"等)的层间粘合强度。与此同时,ABS和ASA的空气过滤性能会变差。而对于PLA、PETG、" +"TPU、PVA等低温材料,为了避免堵塞,实际的腔温不应该过高,因此强烈建议使用0(表" +"示关闭)。" msgid "Nozzle temperature for layers after the initial one" msgstr "除首层外的其它层的喷嘴温度" @@ -10295,9 +11169,6 @@ msgstr "清理量" msgid "The volume of material to prime extruder on tower." msgstr "擦拭塔上的清理量" -msgid "Width" -msgstr "宽度" - msgid "Width of prime tower" msgstr "擦拭塔宽度" @@ -10455,8 +11326,8 @@ msgstr "使用相对E距离" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" msgid "" @@ -10839,7 +11710,7 @@ msgstr "名称不能为空。" #, c-format, boost-format msgid "The selected preset: %s is not found." -msgstr "" +msgstr "未找到选定的预设:%s。" msgid "The name cannot be the same as the system preset name." msgstr "名称不能与系统预设名称相同。" @@ -11164,7 +12035,7 @@ msgstr "" "-不同的耗材品牌和系列(Brand = Bambu, Family = Basic, Matte)" msgid "Pattern" -msgstr "" +msgstr "图案" msgid "Method" msgstr "方法" @@ -11180,10 +12051,10 @@ msgid "Connecting to printer" msgstr "正在连接打印机" msgid "From k Value" -msgstr "" +msgstr "起始k值" msgid "To k Value" -msgstr "" +msgstr "结束k值" msgid "Step value" msgstr "" @@ -11463,10 +12334,10 @@ msgid "Intersection" msgstr "交集" msgid "Source Volume" -msgstr "" +msgstr "源体积" msgid "Tool Volume" -msgstr "" +msgstr "工具体积" msgid "Subtract from" msgstr "从中减去" @@ -11487,211 +12358,212 @@ msgid "Delete input" msgstr "删除输入" msgid "Network Test" -msgstr "" +msgstr "网络测试" msgid "Start Test Multi-Thread" -msgstr "" +msgstr "多线程开始测试" msgid "Start Test Single-Thread" -msgstr "" +msgstr "单线程开始测试" msgid "Export Log" -msgstr "" +msgstr "输出日志" msgid "Studio Version:" -msgstr "" +msgstr "Studio 版本:" msgid "System Version:" -msgstr "" +msgstr "系统版本:" msgid "DNS Server:" -msgstr "" +msgstr "DNS服务:" msgid "Test BambuLab" -msgstr "" +msgstr "测试 BambuLab" msgid "Test BambuLab:" -msgstr "" +msgstr "测试 BambuLab:" msgid "Test Bing.com" -msgstr "" +msgstr "测试 Bing.com" msgid "Test bing.com:" -msgstr "" +msgstr "测试 Bing.com:" msgid "Test HTTP" -msgstr "" +msgstr "测试 HTTP" msgid "Test HTTP Service:" -msgstr "" +msgstr "测试 HTTP 服务:" msgid "Test storage" -msgstr "" +msgstr "测试存储" msgid "Test Storage Upload:" -msgstr "" +msgstr "测试存储上传:" msgid "Test storage upgrade" -msgstr "" +msgstr "测试存储升级" msgid "Test Storage Upgrade:" -msgstr "" +msgstr "测试存储升级:" msgid "Test storage download" -msgstr "" +msgstr "测试存储下载" msgid "Test Storage Download:" -msgstr "" +msgstr "测试存储下载:" msgid "Test plugin download" -msgstr "" +msgstr "测试插件下载" msgid "Test Plugin Download:" -msgstr "" +msgstr "测试插件下载:" msgid "Test Storage Upload" -msgstr "" +msgstr "测试存储上传" msgid "Log Info" -msgstr "" +msgstr "日志信息" msgid "Select filament preset" -msgstr "" +msgstr "选择材料预设" msgid "Create Filament" -msgstr "" +msgstr "创建材料" msgid "Create Based on Current Filament" -msgstr "" +msgstr "基于当前材料创建" msgid "Copy Current Filament Preset " -msgstr "" +msgstr "复制当前材料预设" msgid "Basic Information" -msgstr "" +msgstr "基本信息" msgid "Add Filament Preset under this filament" -msgstr "" +msgstr "添加该材料的材料预设" msgid "We could create the filament presets for your following printer:" -msgstr "" +msgstr "我们可以为您的以下打印机创建材料预设:" msgid "Select Vendor" -msgstr "" +msgstr "选择供应商" msgid "Input Custom Vendor" -msgstr "" +msgstr "输入自定义供应商" msgid "Can't find vendor I want" -msgstr "" +msgstr "找不到我想要的供应商" msgid "Select Type" -msgstr "" +msgstr "选择类型" msgid "Select Filament Preset" -msgstr "" +msgstr "选择材料预设" msgid "Serial" -msgstr "" +msgstr "系列" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "" +msgstr "例如:Basic, Matte, Silk, Marble" msgid "Filament Preset" -msgstr "" +msgstr "材料预设" msgid "Create" -msgstr "" +msgstr "创建" msgid "Vendor is not selected, please reselect vendor." -msgstr "" +msgstr "未选择供应商,请重新选择供应商。" msgid "Custom vendor is not input, please input custom vendor." -msgstr "" +msgstr "未输入自定义供应商,请输入自定义供应商。" msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." -msgstr "" +msgstr "“Bambu”或者“Generic”不能用于自定义材料的厂商" msgid "Filament type is not selected, please reselect type." -msgstr "" +msgstr "未选择材料类型,请重新选择。" msgid "Filament serial is not inputed, please input serial." -msgstr "" +msgstr "未输入材料系列,请输入材料系列。" msgid "" "There may be escape characters in the vendor or serial input of filament. " "Please delete and re-enter." -msgstr "" +msgstr "材料的供应商或系列输入中可能包含转义字符。请删除并重新输入。" msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." -msgstr "" +msgstr "自定义供应商或系列中的所有输入都是空格。请重新输入。" msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "自定义供应商不能是数字。请重新输入。" msgid "" "You have not selected a printer or preset yet. Please select at least one." -msgstr "" +msgstr "您还没有选择打印机或预设。请至少选择一个。" msgid "Some existing presets have failed to be created, as follows:\n" -msgstr "" +msgstr "以下一些现有预设未能成功创建:\n" msgid "" "\n" "Do you want to rewrite it?" msgstr "" +"\n" +"你想重写预设吗" msgid "" "We would rename the presets as \"Vendor Type Serial @printer you selected" "\". \n" "To add preset for more prinetrs, Please go to printer selection" msgstr "" +"我们会将预设重命名为“供应商 类型 系列 @您选择的打印机”。\n" +"要为更多的打印机添加预设,请前往打印机选择。" msgid "Create Printer/Nozzle" -msgstr "" +msgstr "创建打印机/喷嘴" msgid "Create Printer" -msgstr "" +msgstr "创建打印机" msgid "Create Nozzle for Existing Printer" -msgstr "" +msgstr "为现有打印机创建喷嘴" msgid "Create from Template" -msgstr "" +msgstr "基于模板创建" msgid "Create Based on Current Printer" -msgstr "" - -msgid "wiki" -msgstr "" +msgstr "基于当前打印机创建" msgid "Import Preset" -msgstr "" +msgstr "导入预设" msgid "Create Type" -msgstr "" +msgstr "创建类型" msgid "The model is not fond, place reselect vendor." -msgstr "" +msgstr "该模型未找到,请重新选择供应商。" msgid "Select Model" -msgstr "" +msgstr "选择型号" msgid "Select Printer" -msgstr "" +msgstr "选择打印机" msgid "Input Custom Model" -msgstr "" +msgstr "输入自定义型号" msgid "Can't find my printer model" -msgstr "" +msgstr "不能找到我的打印机模型" msgid "Rectangle" -msgstr "" +msgstr "矩形" msgid "Printable Space" -msgstr "" +msgstr "可打印形状" msgid "X" msgstr "" @@ -11700,66 +12572,66 @@ msgid "Y" msgstr "" msgid "Hot Bed STL" -msgstr "" +msgstr "热床STL模型" msgid "Load stl" -msgstr "" +msgstr "加载stl" msgid "Hot Bed SVG" -msgstr "" +msgstr "热床SVG图片" msgid "Load svg" -msgstr "" +msgstr "加载svg" msgid "Max Print Height" -msgstr "" +msgstr "最大打印高度" #, c-format, boost-format msgid "The file exceeds %d MB, please import again." -msgstr "" +msgstr "文件超过 %d MB,请重新导入。" msgid "Exception in obtaining file size, please import again." -msgstr "" +msgstr "获取文件大小异常,请重新导入。" msgid "Preset path is not find, please reselect vendor." -msgstr "" +msgstr "预设路径未找到,请重新选择供应商。" msgid "The printer model was not found, please reselect." -msgstr "" +msgstr "未找到打印机型号,请重新选择。" msgid "The nozzle diameter is not fond, place reselect." -msgstr "" +msgstr "未找到喷嘴直径,请重新选择。" msgid "The printer preset is not fond, place reselect." -msgstr "" +msgstr "打印机预设未找到,请重新选择。" msgid "Printer Preset" -msgstr "" +msgstr "打印机预设" msgid "Filament Preset Template" -msgstr "" +msgstr "材料预设模板" msgid "Deselect All" -msgstr "" +msgstr "全部取消选中" msgid "Process Preset Template" -msgstr "" +msgstr "工艺预设模板" msgid "Back Page 1" -msgstr "" +msgstr "返回第一页" msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" -msgstr "" +msgstr "您尚未选择要基于哪个打印机预设来创建。请先选择打印机的供应商和型号。" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." -msgstr "" +msgstr "您在第一页的可打印区域部分输入了非法输入。请检查后再创建。" msgid "The custom printer or model is not inputed, place input." -msgstr "" +msgstr "自定义打印机或型号未输入,请输入。" msgid "" "The printer preset you created already has a preset with the same name. Do " @@ -11770,60 +12642,64 @@ msgid "" "reserve.\n" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" +"\"您创建的打印机预设已经有一个同名的预设。您想要覆盖它吗?\n" +"- 是:覆盖同名的打印机预设,具有相同预设名称的材料和工艺预设将被重新创建,没" +"有相同预设名称的材料和工艺预设将被保留。\n" +"- 取消:不创建预设,返回到创建界面。\"" msgid "You need to select at least one filament preset." -msgstr "" +msgstr "您需要至少选择一个材料预设。" msgid "You need to select at least one process preset." -msgstr "" +msgstr "您需要至少选择一个工艺预设。" msgid "Create filament presets failed. As follows:\n" -msgstr "" +msgstr "创建材料预设失败。如下:\n" msgid "Create process presets failed. As follows:\n" -msgstr "" +msgstr "创建工艺预设失败。如下:\n" msgid "Vendor is not find, please reselect." -msgstr "" +msgstr "供应商未找到,请重新选择。" msgid "Current vendor has no models, please reselect." -msgstr "" +msgstr "当前的供应商没有模型,请重新选择。" msgid "" "You have not selected the vendor and model or inputed the custom vendor and " "model." -msgstr "" +msgstr "您还没有选择供应商和模型,或者没有输入自定义供应商和模型。" msgid "" "There may be escape characters in the custom printer vendor or model. Please " "delete and re-enter." -msgstr "" +msgstr "自定义打印机供应商或型号中可能有转义字符。请删除并重新输入。" msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." -msgstr "" +msgstr "自定义打印机供应商或型号的所有输入都是空格。请重新输入。" msgid "Please check bed printable shape and origin input." -msgstr "" +msgstr "请检查可打印区域和原点的输入。" msgid "" "You have not yet selected the printer to replace the nozzle, please choose." -msgstr "" +msgstr "您尚未选择要更换喷嘴的打印机,请进行选择。" msgid "Create Printer Successful" -msgstr "" +msgstr "创建打印机成功" msgid "Create Filament Successful" -msgstr "" +msgstr "创建材料成功" msgid "Printer Created" -msgstr "" +msgstr "打印机已创建" msgid "Please go to printer settings to edit your presets" -msgstr "" +msgstr "请去打印机设置编辑您的预设" msgid "Filament Created" -msgstr "" +msgstr "材料已创建" msgid "" "Please go to filament setting to edit your presets if you need.\n" @@ -11831,45 +12707,47 @@ msgid "" "volumetric speed have a significant impact on printing quality. Please set " "them carefully." msgstr "" +"如果需要,请转到灯丝设置以编辑您的预设。\n" +"请注意喷嘴温度、热床温度和最大体积流量对打印质量有重大影响。请小心设置它们。" msgid "Printer Setting" -msgstr "" +msgstr "打印机设置" msgid "Export Configs" -msgstr "" +msgstr "导出预设" -msgid "Printer config bundle(.bbscfg)" -msgstr "" +msgid "Printer config bundle(.orca_printer)" +msgstr "打印机预设集(.orca_printer)" -msgid "Filament bundle(.bbsflmt)" -msgstr "" +msgid "Filament bundle(.orca_filament)" +msgstr "材料预设集(.orca_filament)" msgid "Printer presets(.zip)" -msgstr "" +msgstr "打印机预设(.zip)" msgid "Filament presets(.zip)" -msgstr "" +msgstr "材料预设(.zip)" msgid "Process presets(.zip)" -msgstr "" +msgstr "工艺预设(.zip)" msgid "initialize fail" -msgstr "" +msgstr "初始化失败" msgid "add file fail" -msgstr "" +msgstr "添加文件失败" msgid "add bundle structure file fail" -msgstr "" +msgstr "添加预设集结构文件失败" msgid "finalize fail" -msgstr "" +msgstr "写入失败" msgid "open zip written fail" -msgstr "" +msgstr "打开zip写入失败" msgid "Export successful" -msgstr "" +msgstr "导出成功" #, c-format, boost-format msgid "" @@ -11878,133 +12756,148 @@ msgid "" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" +"当前目录中已存在名为 '%s' 的文件夹。您要清除它并重新构建吗?\n" +"如果不清除,将会在文件夹名后添加时间后缀,您可以在创建后进行修改。" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" +"打印机和属于打印机的所有的材料和工艺预设。\n" +"能与他人分享。" msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" +"用户材料预设集。\n" +"能与他人分享。" msgid "" "Only display printer names with changes to printer, filament, and process " "presets." -msgstr "" +msgstr "仅显示发生了更改的打印机、材料和工艺预设的打印机名称。" msgid "Only display the filament names with changes to filament presets." -msgstr "" +msgstr "仅显示发生了更改的材料预设的材料名称。" msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" +"只显示带有用户打印机预设的打印机名称,并且您选择的每个预设都将导出为一个ZIP文" +"件。" msgid "" "Only the filament names with user filament presets will be displayed, \n" "and all user filament presets in each filament name you select will be " "exported as a zip." msgstr "" +"只显示带有用户材料预设的材料名称,您选择的每个材料名称中的所有用户材料预设都" +"将导出为一个ZIP文件。" msgid "" "Only printer names with changed process presets will be displayed, \n" "and all user process presets in each printer name you select will be " "exported as a zip." msgstr "" +"只显示带有更改的工艺预设的打印机名称,您选择的每个打印机名称中的所有用户工艺" +"预设都将导出为一个ZIP文件。" msgid "Please select at least one printer or filament." -msgstr "" +msgstr "请至少选择一种打印机或耗材丝。" msgid "Please select a type you want to export" -msgstr "" +msgstr "请选择一个你想导出的类型" msgid "Edit Filament" -msgstr "" +msgstr "编辑材料" msgid "Filament presets under this filament" -msgstr "" +msgstr "此材料下的所有材料预设" msgid "" "Note: If the only preset under this filament is deleted, the filament will " "be deleted after exiting the dialog." msgstr "" +"注意:如果在该材料下仅有的预设被删除,那么在退出对话框后该材料将被删除。" msgid "Presets inherited by other presets can not be deleted" -msgstr "" +msgstr "被其他预设继承的预设不能被删除。" msgid "The following presets inherits this preset." msgid_plural "The following preset inherits this preset." -msgstr[0] "" +msgstr[0] "以下预设继承此预设。" msgid "Delete Preset" -msgstr "" +msgstr "删除预设" msgid "Are you sure to delete the selected preset?" -msgstr "" +msgstr "你确定要删除所选预设?" msgid "Delete preset" -msgstr "" +msgstr "删除预设" msgid "+ Add Preset" -msgstr "" +msgstr "+ 添加预设" msgid "Delete Filament" -msgstr "" +msgstr "删除材料" msgid "" "All the filament presets belong to this filament would be deleted. \n" "If you are using this filament on your printer, please reset the filament " "information for that slot." msgstr "" +"删除材料后,附属的材料预设也会被一并删除。\n" +"如果该材料正在您的打印机上使用,请重新设置该槽位的材料信息。" msgid "Delete filament" -msgstr "" +msgstr "删除材料" msgid "Add Preset" -msgstr "" +msgstr "添加预设" msgid "Add preset for new printer" -msgstr "" +msgstr "为新打印机添加预设" msgid "Copy preset from filament" -msgstr "" +msgstr "从材料中复制预设" msgid "The filament choice not find filament preset, please reselect it" -msgstr "" +msgstr "您选择的材料未找到材料预设,请重新选择。" msgid "Edit Preset" -msgstr "" +msgstr "编辑预设" msgid "For more information, please check out Wiki" -msgstr "" +msgstr "了解更多信息,请参阅Wiki" msgid "Collapse" -msgstr "" +msgstr "收起" msgid "Daily Tips" -msgstr "" +msgstr "每日贴士" msgid "Need select printer" msgstr "需要选择打印机" msgid "The start, end or step is not valid value." -msgstr "" +msgstr "起始、结束或者步长输入值无效。" msgid "" "Unable to calibrate: maybe because the set calibration value range is too " "large, or the step is too small" -msgstr "" +msgstr "无法标定:可能是标定值范围过大,或者是补偿过小" msgid "Physical Printer" msgstr "物理打印机" msgid "Print Host upload" -msgstr "" +msgstr "打印主机上传" msgid "Could not get a valid Printer Host reference" -msgstr "" +msgstr "无法获取有效的打印机主机引用" msgid "Success!" msgstr "成功!" @@ -12015,96 +12908,96 @@ msgstr "刷新打印机" msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." -msgstr "" +msgstr "HTTPS CA文件是可选的。只有在使用自签名证书进行HTTPS连接时才需要。" msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" msgstr "" msgid "Open CA certificate file" -msgstr "" +msgstr "打开CA证书文件" #, c-format, boost-format msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." -msgstr "" +msgstr "在此系统上,%s 使用来自系统证书存储或密钥链的HTTPS证书。" msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " "Keychain." -msgstr "" +msgstr "要使用自定义 CA 文件,请将您的 CA 文件导入到证书存储 / 密钥链中。" msgid "Connection to printers connected via the print host failed." -msgstr "" +msgstr "连接到通过打印主机连接的打印机失败。" #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "" +msgstr "打印主机的类型不匹配:%s" msgid "Connection to AstroBox works correctly." -msgstr "" +msgstr "与 AstroBox 的连接正常。" msgid "Could not connect to AstroBox" -msgstr "" +msgstr "无法连接到 AstroBox。" msgid "Note: AstroBox version at least 1.1.0 is required." -msgstr "" +msgstr "请注意,需要至少 AstroBox 版本 1.1.0。" msgid "Connection to Duet works correctly." -msgstr "" +msgstr "成功连接到 Duet 控制器。" msgid "Could not connect to Duet" -msgstr "" +msgstr "无法连接到 Duet 控制器。" msgid "Unknown error occured" -msgstr "" +msgstr "发生了未知错误。" msgid "Wrong password" -msgstr "" +msgstr "密码错误。" msgid "Could not get resources to create a new connection" -msgstr "" +msgstr "无法获取资源以创建新连接。" msgid "Upload not enabled on FlashAir card." -msgstr "" +msgstr "FlashAir卡未启用上传。" msgid "Connection to FlashAir works correctly and upload is enabled." -msgstr "" +msgstr "FlashAir连接正常,并启用了上传。" msgid "Could not connect to FlashAir" -msgstr "" +msgstr "FlashAir 连接失败。" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." -msgstr "" +msgstr "需要 FlashAir 固件版本为 2.00.02 或更高,并激活上传功能。" msgid "Connection to MKS works correctly." -msgstr "" +msgstr "MKS的连接正常。" msgid "Could not connect to MKS" -msgstr "" +msgstr "无法连接到MKS。" msgid "Connection to OctoPrint works correctly." -msgstr "" +msgstr "成功连接到 OctoPrint。" msgid "Could not connect to OctoPrint" -msgstr "" +msgstr "无法连接到OctoPrint" msgid "Note: OctoPrint version at least 1.1.0 is required." -msgstr "" +msgstr "注意:至少需要 OctoPrint 版本 1.1.0。" msgid "Connection to Prusa SL1 / SL1S works correctly." -msgstr "" +msgstr "与 Prusa SL1 / SL1S 的连接正常。" msgid "Could not connect to Prusa SLA" -msgstr "" +msgstr "无法连接到 Prusa SLA。" msgid "Connection to PrusaLink works correctly." -msgstr "" +msgstr "连接到 PrusaLink 的连接正常。" msgid "Could not connect to PrusaLink" -msgstr "" +msgstr "无法连接到 PrusaLink。" msgid "Storages found" msgstr "" @@ -12131,19 +13024,21 @@ msgid "Could not connect to Prusa Connect" msgstr "" msgid "Connection to Repetier works correctly." -msgstr "" +msgstr "与 Repetier 的连接正常。" msgid "Could not connect to Repetier" -msgstr "" +msgstr "无法连接到Repetier" msgid "Note: Repetier version at least 0.90.0 is required." -msgstr "" +msgstr "注意:需要 Repetier 版本至少为 0.90.0。" #, boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" msgstr "" +"HTTP状态:%1%\n" +"消息体:\"%2%\"" #, boost-format msgid "" @@ -12151,13 +13046,15 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"主机响应解析失败。\n" +"消息体:\"%1%\"错误:\"%2%\"" #, boost-format msgid "" "Enumeration of host printers failed.\n" "Message body: \"%1%\"\n" "Error: \"%2%\"" -msgstr "" +msgstr "主机打印机的枚举失败。消息体:\"%1%\"错误:\"%2%\"" #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -12199,6 +13096,19 @@ msgid "" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -12206,6 +13116,13 @@ msgid "" "3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -12221,6 +13138,8 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems on the Windows system?" msgstr "" +"修复模型\n" +"您知道吗?在Windows系统上,您可以修复一个损坏的3D模型以避免诸多切片问题。" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -12448,6 +13367,9 @@ msgid "" "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature. More info about this in the Wiki." msgstr "" +"什么时候需要打开机箱门打印\n" +"您知道吗?在较高腔温下打印低温耗材,打开机箱门可以减少挤出机/热端堵塞的概率。" +"有关此的更多信息,请参阅Wiki。" #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -12456,6 +13378,42 @@ msgid "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping." msgstr "" +"避免翘曲\n" +"您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" + +#~ msgid "Movement:" +#~ msgstr "移动:" + +#~ msgid "Movement" +#~ msgstr "移动" + +#~ msgid "Auto Segment" +#~ msgstr "自动分割" + +#~ msgid "Depth ratio" +#~ msgstr "深度" + +#~ msgid "Prizm" +#~ msgstr "棱柱" + +#~ msgid "connector is out of cut contour" +#~ msgstr "个连接件超出了切割面范围" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "个连接件超出了切割面范围" + +#~ msgid "connector is out of object" +#~ msgstr "个连接件穿透了模型" + +#~ msgid "connectors is out of object" +#~ msgstr "个连接件穿透了模型" + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "无效状态。\n" +#~ "切割后没有选中要保留的部分" #~ msgid "Edit Text" #~ msgstr "编辑文字" @@ -12490,18 +13448,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "快速的" -#~ msgid "Auto-Calc" -#~ msgstr "自动计算" - -#~ msgid "unloaded" -#~ msgstr "卸载" - -#~ msgid "loaded" -#~ msgstr "装载" - -#~ msgid "Filament #" -#~ msgstr "耗材丝#" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "表示回抽时擦拭的移动距离。" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 2762dd26ed..8a72a71dbc 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-19 22:09+0800\n" +"POT-Creation-Date: 2023-12-29 22:55+0800\n" "PO-Revision-Date: 2023-11-06 14:37+0800\n" "Last-Translator: ablegods \n" "Language-Team: \n" @@ -233,6 +233,9 @@ msgstr "mm" msgid "Position" msgstr "位置" +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible msgid "Rotation" msgstr "旋轉" @@ -275,6 +278,7 @@ msgstr "世界坐標" msgid "°" msgstr "" +#. TRN - Input label. Be short as possible msgid "Size" msgstr "尺寸" @@ -284,6 +288,114 @@ msgstr "" msgid "uniform scale" msgstr "等比例縮放" +msgid "Planar" +msgstr "" + +msgid "Dovetail" +msgstr "" + +msgid "Auto" +msgstr "自動" + +msgid "Manual" +msgstr "" + +msgid "Plug" +msgstr "插銷" + +msgid "Dowel" +msgstr "銷釘" + +msgid "Snap" +msgstr "" + +msgid "Prism" +msgstr "" + +msgid "Frustum" +msgstr "錐體" + +msgid "Square" +msgstr "正方形" + +msgid "Hexagon" +msgstr "六邊形" + +msgid "Keep orientation" +msgstr "" + +#, fuzzy +msgid "Place on cut" +msgstr "切割面放置到列印板上" + +msgid "Flip upside down" +msgstr "" + +msgid "Connectors" +msgstr "連接件" + +msgid "Type" +msgstr "類型" + +msgid "Style" +msgstr "樣式" + +msgid "Shape" +msgstr "形狀" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "" + +msgid "Groove" +msgstr "" + +msgid "Width" +msgstr "寬度" + +msgid "Flap Angle" +msgstr "" + +msgid "Groove Angle" +msgstr "" + +msgid "Part" +msgstr "零件" + +msgid "Object" +msgstr "物件" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" + +msgid "Move cut plane" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Change cut mode" +msgstr "" + +msgid "Tolerance" +msgstr "公差" + +msgid "Drag" +msgstr "拖拉" + +msgid "Draw cut line" +msgstr "" + msgid "Left click" msgstr "滑鼠左鍵" @@ -296,9 +408,6 @@ msgstr "滑鼠右鍵" msgid "Remove connector" msgstr "刪除連接件" -msgid "Drag" -msgstr "拖拉" - msgid "Move connector" msgstr "移動連接件" @@ -315,23 +424,51 @@ msgstr "選擇所有連接件" msgid "Cut" msgstr "切割" -msgid "non-mainifold edges be caused by cut tool, do you want to fix it now?" +msgid "Rotate cut plane" msgstr "" -msgid "Repairing model object" -msgstr "修復模型物件" +msgid "Remove connectors" +msgstr "刪除所有連接件" -msgid "Connector" -msgstr "連接件" +msgid "Bulge" +msgstr "" -msgid "Movement:" -msgstr "移動:" +msgid "Bulge proportion related to radius" +msgstr "" -msgid "Movement" -msgstr "移動" +msgid "Space" +msgstr "空格鍵" -msgid "Height" -msgstr "高度" +msgid "Space proportion related to radius" +msgstr "" + +msgid "Confirm connectors" +msgstr "確認" + +msgid "Cancel" +msgstr "取消" + +msgid "Build Volume" +msgstr "" + +msgid "Flip cut plane" +msgstr "" + +msgid "Groove change" +msgstr "" + +msgid "Reset" +msgstr "重設" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "" + +msgid "Cut position" +msgstr "" + +msgid "Reset cutting plane" +msgstr "" msgid "Edit connectors" msgstr "編輯連接件" @@ -339,6 +476,12 @@ msgstr "編輯連接件" msgid "Add connectors" msgstr "新增連接件" +msgid "Reset cut" +msgstr "" + +msgid "Reset cutting plane and remove connectors" +msgstr "" + msgid "Upper part" msgstr "上半部分" @@ -349,10 +492,6 @@ msgstr "下半部分" msgid "Keep" msgstr "保留" -#, fuzzy -msgid "Place on cut" -msgstr "切割面放置到列印板上" - msgid "Flip" msgstr "翻轉" @@ -362,87 +501,54 @@ msgstr "切割後" msgid "Cut to parts" msgstr "切割為零件" -msgid "Auto Segment" -msgstr "自動分割" - msgid "Perform cut" msgstr "執行切割" -msgid "Reset" -msgstr "重設" - -msgid "Connectors" -msgstr "連接件" - -msgid "Type" -msgstr "類型" - -msgid "Style" -msgstr "樣式" - -msgid "Shape" -msgstr "形狀" - -msgid "Depth ratio" -msgstr "深度" - -msgid "Remove connectors" -msgstr "刪除所有連接件" - -msgid "Prizm" -msgstr "稜柱" - -msgid "Frustum" -msgstr "錐體" - -msgid "Square" -msgstr "正方形" - -msgid "Hexagon" -msgstr "六邊形" - -msgid "Confirm connectors" -msgstr "確認" - -msgid "Cancel" -msgstr "取消" - msgid "Warning" msgstr "警告" msgid "Invalid connectors detected" msgstr "偵測到無效連接件" -msgid "connector is out of cut contour" -msgstr "個連接件超出了切割面範圍" +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "" -msgid "connectors are out of cut contour" -msgstr "個連接件超出了切割面範圍" - -msgid "connector is out of object" -msgstr "個連接件穿透了模型" - -msgid "connectors is out of object" -msgstr "個連接件穿透了模型" +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "" msgid "Some connectors are overlapped" msgstr "存在連接件相互重疊" -msgid "" -"Invalid state. \n" -"No one part is selected for keep after cut" +msgid "Select at least one object to keep after cutting." msgstr "" -"無效狀態。\n" -"切割後沒有選取要保留的部分" -msgid "Plug" -msgstr "插銷" +msgid "Cut plane is placed out of object" +msgstr "" -msgid "Dowel" -msgstr "銷釘" +msgid "Cut plane with groove is invalid" +msgstr "" -msgid "Tolerance" -msgstr "公差" +msgid "Connector" +msgstr "連接件" + +msgid "Cut by Plane" +msgstr "" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" + +msgid "Repairing model object" +msgstr "修復模型物件" + +msgid "Cut by line" +msgstr "" + +msgid "Delete connector" +msgstr "" msgid "Mesh name" msgstr "Mesh名" @@ -541,6 +647,8 @@ msgstr "" msgid "Paint-on seam editing" msgstr "" +#. TRN - Input label. Be short as possible +#. Select look of letter shape msgid "Font" msgstr "字體" @@ -577,6 +685,655 @@ msgstr "旋轉文字" msgid "Text shape" msgstr "新增文字" +msgid "Set Mirror" +msgstr "" + +msgid "Embossed text" +msgstr "" + +msgid "Enter emboss gizmo" +msgstr "" + +msgid "Leave emboss gizmo" +msgstr "" + +msgid "Embossing actions" +msgstr "" + +msgid "Emboss" +msgstr "" + +msgid "Text-Rotate" +msgstr "" + +msgid "NORMAL" +msgstr "" + +msgid "SMALL" +msgstr "" + +msgid "ITALIC" +msgstr "" + +msgid "SWISS" +msgstr "" + +msgid "MODERN" +msgstr "" + +msgid "First font" +msgstr "" + +msgid "Default font" +msgstr "" + +msgid "Advanced" +msgstr "高級" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" + +msgid "Embossed text cannot contain only white spaces." +msgstr "" + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" + +msgid "Text input doesn't show font skew." +msgstr "" + +msgid "Text input doesn't show font boldness." +msgstr "" + +msgid "Text input doesn't show gap between lines." +msgstr "" + +msgid "Too tall, diminished font height inside text input." +msgstr "" + +msgid "Too small, enlarged font height inside text input." +msgstr "" + +msgid "Text doesn't show current horizontal alignment." +msgstr "" + +msgid "Revert font changes." +msgstr "" + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Join" +msgstr "" + +msgid "Click to change text into object part." +msgstr "" + +msgid "You can't change a type of the last solid part of the object." +msgstr "" + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "" + +msgid "Click to change part type into negative volume." +msgstr "" + +msgid "Modifier" +msgstr "修改器" + +msgid "Click to change part type into modifier." +msgstr "" + +msgid "Change Text Type" +msgstr "" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "" + +msgid "Name can't be empty." +msgstr "" + +msgid "Name has to be unique." +msgstr "" + +msgid "OK" +msgstr "確認" + +msgid "Rename style" +msgstr "" + +msgid "Rename current style." +msgstr "" + +msgid "Can't rename temporary style." +msgstr "" + +msgid "First Add style to list." +msgstr "" + +#, boost-format +msgid "Save %1% style" +msgstr "" + +msgid "No changes to save." +msgstr "" + +msgid "New name of style" +msgstr "" + +msgid "Save as new style" +msgstr "" + +msgid "Only valid font can be added to style." +msgstr "" + +msgid "Add style to my list." +msgstr "" + +msgid "Save as new style." +msgstr "" + +msgid "Remove style" +msgstr "" + +msgid "Can't remove the last existing style." +msgstr "" + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "" + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "" + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "" + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" + +msgid "Not valid style." +msgstr "" + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "" + +msgid "Unset italic" +msgstr "" + +msgid "Set italic" +msgstr "" + +msgid "Unset bold" +msgstr "" + +msgid "Set bold" +msgstr "" + +msgid "Revert text size." +msgstr "" + +msgid "Revert embossed depth." +msgstr "" + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" + +msgid "Revert using of model surface." +msgstr "" + +msgid "Revert Transformation per glyph." +msgstr "" + +msgid "Set global orientation for whole text." +msgstr "" + +msgid "Set position and orientation per glyph." +msgstr "" + +msgctxt "Alignment" +msgid "Left" +msgstr "" + +msgctxt "Alignment" +msgid "Center" +msgstr "" + +msgctxt "Alignment" +msgid "Right" +msgstr "" + +msgctxt "Alignment" +msgid "Top" +msgstr "" + +msgctxt "Alignment" +msgid "Middle" +msgstr "" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "" + +msgid "Revert alignment." +msgstr "" + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "" + +msgid "Revert gap between characters" +msgstr "" + +msgid "Distance between characters" +msgstr "" + +msgid "Revert gap between lines" +msgstr "" + +msgid "Distance between lines" +msgstr "" + +msgid "Undo boldness" +msgstr "" + +msgid "Tiny / Wide glyphs" +msgstr "" + +msgid "Undo letter's skew" +msgstr "" + +msgid "Italic strength ratio" +msgstr "" + +msgid "Undo translation" +msgstr "" + +msgid "Distance of the center of the text to the model surface." +msgstr "" + +msgid "Undo rotation" +msgstr "" + +msgid "Rotate text Clock-wise." +msgstr "" + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" + +msgid "Select from True Type Collection." +msgstr "" + +msgid "Set text to face camera" +msgstr "" + +msgid "Orient the text towards the camera." +msgstr "" + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" + +msgid "No symbol" +msgstr "" + +msgid "Loading" +msgstr "載入中" + +msgid "In queue" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "高度" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "" + +msgid "Enter SVG gizmo" +msgstr "" + +msgid "Leave SVG gizmo" +msgstr "" + +msgid "SVG actions" +msgstr "" + +msgid "SVG" +msgstr "" + +#. TRN This is an item label in the undo-redo stack. +msgid "SVG-Rotate" +msgstr "" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "" + +msgid "Undefined fill type" +msgstr "" + +msgid "Linear gradient" +msgstr "" + +msgid "Radial gradient" +msgstr "" + +msgid "Open filled path" +msgstr "" + +msgid "Undefined stroke type" +msgstr "" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "" + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "" + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "" + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "" + +msgid "Face the camera" +msgstr "" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "" + +msgid "Reload SVG file from disk." +msgstr "" + +msgid "Change file" +msgstr "" + +msgid "Change to another .svg file" +msgstr "" + +msgid "Forget the file path" +msgstr "" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "" + +msgid "Save as" +msgstr "" + +msgid "Save SVG file" +msgstr "" + +msgid "Save as '.svg' file" +msgstr "" + +msgid "Size in emboss direction." +msgstr "" + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "" + +msgid "Width of SVG." +msgstr "" + +msgid "Height of SVG." +msgstr "" + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "" + +msgid "Reset scale" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "" + +msgid "Reset distance" +msgstr "" + +msgid "Reset rotation" +msgstr "" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "" + +msgid "Mirror vertically" +msgstr "" + +msgid "Mirror horizontally" +msgstr "" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "鏡像" + +msgid "Choose SVG file for emboss:" +msgstr "" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "" + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "" + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "" + +msgid "Vertex" +msgstr "" + +msgid "Edge" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "Point on edge" +msgstr "" + +msgid "Point on circle" +msgstr "" + +msgid "Point on plane" +msgstr "" + +msgid "Center of edge" +msgstr "" + +msgid "Center of circle" +msgstr "" + +msgid "ShiftLeft mouse button" +msgstr "" + +msgid "Select feature" +msgstr "" + +msgid "Select point" +msgstr "" + +msgid "Delete" +msgstr "刪除" + +msgid "Restart selection" +msgstr "" + +msgid "Esc" +msgstr "" + +msgid "Unselect" +msgstr "" + +msgid "Measure" +msgstr "" + +msgid "Edit to scale" +msgstr "" + +msgctxt "Verb" +msgid "Scale" +msgstr "" + +msgid "None" +msgstr "無" + +msgid "Diameter" +msgstr "直徑" + +msgid "Length" +msgstr "長度" + +msgid "Selection" +msgstr "" + +msgid "Copy to clipboard" +msgstr "複製到剪貼簿" + +msgid "Perpendicular distance" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "Direct distance" +msgstr "" + +msgid "Distance XYZ" +msgstr "" + msgid "Ctrl+" msgstr "" @@ -764,9 +1521,6 @@ msgstr "" msgid "Sync user presets" msgstr "" -msgid "Loading" -msgstr "載入中" - msgid "Loading user preset" msgstr "正在載入使用者預設" @@ -797,9 +1551,6 @@ msgstr "選擇一個 G-code 檔案:" msgid "Import File" msgstr "匯入檔案" -msgid "Delete" -msgstr "刪除" - msgid "Choose files" msgstr "選擇檔案" @@ -874,9 +1625,6 @@ msgstr "擦除選項" msgid "Bed adhension" msgstr "熱床黏接" -msgid "Advanced" -msgstr "高級" - #, fuzzy msgid "Add part" msgstr "新增零件" @@ -929,6 +1677,21 @@ msgstr "刪除所選物件" msgid "Load..." msgstr "載入..." +msgid "Cube" +msgstr "立方體" + +msgid "Cylinder" +msgstr "圓柱體" + +msgid "Cone" +msgstr "錐體" + +msgid "Disc" +msgstr "" + +msgid "Torus" +msgstr "" + msgid "Orca Cube" msgstr "Orca 立方體" @@ -941,19 +1704,10 @@ msgstr "Autodesk FDM 測試" msgid "Voron Cube" msgstr "Voron 立方體" -msgid "Cube" -msgstr "立方體" - -msgid "Cylinder" -msgstr "圓柱體" - -msgid "Cone" -msgstr "錐體" - -msgid "Text" +msgid "Stanford Bunny" msgstr "" -msgid "SVG" +msgid "Text" msgstr "" msgid "Height range Modifier" @@ -1090,9 +1844,6 @@ msgstr "沿 Z 軸" msgid "Mirror along the Z axis" msgstr "沿 Z 軸鏡像" -msgid "Mirror" -msgstr "鏡像" - msgid "Mirror object" msgstr "鏡像物件" @@ -1114,6 +1865,9 @@ msgstr "解除切割關係" msgid "Add Primitive" msgstr "新增標準模型" +msgid "Add Handy models" +msgstr "" + msgid "Show Labels" msgstr "顯示標籤" @@ -1367,12 +2121,6 @@ msgstr "高度範圍" msgid "Settings for height range" msgstr "高度範圍設定" -msgid "Object" -msgstr "物件" - -msgid "Part" -msgstr "零件" - msgid "Layer" msgstr "層" @@ -1395,9 +2143,6 @@ msgstr "不允許修改物件中最後一個實體零件的類型。" msgid "Negative Part" msgstr "負零件" -msgid "Modifier" -msgstr "修改器" - msgid "Support Blocker" msgstr "支撐去除器" @@ -1471,9 +2216,6 @@ msgstr "填充密度(%)" msgid "Auto Brim" msgstr "自動Brim(裙邊)" -msgid "Auto" -msgstr "自動" - msgid "Mouse ear" msgstr "圓盤" @@ -1554,9 +2296,6 @@ msgstr "自訂 G-code" msgid "Enter Custom G-code used on current layer:" msgstr "輸入目前層上使用的自訂 G-code:" -msgid "OK" -msgstr "確認" - msgid "Jump to Layer" msgstr "轉換到層" @@ -1612,9 +2351,6 @@ msgstr "無列印設備" msgid "..." msgstr "" -msgid "Failed to connect to the server" -msgstr "無法連接伺服器" - #, fuzzy msgid "Check the status of current system services" msgstr "請檢查目前系統服務狀態" @@ -1622,6 +2358,9 @@ msgstr "請檢查目前系統服務狀態" msgid "code" msgstr "" +msgid "Failed to connect to the server" +msgstr "無法連接伺服器" + msgid "Failed to connect to cloud service" msgstr "無法連接到雲端服務" @@ -2441,9 +3180,6 @@ msgstr "計劃上傳到 `%1%`。請參閱視窗-> 列印設備上傳隊列" msgid "Origin" msgstr "原點" -msgid "Diameter" -msgstr "直徑" - msgid "Size in X and Y of the rectangular plate." msgstr "矩形框在 X 和 Y 方向的尺寸。" @@ -2615,6 +3351,18 @@ msgstr "" "是 - 自動調整這些設定並開啟花瓶模式\n" "否 - 不使用花瓶模式" +msgid "" +"Alternate extra wall only works with ensure vertical shell thickness " +"disabled. " +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Disable ensure vertical shell thickness and enable alternate extra " +"wall\n" +"No - Dont use alternate extra wall" +msgstr "" + msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3008,6 +3756,9 @@ msgstr "時間" msgid "Percent" msgstr "百分比" +msgid "Used filament" +msgstr "使用的線材" + #, fuzzy msgid "Layer Height (mm)" msgstr "層高(mm)" @@ -3030,9 +3781,6 @@ msgstr "溫度(℃)" msgid "Volumetric flow rate (mm³/s)" msgstr "體積流量速度(mm³/s)" -msgid "Used filament" -msgstr "使用的線材" - msgid "Travel" msgstr "空駛" @@ -5261,6 +6009,9 @@ msgstr "登入區域" msgid "Stealth Mode" msgstr "區域網路模式" +msgid "Check for stable updates only" +msgstr "" + msgid "Metric" msgstr "公制" @@ -6168,6 +6919,11 @@ msgstr "" "當使用專用的支撐線材時,我們推薦以下設定:\n" "0 頂層z距離,0 接觸層間距,同心圖案,並且禁用獨立支撐層高" +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" + msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." @@ -6830,15 +7586,18 @@ msgstr "尖端成型線寬" msgid "Ramming line spacing" msgstr "尖端成型線間距" -msgid "Recalculate" +msgid "Auto-Calc" +msgstr "自動計算" + +msgid "Re-calculate" msgstr "" msgid "Flushing volumes for filament change" msgstr "線材更換時產生的廢料體積" msgid "" -"Orca recalculates your flushing volumes everytime the filament colors " -"change. You can change this behavior in Preferences." +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" msgid "Flushing volume (mm³) for each filament pair." @@ -6856,6 +7615,15 @@ msgstr "倍數的數值範圍是[%.2f, %.2f]" msgid "Multiplier" msgstr "倍數" +msgid "unloaded" +msgstr "退料" + +msgid "loaded" +msgstr "進料" + +msgid "Filament #" +msgstr "線材#" + msgid "From" msgstr "從" @@ -6895,9 +7663,6 @@ msgstr "" msgid "Ctrl+Shift+G" msgstr "" -msgid "Copy to clipboard" -msgstr "複製到剪貼簿" - msgid "Paste from clipboard" msgstr "從剪貼簿貼上" @@ -7019,9 +7784,6 @@ msgstr "Shift+方向鍵" msgid "Movement step set to 1 mm" msgstr "沿 X、Y 軸以 1mm 為單位步進移動" -msgid "Esc" -msgstr "" - #, fuzzy msgid "keyboard 1-9: set filament for object/part" msgstr "按鍵 1~9:設定物件/零件的線材" @@ -7071,7 +7833,7 @@ msgstr "SLA 支撐點" msgid "Gizmo FDM paint-on seam" msgstr "FDM 塗裝接縫" -msgid "Swtich between Prepare/Prewview" +msgid "Switch between Prepare/Preview" msgstr "在準備/預覽模式之中切換" msgid "Plater" @@ -7109,9 +7871,6 @@ msgstr "設定物件、零件使用的擠出機編號" msgid "Delete objects, parts, modifiers " msgstr "刪除物件、零件、修改器" -msgid "Space" -msgstr "空格鍵" - msgid "Select the object/part and press space to change the name" msgstr "選取物件、零件,按空格可修改名稱" @@ -7793,11 +8552,11 @@ msgstr "主機名,IP 或者 URL" #, fuzzy msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" msgstr "" "Orca Slicer 可以將 G-code 檔案上傳到列印設備。此欄位應包含列印設備的主機名、" "IP 位址或 URL。啟用基本身份驗證的列印設備可以透過將使用者名稱和密碼放入以下格" @@ -7816,8 +8575,8 @@ msgstr "API Key / 密碼" #, fuzzy msgid "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." msgstr "" "Orca slicer 可以將 G-code 檔案上傳到列印設備。此欄位應包含用於身份驗證的 API " "金鑰或密碼。" @@ -8812,8 +9571,8 @@ msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " "stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" "換色後,新載入的線材在噴嘴內的確切位置可能未知,耗材壓力可能還不穩定。在沖刷" "列印頭到填充或作為擠出廢料之前,將始終將這些的線材沖刷到擦拭塔中以產生連續的" @@ -8991,11 +9750,12 @@ msgstr "稀疏填充錨線長度" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" @@ -9019,11 +9779,12 @@ msgstr "填充錨線的最大長度" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" @@ -9194,9 +9955,6 @@ msgid "" "look. This setting controls the fuzzy position" msgstr "列印外牆時隨機抖動,使外表面產生絨毛效果。這個設定決定適用的位置。" -msgid "None" -msgstr "無" - msgid "Contour" msgstr "輪廓" @@ -9566,6 +10324,18 @@ msgid "" "acceleration to print" msgstr "設備是否支援使用低加速度列印的靜音模式。" +msgid "Emit limits to G-code" +msgstr "" + +#, fuzzy +msgid "Machine limits" +msgstr "設備限制" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" + msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" @@ -9586,10 +10356,6 @@ msgstr "Z最大速度" msgid "Maximum speed E" msgstr "E最大速度" -#, fuzzy -msgid "Machine limits" -msgstr "設備限制" - msgid "Maximum X speed" msgstr "X最大速度" @@ -9818,8 +10584,8 @@ msgstr "主機類型" #, fuzzy msgid "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." msgstr "切片軟體可以將 G-code 檔案上傳到列印設備。此欄位必須包含設備類型。" msgid "Nozzle volume" @@ -9954,11 +10720,25 @@ msgstr "內圈牆列印速度" msgid "Number of walls of every layer" msgstr "每一層的外牆" +msgid "Alternate extra wall" +msgstr "" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " +"argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" "如果您想透過自訂腳本處理輸出的 G-code,只需在此處列出它們的絕對路徑即可。 用" @@ -10033,9 +10813,6 @@ msgstr "換層時回抽" msgid "Force a retraction when changes layer" msgstr "強制在換層時回抽。" -msgid "Length" -msgstr "長度" - msgid "Retraction Length" msgstr "回抽長度" @@ -10218,6 +10995,21 @@ msgstr "" "為了最大限度地減少閉環擠出中接縫的可見性,在擠出機離開環之前,會向內執行一個" "小小的移動。" +msgid "Wipe before external loop" +msgstr "" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" + msgid "Wipe speed" msgstr "擦拭速度" @@ -10920,9 +11712,6 @@ msgstr "清理量" msgid "The volume of material to prime extruder on tower." msgstr "擦拭塔上的清理量" -msgid "Width" -msgstr "寬度" - msgid "Width of prime tower" msgstr "擦拭塔寬度" @@ -11085,8 +11874,8 @@ msgstr "使用相對 E 距離" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " "extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" msgstr "" msgid "" @@ -12343,9 +13132,6 @@ msgstr "" msgid "Create Based on Current Printer" msgstr "" -msgid "wiki" -msgstr "" - msgid "Import Preset" msgstr "" @@ -12518,10 +13304,10 @@ msgstr "" msgid "Export Configs" msgstr "" -msgid "Printer config bundle(.bbscfg)" +msgid "Printer config bundle(.orca_printer)" msgstr "" -msgid "Filament bundle(.bbsflmt)" +msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" @@ -12560,7 +13346,7 @@ msgid "" msgstr "" msgid "" -"Printer and all the filament&process presets that belongs to the printer. \n" +"Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" @@ -12885,6 +13671,19 @@ msgid "" "Did you know that OrcaSlicer can support Air filtration/Exhuast Fan?" msgstr "" +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" + #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" @@ -12892,6 +13691,13 @@ msgid "" "3D scene operations." msgstr "" +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" + #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" @@ -13155,6 +13961,40 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Movement:" +#~ msgstr "移動:" + +#~ msgid "Movement" +#~ msgstr "移動" + +#~ msgid "Auto Segment" +#~ msgstr "自動分割" + +#~ msgid "Depth ratio" +#~ msgstr "深度" + +#~ msgid "Prizm" +#~ msgstr "稜柱" + +#~ msgid "connector is out of cut contour" +#~ msgstr "個連接件超出了切割面範圍" + +#~ msgid "connectors are out of cut contour" +#~ msgstr "個連接件超出了切割面範圍" + +#~ msgid "connector is out of object" +#~ msgstr "個連接件穿透了模型" + +#~ msgid "connectors is out of object" +#~ msgstr "個連接件穿透了模型" + +#~ msgid "" +#~ "Invalid state. \n" +#~ "No one part is selected for keep after cut" +#~ msgstr "" +#~ "無效狀態。\n" +#~ "切割後沒有選取要保留的部分" + #~ msgid "Edit Text" #~ msgstr "編輯文字" @@ -13188,18 +14028,6 @@ msgstr "" #~ msgid "Quick" #~ msgstr "快速的" -#~ msgid "Auto-Calc" -#~ msgstr "自動計算" - -#~ msgid "unloaded" -#~ msgstr "退料" - -#~ msgid "loaded" -#~ msgstr "進料" - -#~ msgid "Filament #" -#~ msgstr "線材#" - #~ msgid "" #~ "Discribe how long the nozzle will move along the last path when retracting" #~ msgstr "表示回抽時擦拭的移動距離。" diff --git a/resources/data/hints.ini b/resources/data/hints.ini index 79cf15785a..bc53887e55 100644 --- a/resources/data/hints.ini +++ b/resources/data/hints.ini @@ -85,9 +85,18 @@ documentation_link = https://github.com/SoftFever/OrcaSlicer/wiki/Auxiliary-fan text = Air filtration/Exhuast Fan\nDid you know that OrcaSlicer can support Air filtration/Exhuast Fan? documentation_link = https://github.com/SoftFever/OrcaSlicer/wiki/air-filtration +[hint:G-code window] +text = G-code window\nYou can turn on/off the G-code window by pressing the C key. + +[hint:Switch workspaces] +text = Switch workspaces\nYou can switch between Prepare and Preview workspaces by pressing the Tab key. + [hint:How to use keyboard shortcuts] text = How to use keyboard shortcuts\nDid you know that Orca Slicer offers a wide range of keyboard shortcuts and 3D scene operations. +[hint:Reverse on odd] +text = Reverse on odd\nDid you know that Reverse on odd feature can significantly improve the surface quality of your overhangs? + [hint:Cut Tool] text = Cut Tool\nDid you know that you can cut a model at any angle and position with the cutting tool? diff --git a/resources/handy_models/Disc.stl b/resources/handy_models/Disc.stl deleted file mode 100644 index f19bf81fff..0000000000 Binary files a/resources/handy_models/Disc.stl and /dev/null differ diff --git a/resources/handy_models/Stanford_Bunny.stl b/resources/handy_models/Stanford_Bunny.stl new file mode 100644 index 0000000000..fbbf2632f8 Binary files /dev/null and b/resources/handy_models/Stanford_Bunny.stl differ diff --git a/resources/handy_models/helper_disk.stl b/resources/handy_models/helper_disk.stl new file mode 100644 index 0000000000..94ab0739c9 Binary files /dev/null and b/resources/handy_models/helper_disk.stl differ diff --git a/resources/handy_models/torus.stl b/resources/handy_models/torus.stl new file mode 100644 index 0000000000..3919fa5b21 Binary files /dev/null and b/resources/handy_models/torus.stl differ diff --git a/resources/profiles/Anker.json b/resources/profiles/Anker.json index 03f208a42b..028b508521 100644 --- a/resources/profiles/Anker.json +++ b/resources/profiles/Anker.json @@ -1,6 +1,6 @@ { "name": "Anker", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Anker configurations", "machine_model_list": [ diff --git a/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json b/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json index 12896d98d1..543ca734b2 100644 --- a/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json @@ -23,10 +23,8 @@ "0x235" ], "printable_height": "250", - "machine_start_gcode": "M4899 T3 ; Enable v3 jerk and S-curve acceleration \nM104 S{first_layer_temperature[0]-30} ; Anti-ooze - Set hotend temp to 30 degrees less than target\nM190 S{first_layer_bed_temperature[0]} ; set and wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; set final nozzle temp to stabilize\nG28 ;Home", - "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84", "layer_change_gcode": "", "scan_first_layer": "0", "nozzle_type": "hardened_steel", "auxiliary_fan": "0" -} +} \ No newline at end of file diff --git a/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json b/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json index f604d3c657..3ca02258de 100644 --- a/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json @@ -23,10 +23,8 @@ "0x220" ], "printable_height": "250", - "machine_start_gcode": "M4899 T3 ; Enable v3 jerk and S-curve acceleration \nM104 S{first_layer_temperature[0]-30} ; Anti-ooze - Set hotend temp to 30 degrees less than target\nM190 S{first_layer_bed_temperature[0]} ; set and wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; set final nozzle temp to stabilize\nG28 ;Home", - "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84", "layer_change_gcode": "", "scan_first_layer": "0", "nozzle_type": "hardened_steel", "auxiliary_fan": "0" -} +} \ No newline at end of file diff --git a/resources/profiles/Anker/machine/fdm_machine_common.json b/resources/profiles/Anker/machine/fdm_machine_common.json index 04cd7af2e7..dc9062982d 100644 --- a/resources/profiles/Anker/machine/fdm_machine_common.json +++ b/resources/profiles/Anker/machine/fdm_machine_common.json @@ -4,9 +4,9 @@ "from": "system", "instantiation": "false", "gcode_flavor": "marlin2", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n", - "machine_start_gcode": "M4899 T3 ; Enable v3 jerk and S-curve acceleration \nM104 Sfirst_layer_temperature[0] ; Set hotend temp\nM190 S{first_layer_bed_temperature[0]} ; set and wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; set final nozzle temp to stabilize\nG28 ;Home", - "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n", + "machine_start_gcode": "M4899 T3 ; Enable v3 jerk and S-curve acceleration \nM104 S150 ; Set hotend temp to 150 degrees to prevent ooze\nM190 S{first_layer_bed_temperature[0]} ; set and wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; set final nozzle temp to stabilize\nG28 ;Home", + "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM18", "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "extruder_colour": [ @@ -117,4 +117,4 @@ "0" ], "z_hop_types": "Normal Lift" -} +} \ No newline at end of file diff --git a/resources/profiles/Anker/process/0.15mm Fast @Anker.json b/resources/profiles/Anker/process/0.15mm Fast @Anker.json index 9b9bbd16b5..f5ba0cff9b 100644 --- a/resources/profiles/Anker/process/0.15mm Fast @Anker.json +++ b/resources/profiles/Anker/process/0.15mm Fast @Anker.json @@ -15,7 +15,6 @@ "support_bottom_z_distance": "0.15", "support_top_z_distance": "0.15", "top_surface_pattern": "monotonic", - "bottom_surface_pattern": "monotonic", "bottom_shell_thickness": "0", "top_shell_thickness": "0", "default_acceleration": "6000", @@ -38,4 +37,4 @@ "Anker M5 0.4 nozzle", "Anker M5C 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Anker/process/0.20mm Fast @Anker.json b/resources/profiles/Anker/process/0.20mm Fast @Anker.json index fee20b385a..38e43bc5d3 100644 --- a/resources/profiles/Anker/process/0.20mm Fast @Anker.json +++ b/resources/profiles/Anker/process/0.20mm Fast @Anker.json @@ -14,7 +14,6 @@ "support_bottom_z_distance": "0.20", "support_top_z_distance": "0.20", "top_surface_pattern": "monotonic", - "bottom_surface_pattern": "monotonic", "bottom_shell_thickness": "0", "top_shell_thickness": "0", "default_acceleration": "6000", @@ -37,4 +36,4 @@ "Anker M5 0.4 nozzle", "Anker M5C 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Anker/process/0.25mm Fast @Anker.json b/resources/profiles/Anker/process/0.25mm Fast @Anker.json index cb397c2288..cfb1cd975b 100644 --- a/resources/profiles/Anker/process/0.25mm Fast @Anker.json +++ b/resources/profiles/Anker/process/0.25mm Fast @Anker.json @@ -14,7 +14,6 @@ "support_bottom_z_distance": "0.25", "support_top_z_distance": "0.25", "top_surface_pattern": "monotonic", - "bottom_surface_pattern": "monotonic", "bottom_shell_thickness": "0", "top_shell_thickness": "0", "default_acceleration": "6000", @@ -37,4 +36,4 @@ "Anker M5 0.4 nozzle", "Anker M5C 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Anker/process/fdm_process_common.json b/resources/profiles/Anker/process/fdm_process_common.json index 2a277cfd01..6e4cbe2d38 100644 --- a/resources/profiles/Anker/process/fdm_process_common.json +++ b/resources/profiles/Anker/process/fdm_process_common.json @@ -6,7 +6,7 @@ "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonicline", + "bottom_surface_pattern": "monotonic", "bottom_shell_thickness": "0.5", "bridge_speed": "50", "bridge_acceleration": "500", @@ -93,8 +93,8 @@ "bottom_shell_layers": "4", "top_shell_layers": "5", "bridge_flow": "0.95", - "initial_layer_speed": "65", - "initial_layer_infill_speed": "125", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "50", "initial_layer_travel_speed": "100%", "outer_wall_speed": "125", "inner_wall_speed": "250", @@ -115,4 +115,4 @@ "outer_wall_jerk": "10", "top_surface_jerk": "12", "travel_jerk": "20" -} +} \ No newline at end of file diff --git a/resources/profiles/Anycubic.json b/resources/profiles/Anycubic.json index cd68215067..e2a96b4aa9 100644 --- a/resources/profiles/Anycubic.json +++ b/resources/profiles/Anycubic.json @@ -1,6 +1,6 @@ { "name": "Anycubic", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Anycubic configurations", "machine_model_list": [ diff --git a/resources/profiles/Artillery.json b/resources/profiles/Artillery.json index 23da2f209e..082cdafabf 100644 --- a/resources/profiles/Artillery.json +++ b/resources/profiles/Artillery.json @@ -1,6 +1,6 @@ { "name": "Artillery", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Artillery configurations", "machine_model_list": [ diff --git a/resources/profiles/BIQU.json b/resources/profiles/BIQU.json index a53d4e315b..3ca0e02e4e 100644 --- a/resources/profiles/BIQU.json +++ b/resources/profiles/BIQU.json @@ -1,6 +1,6 @@ { "name": "BIQU", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "BIQU configurations", "machine_model_list": [ diff --git a/resources/profiles/Comgrow.json b/resources/profiles/Comgrow.json index dc337e7400..b442fdd26b 100644 --- a/resources/profiles/Comgrow.json +++ b/resources/profiles/Comgrow.json @@ -1,6 +1,6 @@ { "name": "Comgrow", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Comgrow configurations", "machine_model_list": [ diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index d38ab3cd18..2d923b8e0c 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ @@ -36,6 +36,14 @@ "name": "Creality Ender-3 S1 Pro", "sub_path": "machine/Creality Ender-3 S1 Pro.json" }, + { + "name": "Creality Ender-3 V3 SE", + "sub_path": "machine/Creality Ender-3 V3 SE.json" + }, + { + "name": "Creality Ender-3 V3 KE", + "sub_path": "machine/Creality Ender-3 V3 KE.json" + }, { "name": "Creality Ender-5", "sub_path": "machine/Creality Ender-5.json" @@ -158,6 +166,14 @@ "name": "0.12mm Fine @Creality Ender3V2", "sub_path": "process/0.12mm Fine @Creality Ender3V2.json" }, + { + "name": "0.12mm Fine @Creality Ender3V3SE", + "sub_path": "process/0.12mm Fine @Creality Ender3V3SE.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3KE", + "sub_path": "process/0.12mm Fine @Creality Ender3V3KE.json" + }, { "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.2", "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.2.json" @@ -198,6 +214,14 @@ "name": "0.16mm Optimal @Creality Ender3S1Pro", "sub_path": "process/0.16mm Optimal @Creality Ender3S1Pro.json" }, + { + "name": "0.16mm Optimal @Creality Ender3V3SE", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3KE", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3KE.json" + }, { "name": "0.16mm Optimal @Creality Ender5", "sub_path": "process/0.16mm Optimal @Creality Ender5.json" @@ -282,6 +306,14 @@ "name": "0.20mm Standard @Creality Ender3S1Pro", "sub_path": "process/0.20mm Standard @Creality Ender3S1Pro.json" }, + { + "name": "0.20mm Standard @Creality Ender3V3SE", + "sub_path": "process/0.20mm Standard @Creality Ender3V3SE.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3KE", + "sub_path": "process/0.20mm Standard @Creality Ender3V3KE.json" + }, { "name": "0.20mm Standard @Creality Ender5", "sub_path": "process/0.20mm Standard @Creality Ender5.json" @@ -508,18 +540,6 @@ "name": "fdm_filament_common", "sub_path": "filament/fdm_filament_common.json" }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, { "name": "fdm_filament_abs", "sub_path": "filament/fdm_filament_abs.json" @@ -528,6 +548,30 @@ "name": "fdm_filament_asa", "sub_path": "filament/fdm_filament_asa.json" }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "Creality Generic ABS", + "sub_path": "filament/Creality Generic ABS.json" + }, + { + "name": "Creality Generic ASA", + "sub_path": "filament/Creality Generic ASA.json" + }, + { + "name": "Creality Generic PETG", + "sub_path": "filament/Creality Generic PETG.json" + }, { "name": "Creality Generic PLA", "sub_path": "filament/Creality Generic PLA.json" @@ -540,21 +584,41 @@ "name": "Creality HF Generic Speed PLA", "sub_path": "filament/Creality HF Generic Speed PLA.json" }, - { - "name": "Creality Generic PETG", - "sub_path": "filament/Creality Generic PETG.json" - }, { "name": "Creality Generic TPU", "sub_path": "filament/Creality Generic TPU.json" }, { - "name": "Creality Generic ABS", - "sub_path": "filament/Creality Generic ABS.json" + "name": "Creality Generic ABS @Ender-3V3-all", + "sub_path": "filament/Creality Generic ABS @Ender-3V3-all.json" }, { - "name": "Creality Generic ASA", - "sub_path": "filament/Creality Generic ASA.json" + "name": "Creality Generic ASA @Ender-3V3-all", + "sub_path": "filament/Creality Generic ASA @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PETG @Ender-3V3-all", + "sub_path": "filament/Creality Generic PETG @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA High Speed @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA High Speed @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA Matte @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA Matte @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA Silk @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA Silk @Ender-3V3-all.json" + }, + { + "name": "Creality Generic TPU @Ender-3V3-all", + "sub_path": "filament/Creality Generic TPU @Ender-3V3-all.json" } ], "machine_list": [ @@ -626,6 +690,14 @@ "name": "Creality Ender-3 S1 Pro 0.4 nozzle", "sub_path": "machine/Creality Ender-3 S1 Pro 0.4 nozzle.json" }, + { + "name": "Creality Ender-3 V3 SE 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V3 SE 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V3 KE 0.4 nozzle.json" + }, { "name": "Creality Ender-5 0.4 nozzle", "sub_path": "machine/Creality Ender-5 0.4 nozzle.json" diff --git a/resources/profiles/Creality/Creality Ender-3 V3 KE_cover.png b/resources/profiles/Creality/Creality Ender-3 V3 KE_cover.png new file mode 100644 index 0000000000..f998ef0a0f Binary files /dev/null and b/resources/profiles/Creality/Creality Ender-3 V3 KE_cover.png differ diff --git a/resources/profiles/Creality/Creality Ender-3 V3 SE_cover.png b/resources/profiles/Creality/Creality Ender-3 V3 SE_cover.png new file mode 100644 index 0000000000..27bb29a209 Binary files /dev/null and b/resources/profiles/Creality/Creality Ender-3 V3 SE_cover.png differ diff --git a/resources/profiles/Creality/Ender-3 V3 KE_cover.png b/resources/profiles/Creality/Ender-3 V3 KE_cover.png new file mode 100644 index 0000000000..f998ef0a0f Binary files /dev/null and b/resources/profiles/Creality/Ender-3 V3 KE_cover.png differ diff --git a/resources/profiles/Creality/creality_ender3v3ke_buildplate_model.stl b/resources/profiles/Creality/creality_ender3v3ke_buildplate_model.stl new file mode 100644 index 0000000000..a3837d2b59 Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3ke_buildplate_model.stl differ diff --git a/resources/profiles/Creality/creality_ender3v3ke_buildplate_texture.png b/resources/profiles/Creality/creality_ender3v3ke_buildplate_texture.png new file mode 100644 index 0000000000..60f628fe6d Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3ke_buildplate_texture.png differ diff --git a/resources/profiles/Creality/creality_ender3v3se_buildplate_model.stl b/resources/profiles/Creality/creality_ender3v3se_buildplate_model.stl new file mode 100644 index 0000000000..a3837d2b59 Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3se_buildplate_model.stl differ diff --git a/resources/profiles/Creality/creality_ender3v3se_buildplate_texture.png b/resources/profiles/Creality/creality_ender3v3se_buildplate_texture.png new file mode 100644 index 0000000000..60f628fe6d Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3se_buildplate_texture.png differ diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json new file mode 100644 index 0000000000..5ec085011a --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "GFSA04_CREALITY_00", + "name": "Creality Generic ABS @Ender-3V3-all", + "from": "system", + "instantiation": "true", + "inherits": "Creality Generic ABS", + "filament_max_volumetric_speed": ["9"], + "slow_down_layer_time": ["5"], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json new file mode 100644 index 0000000000..6778d2f3c1 --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "GFSA04_00", + "name": "Creality Generic ASA @Ender-3V3-all", + "from": "system", + "instantiation": "true", + "inherits": "Creality Generic ASA", + "filament_max_volumetric_speed": ["9"], + "slow_down_layer_time": ["5"], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json new file mode 100644 index 0000000000..e3f120dd15 --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "setting_id": "GFSG99_00", + "name": "Creality Generic PETG @Ender-3V3-all", + "from": "system", + "instantiation": "true", + "inherits": "Creality Generic PETG", + "filament_max_volumetric_speed": ["9"], + "slow_down_layer_time": ["5"], + "cool_plate_temp" : ["70"], + "eng_plate_temp" : ["70"], + "hot_plate_temp" : ["70"], + "textured_plate_temp" : ["70"], + "cool_plate_temp_initial_layer" : ["70"], + "eng_plate_temp_initial_layer" : ["70"], + "hot_plate_temp_initial_layer" : ["70"], + "textured_plate_temp_initial_layer" : ["70"], + "nozzle_temperature_initial_layer": ["250"], + "nozzle_temperature": ["250"], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json new file mode 100644 index 0000000000..e8080d2701 --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "setting_id": "GFSL99_00", + "name": "Creality Generic PLA @Ender-3V3-all", + "from": "system", + "instantiation": "true", + "inherits": "Creality Generic PLA", + "filament_max_volumetric_speed": ["18"], + "slow_down_min_speed": ["20"], + "cool_plate_temp" : ["45"], + "eng_plate_temp" : ["45"], + "hot_plate_temp" : ["45"], + "textured_plate_temp" : ["45"], + "cool_plate_temp_initial_layer" : ["45"], + "eng_plate_temp_initial_layer" : ["45"], + "hot_plate_temp_initial_layer" : ["45"], + "textured_plate_temp_initial_layer" : ["45"], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json new file mode 100644 index 0000000000..cdde5f2a36 --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "setting_id": "GFSL95_00", + "name": "Creality Generic PLA High Speed @Ender-3V3-all", + "from": "system", + "instantiation": "true", + "inherits": "Creality Generic PLA @Ender-3V3-all", + "filament_max_volumetric_speed": [ + "23" + ], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json new file mode 100644 index 0000000000..13bedf73fe --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "setting_id": "GFSL05_00", + "name": "Creality Generic PLA Matte @Ender-3V3-all", + "from": "system", + "instantiation": "true", + "inherits": "Creality Generic PLA @Ender-3V3-all", + "filament_max_volumetric_speed": ["18"], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json new file mode 100644 index 0000000000..276f81d671 --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "setting_id": "GFSL96_00", + "name": "Creality Generic PLA Silk @Ender-3V3-all", + "from": "system", + "instantiation": "true", + "inherits": "Creality Generic PLA @Ender-3V3-all", + "filament_max_volumetric_speed": ["7.5"], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json new file mode 100644 index 0000000000..5b1d6cf665 --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "GFU99_CREALITY_00", + "name": "Creality Generic TPU @Ender-3V3-all", + "from": "system", + "instantiation": "true", + "inherits": "Creality Generic TPU", + "hot_plate_temp": ["30"], + "hot_plate_temp_initial_layer": ["30"], + "textured_plate_temp": ["30"], + "textured_plate_temp_initial_layer": ["30"], + "nozzle_temperature_initial_layer": ["230"], + "nozzle_temperature": ["230"], + "filament_max_volumetric_speed": ["3.5"], + "slow_down_layer_time": ["5"], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic TPU.json b/resources/profiles/Creality/filament/Creality Generic TPU.json index 09f053dd5b..c7070ec933 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU.json @@ -10,6 +10,7 @@ "3.2" ], "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle", "Creality K1 (0.4 nozzle)", "Creality K1 (0.6 nozzle)", "Creality K1 (0.8 nozzle)", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json new file mode 100644 index 0000000000..46b1a94c2b --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json @@ -0,0 +1,121 @@ +{ + "type": "machine", + "setting_id": "GM001", + "printer_settings_id": "Creality", + "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-3 V3 KE", + "gcode_flavor": "klipper", + "printer_structure": "i3", + "default_print_profile": "0.20mm Standard @Creality Ender3V3KE", + "extruder_clearance_height_to_rod": "47", + "extruder_clearance_max_radius": "90", + "extruder_clearance_radius": "90", + "machine_load_filament_time": "11", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "240", + "nozzle_type": "brass", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "8000", + "8000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "8000", + "8000" + ], + "machine_max_acceleration_x": [ + "8000", + "8000" + ], + "machine_max_acceleration_y": [ + "8000", + "8000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "30", + "30" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "10", + "10" + ], + "machine_max_jerk_y": [ + "10", + "10" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.36" + ], + "min_layer_height": [ + "0.08" + ], + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "z_hop": [ + "0.1" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "M25", + "default_filament_profile": [ + "Creality Generic PLA @Ender-3V3-all" + ], + "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.0 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.0 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-1.7 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-1.7 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", + "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z5 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", + "scan_first_layer": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json new file mode 100644 index 0000000000..8650ce5129 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Creality Ender-3 V3 KE", + "model_id": "Creality-Ender3-V3-KE", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Creality", + "bed_model": "creality_ender3v3ke_buildplate_model.stl", + "bed_texture": "creality_ender3v3ke_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json new file mode 100644 index 0000000000..c27d1185e8 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "machine", + "setting_id": "GM001", + "printer_settings_id": "Creality", + "name": "Creality Ender-3 V3 SE 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-3 V3 SE", + "gcode_flavor": "marlin2", + "printer_structure": "i3", + "default_print_profile": "0.20mm Standard @Creality Ender3V3SE", + "extruder_clearance_height_to_rod": "47", + "extruder_clearance_max_radius": "90", + "extruder_clearance_radius": "90", + "machine_load_filament_time": "11", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "brass", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "5000", + "5000" + ], + "machine_max_acceleration_retracting": [ + "2500", + "2500" + ], + "machine_max_acceleration_travel": [ + "5000", + "5000" + ], + "machine_max_acceleration_x": [ + "5000", + "5000" + ], + "machine_max_acceleration_y": [ + "5000", + "5000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "30", + "30" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "10", + "10" + ], + "machine_max_jerk_y": [ + "10", + "10" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.36" + ], + "min_layer_height": [ + "0.08" + ], + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "1.2" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "30" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M25", + "default_filament_profile": [ + "Creality Generic PLA @Ender-3V3-all" + ], + "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", + "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y0 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", + "scan_first_layer": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json new file mode 100644 index 0000000000..53f04988ac --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Creality Ender-3 V3 SE", + "model_id": "Creality-Ender3-V3-SE", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Creality", + "bed_model": "creality_ender3v3se_buildplate_model.stl", + "bed_texture": "creality_ender3v3se_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json index 796e8dcf60..3653176f06 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json @@ -14,6 +14,7 @@ "printable_height": "300", "nozzle_type": "hardened_steel", "auxiliary_fan": "1", + "support_air_filtration": "1", "machine_max_acceleration_e": ["5000", "5000"], "machine_max_acceleration_extruding": ["20000", "20000"], "machine_max_acceleration_retracting": ["5000", "5000"], diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json index 545a15fd9b..e5d88cba7e 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json @@ -14,6 +14,7 @@ "printable_height": "300", "nozzle_type": "hardened_steel", "auxiliary_fan": "1", + "support_air_filtration": "1", "machine_max_acceleration_e": ["5000", "5000"], "machine_max_acceleration_extruding": ["20000", "20000"], "machine_max_acceleration_retracting": ["5000", "5000"], diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json index cdaccf13ea..38daeeb4a1 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json @@ -14,6 +14,7 @@ "printable_height": "300", "nozzle_type": "hardened_steel", "auxiliary_fan": "1", + "support_air_filtration": "1", "machine_max_acceleration_e": ["5000", "5000"], "machine_max_acceleration_extruding": ["20000", "20000"], "machine_max_acceleration_retracting": ["5000", "5000"], diff --git a/resources/profiles/Creality/machine/fdm_machine_common.json b/resources/profiles/Creality/machine/fdm_machine_common.json index 1f9aa54cd4..6bf00c7418 100644 --- a/resources/profiles/Creality/machine/fdm_machine_common.json +++ b/resources/profiles/Creality/machine/fdm_machine_common.json @@ -15,6 +15,8 @@ ], "gcode_flavor": "marlin", "silent_mode": "0", + "support_chamber_temp_control": "0", + "support_air_filtration": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json new file mode 100644 index 0000000000..26c440b476 --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @Creality Ender3V3KE", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.12", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "100", + "brim_type": "no_brim", + "brim_width": "0", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "2000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.42", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "200", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "200", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "300", + "top_surface_speed": "200", + "gap_infill_speed": "100", + "sparse_infill_speed": "300", + "travel_speed": "300", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "30", + "outer_wall_jerk": "30", + "inner_wall_jerk": "30", + "infill_jerk": "30", + "top_surface_jerk": "15", + "initial_layer_jerk": "15", + "travel_jerk": "30", + "compatible_printers": [ + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE.json new file mode 100644 index 0000000000..b25d7c6103 --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @Creality Ender3V3SE", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.12", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "100", + "brim_type": "no_brim", + "brim_width": "0", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "2500", + "top_surface_acceleration": "2500", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.46", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "2500", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1000", + "initial_layer_line_width": "0.46", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "20", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "50", + "support_threshold_angle": "25", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "2", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.42", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "80", + "outer_wall_speed": "60", + "inner_wall_speed": "90", + "internal_solid_infill_speed": "180", + "top_surface_speed": "50", + "gap_infill_speed": "50", + "sparse_infill_speed": "180", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "8", + "outer_wall_jerk": "20", + "inner_wall_jerk": "20", + "infill_jerk": "20", + "top_surface_jerk": "20", + "initial_layer_jerk": "8", + "travel_jerk": "8", + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json new file mode 100644 index 0000000000..1d4f167023 --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality Ender3V3KE", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "100", + "brim_type": "no_brim", + "brim_width": "0", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "2000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.42", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "4", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "200", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "200", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "300", + "top_surface_speed": "200", + "gap_infill_speed": "100", + "sparse_infill_speed": "300", + "travel_speed": "300", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "30", + "outer_wall_jerk": "30", + "inner_wall_jerk": "30", + "infill_jerk": "30", + "top_surface_jerk": "15", + "initial_layer_jerk": "15", + "travel_jerk": "30", + "compatible_printers": [ + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE.json new file mode 100644 index 0000000000..ea79adc6a6 --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality Ender3V3SE", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "100", + "brim_type": "no_brim", + "brim_width": "0", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "2500", + "top_surface_acceleration": "2500", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.46", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "2500", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1000", + "initial_layer_line_width": "0.46", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "20", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "50", + "support_threshold_angle": "25", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "2", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.42", + "top_shell_layers": "6", + "top_shell_thickness": "0.8", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "80", + "outer_wall_speed": "60", + "inner_wall_speed": "90", + "internal_solid_infill_speed": "180", + "top_surface_speed": "50", + "gap_infill_speed": "50", + "sparse_infill_speed": "180", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "8", + "outer_wall_jerk": "20", + "inner_wall_jerk": "20", + "infill_jerk": "20", + "top_surface_jerk": "20", + "initial_layer_jerk": "8", + "travel_jerk": "8", + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json new file mode 100644 index 0000000000..82b6a978ce --- /dev/null +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality Ender3V3KE", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "100", + "brim_type": "no_brim", + "brim_width": "0", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "2000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.42", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "200", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "200", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "300", + "top_surface_speed": "200", + "gap_infill_speed": "100", + "sparse_infill_speed": "300", + "travel_speed": "300", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "30", + "outer_wall_jerk": "30", + "inner_wall_jerk": "30", + "infill_jerk": "30", + "top_surface_jerk": "15", + "initial_layer_jerk": "15", + "travel_jerk": "30", + "compatible_printers": [ + "Creality Ender-3 V3 KE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE.json new file mode 100644 index 0000000000..258e85ce14 --- /dev/null +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality Ender3V3SE", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "100", + "brim_type": "no_brim", + "brim_width": "0", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "2500", + "top_surface_acceleration": "2500", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.46", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "2500", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1000", + "initial_layer_line_width": "0.46", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "20", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "50", + "support_threshold_angle": "25", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "2", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.42", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "80", + "outer_wall_speed": "60", + "inner_wall_speed": "90", + "internal_solid_infill_speed": "180", + "top_surface_speed": "50", + "gap_infill_speed": "50", + "sparse_infill_speed": "180", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "8", + "outer_wall_jerk": "20", + "inner_wall_jerk": "20", + "infill_jerk": "20", + "top_surface_jerk": "20", + "initial_layer_jerk": "8", + "travel_jerk": "8", + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/fdm_process_common_klipper.json b/resources/profiles/Creality/process/fdm_process_common_klipper.json index a8db062d3a..303888b0f2 100644 --- a/resources/profiles/Creality/process/fdm_process_common_klipper.json +++ b/resources/profiles/Creality/process/fdm_process_common_klipper.json @@ -10,5 +10,7 @@ "infill_jerk": "12", "travel_jerk": "12", "inner_wall_jerk": "7", - "top_surface_jerk": "7" + "top_surface_jerk": "7", + "exclude_object": "1" + } diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index 22e2f992bc..359ccee16c 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "My configurations", "machine_model_list": [ diff --git a/resources/profiles/Custom/process/fdm_process_klipper_common.json b/resources/profiles/Custom/process/fdm_process_klipper_common.json index becc3fadd8..4c2320391c 100644 --- a/resources/profiles/Custom/process/fdm_process_klipper_common.json +++ b/resources/profiles/Custom/process/fdm_process_klipper_common.json @@ -104,5 +104,6 @@ "enable_arc_fitting": "0", "compatible_printers": [ "MyKlipper 0.4 nozzle" - ] + ], + "exclude_object": "1" } diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index e30ab95459..99655e321c 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1,6 +1,6 @@ { "name": "Elegoo", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Elegoo configurations", "machine_model_list": [ diff --git a/resources/profiles/Elegoo/elegoo_neptune3max_buildplate_texture.png b/resources/profiles/Elegoo/elegoo_neptune3max_buildplate_texture.png deleted file mode 100644 index 9c18cff6e1..0000000000 Binary files a/resources/profiles/Elegoo/elegoo_neptune3max_buildplate_texture.png and /dev/null differ diff --git a/resources/profiles/Elegoo/elegoo_neptune_max_buildplate_texture.png b/resources/profiles/Elegoo/elegoo_neptune_max_buildplate_texture.png new file mode 100644 index 0000000000..87965e7c40 Binary files /dev/null and b/resources/profiles/Elegoo/elegoo_neptune_max_buildplate_texture.png differ diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max.json index a7c765272d..1a4e152f31 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max.json @@ -6,7 +6,7 @@ "machine_tech": "FFF", "family": "Elegoo", "bed_model": "elegoo_neptune3max_buildplate_model.stl", - "bed_texture": "elegoo_neptune3max_buildplate_texture.png", + "bed_texture": "elegoo_neptune_max_buildplate_texture.png", "hotend_model": "", "default_materials": "Elegoo Generic ABS;Elegoo Generic PETG;Elegoo Generic PLA" } diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 4 Max.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 4 Max.json index 5b4bb74450..0fa4bdef74 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 4 Max.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 4 Max.json @@ -6,7 +6,7 @@ "machine_tech": "FFF", "family": "Elegoo", "bed_model": "elegoo_neptune4max_buildplate_model.stl", - "bed_texture": "elegoo_neptune4max_buildplate_texture.png", + "bed_texture": "elegoo_neptune_max_buildplate_texture.png", "bed_exclude_area": ["0x0"], "hotend_model": "", "default_materials": "Elegoo Generic PLA @0.2 nozzle;Elegoo Generic PETG @0.2 nozzle;Elegoo Generic ABS @0.2 nozzle;Elegoo Generic PLA @0.4 nozzle;Elegoo Generic PETG @0.4 nozzle;Elegoo Generic ABS @0.4 nozzle;Elegoo Generic PLA @0.6 nozzle;Elegoo Generic PETG @0.6 nozzle;Elegoo Generic ABS @0.6 nozzle;Elegoo Generic PLA @0.8 nozzle;Elegoo Generic PETG @0.8 nozzle;Elegoo Generic ABS @0.8 nozzle" diff --git a/resources/profiles/Elegoo/process/fdm_process_neptune4_common.json b/resources/profiles/Elegoo/process/fdm_process_neptune4_common.json index c73984923d..c3d1c3fecd 100644 --- a/resources/profiles/Elegoo/process/fdm_process_neptune4_common.json +++ b/resources/profiles/Elegoo/process/fdm_process_neptune4_common.json @@ -110,5 +110,6 @@ "top_surface_speed": "120", "gap_infill_speed": "120", "sparse_infill_speed": "200", - "travel_speed": "350" + "travel_speed": "350", + "exclude_object": "1" } diff --git a/resources/profiles/Elegoo/process/fdm_process_neptune4max_common.json b/resources/profiles/Elegoo/process/fdm_process_neptune4max_common.json index 0b144d5bd3..fcf8ecb5f8 100644 --- a/resources/profiles/Elegoo/process/fdm_process_neptune4max_common.json +++ b/resources/profiles/Elegoo/process/fdm_process_neptune4max_common.json @@ -30,5 +30,6 @@ "top_surface_speed": "120", "gap_infill_speed": "120", "sparse_infill_speed": "200", - "travel_speed": "300" + "travel_speed": "300", + "exclude_object": "1" } diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 4f625b16ff..0edbaa970c 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,6 +1,6 @@ { "name": "FLSun", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "FLSun configurations", "machine_model_list": [ diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun V400.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun V400.json index da496e4f9c..87a5547808 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun V400.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun V400.json @@ -25,5 +25,6 @@ "travel_speed": "400", "compatible_printers": [ "FLSun V400 0.4 nozzle" - ] + ], + "exclude_object": "1" } \ No newline at end of file diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index f00dcda629..1f59d17123 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ diff --git a/resources/profiles/FlyingBear.json b/resources/profiles/FlyingBear.json index 459c90879c..80137fac57 100644 --- a/resources/profiles/FlyingBear.json +++ b/resources/profiles/FlyingBear.json @@ -1,6 +1,6 @@ { "name": "FlyingBear", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "1", "description": "FlyingBear configurations", "machine_model_list": [ diff --git a/resources/profiles/Folgertech.json b/resources/profiles/Folgertech.json index 4f03d71bd3..fc5281c992 100644 --- a/resources/profiles/Folgertech.json +++ b/resources/profiles/Folgertech.json @@ -1,6 +1,6 @@ { "name": "Folgertech", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Folgertech configurations", "machine_model_list": [ diff --git a/resources/profiles/InfiMech.json b/resources/profiles/InfiMech.json index 911dfb5499..1d292cc030 100644 --- a/resources/profiles/InfiMech.json +++ b/resources/profiles/InfiMech.json @@ -1,6 +1,6 @@ { "name": "InfiMech", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "1", "description": "InfiMech configurations", "machine_model_list": [ diff --git a/resources/profiles/InfiMech/process/fdm_process_common.json b/resources/profiles/InfiMech/process/fdm_process_common.json index 23eb9cf92e..f878701719 100644 --- a/resources/profiles/InfiMech/process/fdm_process_common.json +++ b/resources/profiles/InfiMech/process/fdm_process_common.json @@ -219,5 +219,6 @@ "70" ], "xy_contour_compensation": "0", - "xy_hole_compensation": "0" + "xy_hole_compensation": "0", + "exclude_object": "1" } \ No newline at end of file diff --git a/resources/profiles/Kingroon.json b/resources/profiles/Kingroon.json index 78eacdbdff..32e023c2f6 100644 --- a/resources/profiles/Kingroon.json +++ b/resources/profiles/Kingroon.json @@ -1,7 +1,7 @@ { "name": "Kingroon", "url": "https://kingroon.com/", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Kingroon configuration files", "machine_model_list": [ diff --git a/resources/profiles/OrcaArena.json b/resources/profiles/OrcaArena.json index c9534b1faf..4cbac7f8a7 100644 --- a/resources/profiles/OrcaArena.json +++ b/resources/profiles/OrcaArena.json @@ -1,7 +1,7 @@ { "name": "Orca Arena Printer", "url": "", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Orca Arena configuration files", "machine_model_list": [ diff --git a/resources/profiles/OrcaArena/process/fdm_process_common.json b/resources/profiles/OrcaArena/process/fdm_process_common.json index 4d18e9d5aa..3280c0ff27 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_common.json +++ b/resources/profiles/OrcaArena/process/fdm_process_common.json @@ -67,5 +67,6 @@ "enable_prime_tower": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", - "xy_contour_compensation": "0" + "xy_contour_compensation": "0", + "exclude_object": "1" } diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index d1e2e0cf35..7919d2433e 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1,6 +1,6 @@ { "name": "Prusa", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Prusa configurations", "machine_model_list": [ diff --git a/resources/profiles/Prusa/mk4is.svg b/resources/profiles/Prusa/mk4is.svg index 2c99da4f8a..1e1a192ee3 100644 --- a/resources/profiles/Prusa/mk4is.svg +++ b/resources/profiles/Prusa/mk4is.svg @@ -1,45 +1,155 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - - - - \ No newline at end of file + diff --git a/resources/profiles/Prusa/process/process_common_mk4.json b/resources/profiles/Prusa/process/process_common_mk4.json index ed70e11092..87a4a69d9f 100644 --- a/resources/profiles/Prusa/process/process_common_mk4.json +++ b/resources/profiles/Prusa/process/process_common_mk4.json @@ -24,5 +24,6 @@ "top_surface_acceleration": "1000", "travel_acceleration": "4000", "inner_wall_acceleration": "4000", - "outer_wall_acceleration": "3000" + "outer_wall_acceleration": "3000", + "exclude_object": "1" } \ No newline at end of file diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index 4631991b9f..0526426595 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ @@ -579,6 +579,14 @@ { "name": "QIDI ABS-GF10", "sub_path": "filament/QIDI ABS-GF10.json" + }, + { + "name": "Qidi PC-ABS-FR", + "sub_path": "filament/Qidi PC-ABS-FR.json" + }, + { + "name": "Qidi ASA-Aero", + "sub_path": "filament/Qidi ASA-Aero.json" } ], "machine_list": [ diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10.json index 9a85b0da85..baf5860ade 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10.json @@ -6,19 +6,38 @@ "from": "system", "instantiation": "true", "inherits": "QIDI ABS-GF25", - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "pressure_advance": [ - "0.02" - ] + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] } diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25.json index 37caa1c617..3c5b8af588 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25.json @@ -7,7 +7,7 @@ "instantiation": "true", "inherits": "fdm_filament_abs", "filament_flow_ratio": [ - "0.8" + "0.9" ], "filament_max_volumetric_speed": [ "15" @@ -42,14 +42,14 @@ "Qidi X-Max 3 0.4 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero.json new file mode 100644 index 0000000000..b787a87052 --- /dev/null +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero.json @@ -0,0 +1,76 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "Qidi ASA-Aero", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_flow_ratio": [ + "0.7" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "270" + ], + "cool_plate_temp" : [ + "90" + ], + "eng_plate_temp" : [ + "90" + ], + "hot_plate_temp" : [ + "90" + ], + "textured_plate_temp" : [ + "90" + ], + "cool_plate_temp_initial_layer" : [ + "90" + ], + "eng_plate_temp_initial_layer" : [ + "90" + ], + "hot_plate_temp_initial_layer" : [ + "90" + ], + "textured_plate_temp_initial_layer" : [ + "90" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_retraction_length": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\nM141 S60\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS.json b/resources/profiles/Qidi/filament/Qidi Generic ABS.json index 4c403010f7..654d210039 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS.json @@ -27,17 +27,17 @@ "Qidi X-Max 3 0.4 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi X-Smart 3 0.2 nozzle", - "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle" + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA.json b/resources/profiles/Qidi/filament/Qidi Generic ASA.json index e2829e179c..087a82c5f3 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA.json @@ -36,17 +36,17 @@ "Qidi X-Max 3 0.4 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi X-Smart 3 0.2 nozzle", - "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle" + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json index ae06eb1e20..5ce25897a5 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json @@ -7,58 +7,58 @@ "instantiation": "true", "inherits": "fdm_filament_pa", "filament_type": [ - "PA-CF" + "PA-CF" ], "nozzle_temperature_initial_layer": [ - "290" + "290" ], "nozzle_temperature": [ - "290" + "290" ], "filament_max_volumetric_speed": [ - "8" + "8" ], "fan_max_speed": [ - "30" + "30" ], "fan_min_speed": [ - "10" + "10" ], "overhang_fan_threshold": [ - "0%" + "0%" ], "overhang_fan_speed": [ - "40" + "40" ], "fan_cooling_layer_time": [ - "5" + "5" ], "full_fan_speed_layer": [ - "2" + "2" ], "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.01" - ], + "1" + ], + "pressure_advance": [ + "0.01" + ], "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Max 0.6 nozzle", - "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", -"Qidi X-Smart 3 0.8 nozzle", -"Qidi X-Plus 3 0.8 nozzle", -"Qidi X-Max 3 0.8 nozzle" + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Qidi Generic PA.json b/resources/profiles/Qidi/filament/Qidi Generic PA.json index 7f7b60568b..6addf23fd5 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PA.json @@ -7,43 +7,43 @@ "instantiation": "true", "inherits": "fdm_filament_pa", "required_nozzle_HRC": [ - "3" + "3" ], "nozzle_temperature_initial_layer": [ - "280" + "280" ], "nozzle_temperature": [ - "280" + "280" ], "filament_max_volumetric_speed": [ - "16" + "16" ], "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.03" - ], + "1" + ], + "pressure_advance": [ + "0.03" + ], "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", -"Qidi X-Smart 3 0.4 nozzle", -"Qidi X-Plus 3 0.4 nozzle", -"Qidi X-Max 3 0.4 nozzle", - "Qidi X-Max 0.6 nozzle", - "Qidi X-CF Pro 0.6 nozzle", -"Qidi X-Smart 3 0.6 nozzle", -"Qidi X-Plus 3 0.6 nozzle", -"Qidi X-Max 3 0.6 nozzle", -"Qidi X-Plus 0.8 nozzle", -"Qidi X-Max 0.8 nozzle", -"Qidi X-CF Pro 0.8 nozzle", -"Qidi X-Smart 3 0.8 nozzle", -"Qidi X-Plus 3 0.8 nozzle", -"Qidi X-Max 3 0.8 nozzle" - ] -} + "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC.json b/resources/profiles/Qidi/filament/Qidi Generic PC.json index 7fbf2480c6..b2a129e2bd 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC.json @@ -1,12 +1,12 @@ { - "type": "filament", - "filament_id": "GFC99", - "setting_id": "GFSC99", - "name": "Qidi Generic PC", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pc", - "filament_max_volumetric_speed": [ + "type": "filament", + "filament_id": "GFC99", + "setting_id": "GFSC99", + "name": "Qidi Generic PC", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ "5" ], "filament_flow_ratio": [ @@ -21,23 +21,23 @@ "pressure_advance": [ "0.04" ], - "compatible_printers": [ + "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" - ] -} + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json index 6bdeba6607..87612bdc00 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json @@ -1,112 +1,112 @@ { - "type": "filament", - "filament_id": "GFG98", - "setting_id": "GFSG50", - "name": "Qidi Generic PETG-CF", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pet", - "temperature_vitrification": [ - "75" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "90" - ], - "cool_plate_temp": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "hot_plate_temp": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "required_nozzle_HRC": [ - "40" - ], - "filament_vendor": [ - "Other brand" - ], - "filament_type": [ - "PETG-CF" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_cost": [ - "34.99" - ], - "filament_density": [ - "1.25" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "slow_down_layer_time": [ - "6" - ], - "enable_pressure_advance": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_flow_ratio": [ - "0.95" - ], - "pressure_advance": [ - "0.05" - ], - "compatible_printers": [ + "type": "filament", + "filament_id": "GFG98", + "setting_id": "GFSG50", + "name": "Qidi Generic PETG-CF", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "temperature_vitrification": [ + "75" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "90" + ], + "cool_plate_temp": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "required_nozzle_HRC": [ + "40" + ], + "filament_vendor": [ + "Other brand" + ], + "filament_type": [ + "PETG-CF" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_cost": [ + "34.99" + ], + "filament_density": [ + "1.25" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "slow_down_layer_time": [ + "6" + ], + "enable_pressure_advance": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_flow_ratio": [ + "0.95" + ], + "pressure_advance": [ + "0.05" + ], + "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" - ] + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json new file mode 100644 index 0000000000..4098bb90e2 --- /dev/null +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "Qidi PC-ABS-FR", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.92" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "overhang_fan_speed": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\nM141 S55\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/fdm_filament_pla.json b/resources/profiles/Qidi/filament/fdm_filament_pla.json index 8a82c3711e..6e162b00f9 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_pla.json +++ b/resources/profiles/Qidi/filament/fdm_filament_pla.json @@ -89,6 +89,6 @@ "4" ], "additional_cooling_fan_speed": [ - "100" + "0" ] } diff --git a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json index ec54672826..72a7072c25 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json @@ -19,7 +19,7 @@ "0.4" ], "thumbnails": [ - "380x380", + "64x64", "210x210" ], "thumbnails_format": "ColPic", diff --git a/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json b/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json index 9116f0f02f..d706d7012e 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json @@ -114,5 +114,6 @@ "internal_solid_infill_pattern": "monotonic", "initial_layer_travel_speed": "50%", "filter_out_gap_fill": "2", - "notes": "If you want to use Orca's chamber temperature control feature, check that printer.cfg has added the following M191 macro.\nTo add it: go to Fluidd web interface--configuration, copy the following code to the top of the printer.cfg document, SAVE&RESATART \n\n[gcode_macro M191]\ngcode:\n {% set s = params.S|float %}\n {% if s == 0 %}\n # If target temperature is 0, do nothing\n M117 Chamber heating cancelled\n {% else %}\n SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={s}\n # Orca: uncomment the following line if you want to use heat bed to assist chamber heating\n M140 S90\n TEMPERATURE_WAIT SENSOR=\"heater_generic chamber_heater\" MINIMUM={s-1} MAXIMUM={s+1}\n M117 Chamber at target temperature\n {% endif %}" + "notes": "If you want to use Orca's chamber temperature control feature, check that printer.cfg has added the following M191 macro.\nTo add it: go to Fluidd web interface--configuration, copy the following code to the top of the printer.cfg document, SAVE&RESATART \n\n[gcode_macro M191]\ngcode:\n {% set s = params.S|float %}\n {% if s == 0 %}\n # If target temperature is 0, do nothing\n M117 Chamber heating cancelled\n {% else %}\n SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={s}\n # Orca: uncomment the following line if you want to use heat bed to assist chamber heating\n M140 S90\n TEMPERATURE_WAIT SENSOR=\"heater_generic chamber_heater\" MINIMUM={s-1} MAXIMUM={s+1}\n M117 Chamber at target temperature\n {% endif %}", + "exclude_object": "1" } diff --git a/resources/profiles/Raise3D.json b/resources/profiles/Raise3D.json index 07b6d2f77e..cf4535bd5a 100644 --- a/resources/profiles/Raise3D.json +++ b/resources/profiles/Raise3D.json @@ -1,7 +1,7 @@ { "name": "Raise3D", "url": "", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Raise3D configurations", "machine_model_list": [ diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index 1790b9c3f5..79705929ba 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,6 +1,6 @@ { "name": "RatRig", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "RatRig configurations", "machine_model_list": [ diff --git a/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json b/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json index 136a4295d2..10f49e4516 100644 --- a/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json +++ b/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json @@ -111,5 +111,6 @@ "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", "RatRig V-Cast 0.6 nozzle" - ] + ], + "exclude_object": "1" } diff --git a/resources/profiles/SecKit.json b/resources/profiles/SecKit.json index 8998a9c627..27d78bf2fb 100644 --- a/resources/profiles/SecKit.json +++ b/resources/profiles/SecKit.json @@ -1,6 +1,6 @@ { "name": "SecKit", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "SecKit configurations", "machine_model_list": [ diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index d61984b260..a20485239e 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "01.06.01", + "version": "01.09.00.01", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Sovol.json b/resources/profiles/Sovol.json index 29e68818db..221842e02f 100644 --- a/resources/profiles/Sovol.json +++ b/resources/profiles/Sovol.json @@ -1,7 +1,7 @@ { "name": "Sovol", "url": "", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Sovol configurations", "machine_model_list": [ diff --git a/resources/profiles/Tronxy.json b/resources/profiles/Tronxy.json index c88d53fe24..07af85d84a 100644 --- a/resources/profiles/Tronxy.json +++ b/resources/profiles/Tronxy.json @@ -1,6 +1,6 @@ { "name": "Tronxy", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Tronxy configurations", "machine_model_list": [ diff --git a/resources/profiles/TwoTrees.json b/resources/profiles/TwoTrees.json index c65f4415e7..127caac3ff 100644 --- a/resources/profiles/TwoTrees.json +++ b/resources/profiles/TwoTrees.json @@ -1,6 +1,6 @@ { "name": "TwoTrees", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "1", "description": "TwoTrees configurations", "machine_model_list": [ diff --git a/resources/profiles/UltiMaker.json b/resources/profiles/UltiMaker.json index 3033a96906..883f29f616 100644 --- a/resources/profiles/UltiMaker.json +++ b/resources/profiles/UltiMaker.json @@ -1,7 +1,7 @@ { "name": "UltiMaker", "url": "", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "UltiMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Vivedino.json b/resources/profiles/Vivedino.json index 58b1a46495..4f303dd814 100644 --- a/resources/profiles/Vivedino.json +++ b/resources/profiles/Vivedino.json @@ -1,6 +1,6 @@ { "name": "Vivedino", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Vivedino configurations", "machine_model_list": [ diff --git a/resources/profiles/Vivedino/process/fdm_process_klipper_common.json b/resources/profiles/Vivedino/process/fdm_process_klipper_common.json index 0473ee3521..f12f318c52 100644 --- a/resources/profiles/Vivedino/process/fdm_process_klipper_common.json +++ b/resources/profiles/Vivedino/process/fdm_process_klipper_common.json @@ -106,5 +106,6 @@ "compatible_printers": [ "Troodon 2.0 Klipper 0.4 nozzle", "Troodon 2.0 RRF 0.4 nozzle" - ] + ], + "exclude_object": "1" } diff --git a/resources/profiles/Voron.json b/resources/profiles/Voron.json index 4f3ea971ef..00f6fb22ee 100644 --- a/resources/profiles/Voron.json +++ b/resources/profiles/Voron.json @@ -1,6 +1,6 @@ { "name": "Voron", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Voron configurations", "machine_model_list": [ diff --git a/resources/profiles/Voron/process/fdm_process_common.json b/resources/profiles/Voron/process/fdm_process_common.json index 23706f8a87..e22d2e56e0 100644 --- a/resources/profiles/Voron/process/fdm_process_common.json +++ b/resources/profiles/Voron/process/fdm_process_common.json @@ -67,5 +67,6 @@ "enable_prime_tower": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", - "xy_contour_compensation": "0" + "xy_contour_compensation": "0", + "exclude_object": "1" } diff --git a/resources/profiles/Voxelab.json b/resources/profiles/Voxelab.json index 6370da51ab..dd5163f139 100644 --- a/resources/profiles/Voxelab.json +++ b/resources/profiles/Voxelab.json @@ -1,7 +1,7 @@ { "name": "Voxelab", "url": "", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Voxelab configurations", "machine_model_list": [ diff --git a/resources/profiles/Vzbot.json b/resources/profiles/Vzbot.json index 08f819e004..5a0d2fb79a 100644 --- a/resources/profiles/Vzbot.json +++ b/resources/profiles/Vzbot.json @@ -1,6 +1,6 @@ { "name": "Vzbot", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Vzbot configurations", "machine_model_list": [ diff --git a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json index 394d77048e..96202dd138 100644 --- a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json +++ b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json @@ -107,5 +107,6 @@ "compatible_printers": [ "Vzbot 235 AWD 0.4 nozzle", "Vzbot 330 AWD 0.4 nozzle" - ] + ], + "exclude_object": "1" } diff --git a/resources/profiles/Vzbot/process/fdm_process_common.json b/resources/profiles/Vzbot/process/fdm_process_common.json index 23706f8a87..e22d2e56e0 100644 --- a/resources/profiles/Vzbot/process/fdm_process_common.json +++ b/resources/profiles/Vzbot/process/fdm_process_common.json @@ -67,5 +67,6 @@ "enable_prime_tower": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", - "xy_contour_compensation": "0" + "xy_contour_compensation": "0", + "exclude_object": "1" } diff --git a/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json index e88c458d77..3782ae9894 100644 --- a/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json @@ -68,5 +68,6 @@ "enable_prime_tower": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", - "xy_contour_compensation": "0" + "xy_contour_compensation": "0", + "exclude_object": "1" } diff --git a/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json index 92236d32c0..fd852dbcd4 100644 --- a/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json @@ -68,5 +68,6 @@ "enable_prime_tower": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", - "xy_contour_compensation": "0" + "xy_contour_compensation": "0", + "exclude_object": "1" } diff --git a/resources/profiles/Wanhao.json b/resources/profiles/Wanhao.json index e4b43d2684..622b293b65 100644 --- a/resources/profiles/Wanhao.json +++ b/resources/profiles/Wanhao.json @@ -1,6 +1,6 @@ { "name": "Wanhao", - "version": "01.08.00.00", + "version": "01.09.00.01", "force_update": "0", "description": "Wanhao configurations", "machine_model_list": [ diff --git a/resources/web/guide/22/22.css b/resources/web/guide/22/22.css index 51b3ec6e52..0a542a4645 100644 --- a/resources/web/guide/22/22.css +++ b/resources/web/guide/22/22.css @@ -32,6 +32,7 @@ input #ItemSelectArea { + flex: 0 0 40px; height:40px; border-top: 1px solid #009688; display: flex; @@ -46,7 +47,7 @@ input #ItemBlockArea { - flex: 1; + flex: 1 0 236px; display:flex; overflow-x:auto; flex-wrap:wrap; @@ -59,7 +60,7 @@ input .MItem { - width: 220px; + min-width: 220px; height: 32px; } diff --git a/resources/web/guide/22/index.html b/resources/web/guide/22/index.html index 0b0bd54739..6e379d2a0b 100644 --- a/resources/web/guide/22/index.html +++ b/resources/web/guide/22/index.html @@ -19,7 +19,7 @@
Filament Selection
-
+
printer
@@ -33,7 +33,15 @@
Bambulab BBL-3DP-001-V4-normal
Bambulab BBL-3DP-001-V4-normal
Bambulab BBL-3DP-001-V5-normal
-
Bambulab BBL-3DP-001-V4-normal
--> +
Bambulab BBL-3DP-001-V4-normal
+
Bambulab BBL-3DP-001-V5-normal
+
Bambulab BBL-3DP-001-V4-normal
+
Bambulab BBL-3DP-001-V4-normal
+
Bambulab BBL-3DP-001-V5-normal
+
Bambulab BBL-3DP-001-V4-normal
+
Bambulab BBL-3DP-001-V4-normal
+
Bambulab BBL-3DP-001-V5-normal
+
Bambulab BBL-3DP-001-V4-normal
-->
@@ -46,7 +54,13 @@
ABS
TPU
PA6+CF
-
N/A
--> +
N/A
+
PLA
+
PET
+
ABS
+
TPU
+
PA6+CF
+
N/A
-->
@@ -58,7 +72,12 @@
BBL
eSUN
Kexcelled
-
Polymaker
--> +
Polymaker
+
Unknown
+
BBL
+
eSUN
+
Kexcelled
+
Polymaker
--> diff --git a/resources/web/guide/23/23.css b/resources/web/guide/23/23.css index 368b61e55e..de2ca9f3e8 100644 --- a/resources/web/guide/23/23.css +++ b/resources/web/guide/23/23.css @@ -32,6 +32,7 @@ input #ItemSelectArea { + flex: 0 0 40px; height:40px; border-top: 1px solid #009688; display: flex; @@ -46,7 +47,6 @@ input #ItemBlockArea { - flex: 1; display:flex; overflow-x:auto; flex-wrap:wrap; @@ -55,11 +55,13 @@ input align-items: flex-start; align-content:flex-start; line-height: 32px; + height: 100%; + flex:1 0 236px; } .MItem { - width: 220px; + min-width: 220px; height: 32px; } @@ -111,3 +113,96 @@ input display: flex; justify-content:space-around; } + +#SystemFilamentsArea +{ + display: none; + flex-direction: column; +} + +#CFilament_Btn_Area +{ + display: flex; + align-items: center; + height: 30px; +} + +#Title +{ + margin: 0px 40px; + border-bottom: 1px solid #000; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +#Title div +{ + cursor: pointer; + font-size: 24px; +} + +#Title div.TitleSelected +{ + height: calc(100% - 6px); + display: flex; + align-items: center; + border-bottom: 6px solid #00AE42; +} + +#Title div.TitleUnselected +{ + height: 100%; + display: flex; + align-items: center; + color: #000; +} + +#CustomFilamentsArea +{ + display: flex; + flex-direction: column; + height: 100%; +} + +#CFilament_List +{ + display:flex; + overflow-x:auto; + flex-wrap:wrap; + flex-direction: column; + justify-content:flex-start; + align-items: flex-start; + align-content:flex-start; + line-height: 32px; + + height: 100%; +} + +.CFilament_Item +{ + display: flex; + align-items: center; + margin-right: 30px; +} + +.CFilament_Name +{ + width: 220px; + overflow: hidden; + white-space: nowrap; /* ?????? */ + text-overflow: ellipsis; /* ????????? */ +} + +.CFilament_EditBtn +{ + cursor: pointer; + width: 20px; + height: 20px; +} + +.CFilament_EditBtn:hover +{ + +} \ No newline at end of file diff --git a/resources/web/guide/23/index.html b/resources/web/guide/23/index.html index 84d6206481..30a6ef989d 100644 --- a/resources/web/guide/23/index.html +++ b/resources/web/guide/23/index.html @@ -7,7 +7,6 @@ - @@ -17,10 +16,12 @@
-
Filament Selection
+
System Filaments
+
Custom Filaments
-
- +
+ +
printer
@@ -32,8 +33,7 @@
Bambulab BBL-3DP-001-V5-normal
Bambulab BBL-3DP-001-V4-normal
Bambulab BBL-3DP-001-V4-normal
-
Bambulab BBL-3DP-001-V5-normal
-
Bambulab BBL-3DP-001-V4-normal
--> +
Bambulab BBL-3DP-001-V5-normal
-->
@@ -46,7 +46,7 @@
ABS
TPU
PA6+CF
-
N/A
--> +
N/A
-->
@@ -58,7 +58,8 @@
BBL
eSUN
Kexcelled
-
Polymaker
--> +
Polymaker
+
Unknown
-->
@@ -126,6 +127,148 @@
Geneic TPU83
Geneic TPU87
--> + + + +
+
+
Create New
+
+
+ +
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8c9ccc1309..71f6fe1f5f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -94,10 +94,7 @@ if (SLIC3R_GUI) # wrong libs for opengl in the link line and it does not link to it by himself. # libslic3r_gui will link to opengl anyway, so lets override wx list(FILTER wxWidgets_LIBRARIES EXCLUDE REGEX OpenGL) - - if (UNIX AND NOT APPLE) - list(APPEND wxWidgets_LIBRARIES X11 wayland-client wayland-egl EGL) - endif () + # list(REMOVE_ITEM wxWidgets_LIBRARIES oleacc) message(STATUS "wx libs: ${wxWidgets_LIBRARIES}") diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index f4781da7c1..1bebecfb96 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -5356,7 +5356,7 @@ bool CLI::setup(int argc, char **argv) for (const t_optiondef_map::value_type &optdef : *options) m_config.option(optdef.first, true); - //set_data_dir(m_config.opt_string("datadir")); + set_data_dir(m_config.opt_string("datadir")); //FIXME Validating at this stage most likely does not make sense, as the config is not fully initialized yet. if (!validity.empty()) { diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index ba0d363f7c..cf6cd95b40 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -42,7 +42,8 @@ using namespace nlohmann; namespace Slic3r { -static const std::string VERSION_CHECK_URL = "https://api.github.com/repos/softfever/OrcaSlicer/releases/latest"; +static const std::string VERSION_CHECK_URL_STABLE = "https://api.github.com/repos/softfever/OrcaSlicer/releases/latest"; +static const std::string VERSION_CHECK_URL = "https://api.github.com/repos/softfever/OrcaSlicer/releases"; static const std::string MODELS_STR = "models"; const std::string AppConfig::SECTION_FILAMENTS = "filaments"; @@ -240,6 +241,10 @@ void AppConfig::set_defaults() set_bool("stealth_mode", false); } + if(get("check_stable_update_only").empty()) { + set_bool("check_stable_update_only", false); + } + // Orca if(get("show_splash_screen").empty()) { set_bool("show_splash_screen", true); @@ -1253,10 +1258,10 @@ std::string AppConfig::config_path() return path; } -std::string AppConfig::version_check_url() const +std::string AppConfig::version_check_url(bool stable_only/* = false*/) const { auto from_settings = get("version_check_url"); - return from_settings.empty() ? VERSION_CHECK_URL : from_settings; + return from_settings.empty() ? stable_only ? VERSION_CHECK_URL_STABLE : VERSION_CHECK_URL : from_settings; } bool AppConfig::exists() diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index 1219adec9e..b785ebf8af 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -247,7 +247,7 @@ public: // Get the Slic3r version check url. // This returns a hardcoded string unless it is overriden by "version_check_url" in the ini file. - std::string version_check_url() const; + std::string version_check_url(bool stable_only = false) const; // Returns the original Slic3r version found in the ini file before it was overwritten // by the current version diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp index 04dede5469..b7e0ea61e9 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp @@ -5,7 +5,6 @@ #include #include -#include #include #include #include @@ -19,6 +18,7 @@ #include "Geometry/VoronoiVisualUtils.hpp" #include "Geometry/VoronoiUtilsCgal.hpp" #include "../EdgeGrid.hpp" +#include "ankerl/unordered_dense.h" #define SKELETAL_TRAPEZOIDATION_BEAD_SEARCH_MAX 1000 //A limit to how long it'll keep searching for adjacent beads. Increasing will re-use beadings more often (saving performance), but search longer for beading (costing performance). @@ -522,14 +522,14 @@ static bool has_missing_twin_edge(const SkeletalTrapezoidationGraph &graph) return false; } -inline static std::unordered_map try_to_fix_degenerated_voronoi_diagram_by_rotation( +inline static ankerl::unordered_dense::map try_to_fix_degenerated_voronoi_diagram_by_rotation( Geometry::VoronoiDiagram &voronoi_diagram, const Polygons &polys, Polygons &polys_rotated, std::vector &segments, const double fix_angle) { - std::unordered_map vertex_mapping; + ankerl::unordered_dense::map vertex_mapping; for (Polygon &poly : polys_rotated) poly.rotate(fix_angle); @@ -562,7 +562,7 @@ inline static std::unordered_map try_to_fix_degenerated inline static void rotate_back_skeletal_trapezoidation_graph_after_fix(SkeletalTrapezoidationGraph &graph, const double fix_angle, - const std::unordered_map &vertex_mapping) + const ankerl::unordered_dense::map &vertex_mapping) { for (STHalfEdgeNode &node : graph.nodes) { // If a mapping exists between a rotated point and an original point, use this mapping. Otherwise, rotate a point in the opposite direction. @@ -623,7 +623,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) const bool is_voronoi_diagram_planar = Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram); const double fix_angle = PI / 6; - std::unordered_map vertex_mapping; + ankerl::unordered_dense::map vertex_mapping; // polys_copy is referenced through items stored in the std::vector segments. Polygons polys_copy = polys; if (has_missing_voronoi_vertex || !is_voronoi_diagram_planar) { @@ -751,7 +751,7 @@ process_voronoi_diagram: void SkeletalTrapezoidation::separatePointyQuadEndNodes() { - std::unordered_set visited_nodes; + ankerl::unordered_dense::set visited_nodes; for (edge_t& edge : graph.edges) { if (edge.prev) @@ -2221,7 +2221,7 @@ void SkeletalTrapezoidation::addToolpathSegment(const ExtrusionJunction& from, c void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_junctions) { - std::unordered_set unprocessed_quad_starts(graph.edges.size() * 5 / 2); + ankerl::unordered_dense::set unprocessed_quad_starts(graph.edges.size() * 5 / 2); for (edge_t& edge : graph.edges) { if (!edge.prev) @@ -2230,7 +2230,7 @@ void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_ } } - std::unordered_set passed_odd_edges; + ankerl::unordered_dense::set passed_odd_edges; while (!unprocessed_quad_starts.empty()) { diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp index 819b71367b..225bf53861 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp @@ -7,7 +7,7 @@ #include #include // smart pointers -#include +#include #include // pair #include "utils/HalfEdgeGraph.hpp" @@ -163,8 +163,8 @@ protected: * mapping each voronoi VD edge to the corresponding halfedge HE edge * In case the result segment is discretized, we map the VD edge to the *last* HE edge */ - std::unordered_map vd_edge_to_he_edge; - std::unordered_map vd_node_to_he_node; + ankerl::unordered_dense::map vd_edge_to_he_edge; + ankerl::unordered_dense::map vd_node_to_he_node; node_t& makeNode(vd_t::vertex_type& vd_node, Point p); //!< Get the node which the VD node maps to, or create a new mapping if there wasn't any yet. /*! diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp index 4ef96eda1a..e87bc4db7c 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp @@ -2,7 +2,8 @@ //CuraEngine is released under the terms of the AGPLv3 or higher. #include "SkeletalTrapezoidationGraph.hpp" -#include +#include + #include @@ -180,8 +181,8 @@ bool STHalfEdgeNode::isLocalMaximum(bool strict) const void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) { - std::unordered_map::iterator> edge_locator; - std::unordered_map::iterator> node_locator; + ankerl::unordered_dense::map::iterator> edge_locator; + ankerl::unordered_dense::map::iterator> node_locator; for (auto edge_it = edges.begin(); edge_it != edges.end(); ++edge_it) { diff --git a/src/libslic3r/Arachne/WallToolPaths.cpp b/src/libslic3r/Arachne/WallToolPaths.cpp index e46e64edca..a147e3f36d 100644 --- a/src/libslic3r/Arachne/WallToolPaths.cpp +++ b/src/libslic3r/Arachne/WallToolPaths.cpp @@ -782,10 +782,9 @@ bool WallToolPaths::removeEmptyToolPaths(std::vector &toolpa * * \param outer_to_inner Whether the wall polygons with a lower inset_idx should go before those with a higher one. */ -std::unordered_set, boost::hash>> WallToolPaths::getRegionOrder(const std::vector &input, const bool outer_to_inner) +WallToolPaths::ExtrusionLineSet WallToolPaths::getRegionOrder(const std::vector &input, const bool outer_to_inner) { - std::unordered_set, boost::hash>> order_requirements; - + ExtrusionLineSet order_requirements; // We build a grid where we map toolpath vertex locations to toolpaths, // so that we can easily find which two toolpaths are next to each other, // which is the requirement for there to be an order constraint. diff --git a/src/libslic3r/Arachne/WallToolPaths.hpp b/src/libslic3r/Arachne/WallToolPaths.hpp index 65a2271a34..02e780ff35 100644 --- a/src/libslic3r/Arachne/WallToolPaths.hpp +++ b/src/libslic3r/Arachne/WallToolPaths.hpp @@ -5,7 +5,7 @@ #define CURAENGINE_WALLTOOLPATHS_H #include -#include +#include #include "BeadingStrategy/BeadingStrategyFactory.hpp" #include "utils/ExtrusionLine.hpp" @@ -86,6 +86,8 @@ public: */ static bool removeEmptyToolPaths(std::vector &toolpaths); + using ExtrusionLineSet = ankerl::unordered_dense::set, boost::hash>>; + /*! * Get the order constraints of the insets when printing walls per region / hole. * Each returned pair consists of adjacent wall lines where the left has an inset_idx one lower than the right. @@ -94,7 +96,7 @@ public: * * \param outer_to_inner Whether the wall polygons with a lower inset_idx should go before those with a higher one. */ - static std::unordered_set, boost::hash>> getRegionOrder(const std::vector &input, bool outer_to_inner); + static ExtrusionLineSet getRegionOrder(const std::vector &input, bool outer_to_inner); protected: /*! diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp index fd7aed4101..16b5ee67c2 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp @@ -119,8 +119,7 @@ void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const //h^2 = (L / b)^2 [square it] //h^2 = L^2 / b^2 [factor the divisor] const auto height_2 = int64_t(double(area_removed_so_far) * double(area_removed_so_far) / double(base_length_2)); - coord_t weighted_average_width; - const int64_t extrusion_area_error = calculateExtrusionAreaDeviationError(previous, current, next, weighted_average_width); + const int64_t extrusion_area_error = calculateExtrusionAreaDeviationError(previous, current, next); if ((height_2 <= scaled(0.001) //Almost exactly colinear (barring rounding errors). && Line::distance_to_infinite(current.p, previous.p, next.p) <= scaled(0.001)) // Make sure that height_2 is not small because of cancellation of positive and negative areas // We shouldn't remove middle junctions of colinear segments if the area changed for the C-P segment is exceeding the maximum allowed @@ -200,8 +199,7 @@ void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const junctions = new_junctions; } -int64_t ExtrusionLine::calculateExtrusionAreaDeviationError(ExtrusionJunction A, ExtrusionJunction B, ExtrusionJunction C, coord_t& weighted_average_width) -{ +int64_t ExtrusionLine::calculateExtrusionAreaDeviationError(ExtrusionJunction A, ExtrusionJunction B, ExtrusionJunction C) { /* * A B C A C * --------------- ************** @@ -219,27 +217,19 @@ int64_t ExtrusionLine::calculateExtrusionAreaDeviationError(ExtrusionJunction A, * weighted-average width for the entire extrusion line. * * */ - const int64_t ab_length = (B - A).cast().norm(); - const int64_t bc_length = (C - B).cast().norm(); - const coord_t width_diff = std::max(std::abs(B.w - A.w), std::abs(C.w - B.w)); - if (width_diff > 1) - { + const int64_t ab_length = (B.p - A.p).cast().norm(); + const int64_t bc_length = (C.p - B.p).cast().norm(); + if (const coord_t width_diff = std::max(std::abs(B.w - A.w), std::abs(C.w - B.w)); width_diff > 1) { // Adjust the width only if there is a difference, or else the rounding errors may produce the wrong // weighted average value. - const int64_t ab_weight = (A.w + B.w) / 2; - const int64_t bc_weight = (B.w + C.w) / 2; - assert(((ab_length * ab_weight + bc_length * bc_weight) / (C - A).cast().norm()) <= std::numeric_limits::max()); - weighted_average_width = (ab_length * ab_weight + bc_length * bc_weight) / (C - A).cast().norm(); - assert((int64_t(std::abs(ab_weight - weighted_average_width)) * ab_length + int64_t(std::abs(bc_weight - weighted_average_width)) * bc_length) <= double(std::numeric_limits::max())); - return std::abs(ab_weight - weighted_average_width) * ab_length + std::abs(bc_weight - weighted_average_width) * bc_length; - } - else - { + const int64_t ab_weight = (A.w + B.w) / 2; + const int64_t bc_weight = (B.w + C.w) / 2; + const int64_t weighted_average_width = (ab_length * ab_weight + bc_length * bc_weight) / (ab_length + bc_length); + const int64_t ac_length = (C.p - A.p).cast().norm(); + return std::abs((ab_weight * ab_length + bc_weight * bc_length) - (weighted_average_width * ac_length)); + } else { // If the width difference is very small, then select the width of the segment that is longer - weighted_average_width = ab_length > bc_length ? A.w : B.w; - assert((int64_t(width_diff) * int64_t(bc_length)) <= std::numeric_limits::max()); - assert((int64_t(width_diff) * int64_t(ab_length)) <= std::numeric_limits::max()); - return ab_length > bc_length ? width_diff * bc_length : width_diff * ab_length; + return ab_length > bc_length ? int64_t(width_diff) * bc_length : int64_t(width_diff) * ab_length; } } diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp index 7ac1a3c4c8..ab68eb129b 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp @@ -186,9 +186,8 @@ struct ExtrusionLine * \param A Start point of the 3-point-straight line * \param B Intermediate point of the 3-point-straight line * \param C End point of the 3-point-straight line - * \param weighted_average_width The weighted average of the widths of the two colinear extrusion segments * */ - static int64_t calculateExtrusionAreaDeviationError(ExtrusionJunction A, ExtrusionJunction B, ExtrusionJunction C, coord_t& weighted_average_width); + static int64_t calculateExtrusionAreaDeviationError(ExtrusionJunction A, ExtrusionJunction B, ExtrusionJunction C); bool is_contour() const; diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 17bb4972d1..15aabd5f8a 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -1720,7 +1720,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) //BBS: version check bool dont_load_config = !m_load_config; if (m_bambuslicer_generator_version) { - Semver app_version = *(Semver::parse(SLIC3R_VERSION)); + Semver app_version = *(Semver::parse(SoftFever_VERSION)); Semver file_version = *m_bambuslicer_generator_version; if (file_version.maj() != app_version.maj()) dont_load_config = true; @@ -3638,7 +3638,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) }*/ } else if (m_curr_metadata_name == BBL_APPLICATION_TAG) { // Generator application of the 3MF. - // SLIC3R_APP_KEY - SLIC3R_VERSION + // SLIC3R_APP_KEY - SoftFever_VERSION if (boost::starts_with(m_curr_characters, "BambuStudio-")) { m_is_bbl_3mf = true; m_bambuslicer_generator_version = Semver::parse(m_curr_characters.substr(12)); @@ -6380,7 +6380,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) metadata_item_map[BBL_CREATION_DATE_TAG] = date; metadata_item_map[BBL_MODIFICATION_TAG] = date; //SoftFever: write BambuStudio tag to keep it compatible - metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % "BambuStudio" % SLIC3R_VERSION).str(); + metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % "BambuStudio" % SoftFever_VERSION).str(); } metadata_item_map[BBS_3MF_VERSION] = std::to_string(VERSION_BBS_3MF); @@ -7197,7 +7197,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) { const std::string& temp_path = model.get_backup_path(); std::string temp_file = temp_path + std::string("/") + "_temp_1.config"; - config.save_to_json(temp_file, std::string("project_settings"), std::string("project"), std::string(SLIC3R_VERSION)); + config.save_to_json(temp_file, std::string("project_settings"), std::string("project"), std::string(SoftFever_VERSION)); return _add_file_to_archive(archive, BBS_PROJECT_CONFIG_FILE, temp_file); } @@ -7538,7 +7538,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // save slice header for debug stream << " <" << SLICE_HEADER_TAG << ">\n"; stream << " <" << SLICE_HEADER_ITEM_TAG << " " << KEY_ATTR << "=\"" << "X-BBL-Client-Type" << "\" " << VALUE_ATTR << "=\"" << "slicer" << "\"/>\n"; - stream << " <" << SLICE_HEADER_ITEM_TAG << " " << KEY_ATTR << "=\"" << "X-BBL-Client-Version" << "\" " << VALUE_ATTR << "=\"" << convert_to_full_version(SLIC3R_VERSION) << "\"/>\n"; + stream << " <" << SLICE_HEADER_ITEM_TAG << " " << KEY_ATTR << "=\"" << "X-BBL-Client-Version" << "\" " << VALUE_ATTR << "=\"" << convert_to_full_version(SoftFever_VERSION) << "\"/>\n"; stream << " \n"; for (unsigned int i = 0; i < (unsigned int)plate_data_list.size(); ++i) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 1423d636ed..66a3a60b03 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3077,7 +3077,8 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc void GCode::print_machine_envelope(GCodeOutputStream &file, Print &print) { const auto flavor = print.config().gcode_flavor.value; - if (flavor == gcfMarlinLegacy || flavor == gcfMarlinFirmware) { + if ((flavor == gcfMarlinLegacy || flavor == gcfMarlinFirmware || flavor == gcfRepRapFirmware) && + print.config().emit_machine_limits_to_gcode.value == true) { int factor = flavor == gcfRepRapFirmware ? 60 : 1; // RRF M203 and M566 are in mm/min file.write_format("M201 X%d Y%d Z%d E%d\n", int(print.config().machine_max_acceleration_x.values.front() + 0.5), @@ -3120,7 +3121,6 @@ void GCode::print_machine_envelope(GCodeOutputStream &file, Print &print) print.config().machine_max_jerk_y.values.front() * factor, print.config().machine_max_jerk_z.values.front() * factor, print.config().machine_max_jerk_e.values.front() * factor); - } } @@ -4515,6 +4515,58 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou // extrude along the path std::string gcode; + + // Port of "wipe inside before extruding an external perimeter" feature from super slicer + if (m_config.wipe_before_external_loop.value && !paths.empty() && paths.front().size() > 1 && paths.back().size() > 1 && paths.front().role() == erExternalPerimeter) { + const bool is_full_loop_ccw = loop.polygon().is_counter_clockwise(); + bool is_hole_loop = (loop.loop_role() & ExtrusionLoopRole::elrHole) != 0; // loop.make_counter_clockwise(); + const double nozzle_diam = EXTRUDER_CONFIG(nozzle_diameter); + + // note: previous & next are inverted to extrude "in the opposite direction, and we are "rewinding" + Point previous_point = paths.front().polyline.points[1]; + Point current_point = paths.front().polyline.points.front(); + Point next_point = paths.back().polyline.points.back(); + + // can happen if seam_gap is null + if (next_point == current_point) { + next_point = paths.back().polyline.points[paths.back().polyline.points.size() - 2]; + } + + Point a = next_point; // second point + Point b = previous_point; // second to last point + if ((is_hole_loop ? !is_full_loop_ccw : is_full_loop_ccw)) { + // swap points + std::swap(a, b); + } + + double angle = current_point.ccw_angle(a, b) / 3; + + // turn outwards if contour, turn inwwards if hole + if (is_hole_loop ? !is_full_loop_ccw : is_full_loop_ccw) angle *= -1; + + Vec2d current_pos = current_point.cast(); + Vec2d next_pos = next_point.cast(); + Vec2d vec_dist = next_pos - current_pos; + double vec_norm = vec_dist.norm(); + // Offset distance is the minimum between half the nozzle diameter or half the line width for the upcomming perimeter + // This is to mimimize potential instances where the de-retraction is performed on top of a neighbouring + // thin perimeter due to arachne reducing line width. + coordf_t dist = std::min(scaled(nozzle_diam) * 0.5, scaled(paths.front().width) * 0.5); + + // FIXME Hiding the seams will not work nicely for very densely discretized contours! + Point pt = (current_pos + vec_dist * (2 * dist / vec_norm)).cast(); + pt.rotate(angle, current_point); + pt = (current_pos + vec_dist * (2 * dist / vec_norm)).cast(); + pt.rotate(angle, current_point); + + // use extrude instead of travel_to_xy to trigger the unretract + ExtrusionPath fake_path_wipe(Polyline{pt, current_point}, paths.front()); + fake_path_wipe.mm3_per_mm = 0; + gcode += extrude_path(fake_path_wipe, "move inwards before retraction/seam", speed); + } + + + bool is_small_peri = false; for (ExtrusionPaths::iterator path = paths.begin(); path != paths.end(); ++path) { // description += ExtrusionLoop::role_to_string(loop.loop_role()); diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index f5680decef..c6e81e994f 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -123,6 +123,7 @@ static double calc_max_layer_height(const PrintConfig &config, double max_object // (print->config().print_sequence == PrintSequence::ByObject is true). ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extruder, bool prime_multi_material) { + m_is_BBL_printer = object.print()->is_BBL_printer(); m_print_object_ptr = &object; if (object.layers().empty()) return; @@ -162,6 +163,7 @@ ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extrude // (print->config().print_sequence == PrintSequence::ByObject is false). ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool prime_multi_material) { + m_is_BBL_printer = print.is_BBL_printer(); m_print_config_ptr = &print.config(); // Initialize the print layers for all objects and all layers. @@ -757,24 +759,23 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume() const unsigned int number_of_extruders = (unsigned int) (sqrt(flush_matrix.size()) + EPSILON); // Extract purging volumes for each extruder pair: std::vector> wipe_volumes; - if (m_print_config_ptr->purge_in_prime_tower) { + if (print_config->purge_in_prime_tower || m_is_BBL_printer) { for (unsigned int i = 0; i < number_of_extruders; ++i) - wipe_volumes.push_back( - std::vector(flush_matrix.begin() + i * number_of_extruders, flush_matrix.begin() + (i + 1) * number_of_extruders)); + wipe_volumes.push_back( std::vector(flush_matrix.begin() + i * number_of_extruders, + flush_matrix.begin() + (i + 1) * number_of_extruders)); } else { // populate wipe_volumes with prime_volume - for (unsigned int i = 0; i < number_of_extruders; ++i) { - wipe_volumes.push_back(std::vector(number_of_extruders, m_print_config_ptr->prime_volume)); - } + for (unsigned int i = 0; i < number_of_extruders; ++i) + wipe_volumes.push_back(std::vector(number_of_extruders, print_config->prime_volume)); } - + unsigned int current_extruder_id = -1; for (int i = 0; i < m_layer_tools.size(); ++i) { LayerTools& lt = m_layer_tools[i]; if (lt.extruders.empty()) continue; - // todo: The algorithm complexity is too high(o(n2)), currently only 8 colors are supported - if (i != 0 && lt.extruders.size() <= 8) { + // todo: The algorithm complexity is too high(o(n2)), currently only 12 colors are supported + if (i != 0 && lt.extruders.size() <= 12) { lt.extruders = get_extruders_order(wipe_volumes, lt.extruders, current_extruder_id); } current_extruder_id = lt.extruders.back(); diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index 728fa4e74b..1cc6f74c8a 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -210,6 +210,7 @@ private: const PrintConfig* m_print_config_ptr = nullptr; const PrintObject* m_print_object_ptr = nullptr; + bool m_is_BBL_printer = false; }; } // namespace SLic3r diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 4adf705665..4774d5fae2 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -1505,6 +1505,8 @@ void PerimeterGenerator::process_classic() const Surface &surface = this->slices->surfaces[surface_order[order_idx]]; // detect how many perimeters must be generated for this island int loop_number = this->config->wall_loops + surface.extra_perimeters - 1; // 0-indexed loops + if (this->config->alternate_extra_wall && this->layer_id % 2 == 1 && !m_spiral_vase) // add alternating extra wall + loop_number++; if (this->layer_id == 0 && this->config->only_one_wall_first_layer) loop_number = 0; // Set the topmost layer to be one wall @@ -1937,6 +1939,8 @@ void PerimeterGenerator::process_arachne() coord_t bead_width_0 = ext_perimeter_spacing; // detect how many perimeters must be generated for this island int loop_number = this->config->wall_loops + surface.extra_perimeters - 1; // 0-indexed loops + if (this->config->alternate_extra_wall && this->layer_id % 2 == 1 && !m_spiral_vase) // add alternating extra wall + loop_number++; if (this->layer_id == 0 && this->config->only_one_wall_first_layer) loop_number = 0; // Orca: set the topmost layer to be one wall according to the config diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 3f18aa8443..dba5cf05e5 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -766,7 +766,7 @@ bool Preset::has_cali_lines(PresetBundle* preset_bundle) } static std::vector s_Preset_print_options { - "layer_height", "initial_layer_print_height", "wall_loops", "slice_closing_radius", "spiral_mode", "spiral_mode_smooth", "spiral_mode_max_xy_smoothing", "slicing_mode", + "layer_height", "initial_layer_print_height", "wall_loops", "alternate_extra_wall", "slice_closing_radius", "spiral_mode", "spiral_mode_smooth", "spiral_mode_max_xy_smoothing", "slicing_mode", "top_shell_layers", "top_shell_thickness", "bottom_shell_layers", "bottom_shell_thickness", "extra_perimeters_on_overhangs", "ensure_vertical_shell_thickness", "reduce_crossing_wall", "detect_thin_wall", "detect_overhang_wall", "overhang_reverse", "overhang_reverse_threshold","overhang_reverse_internal_only", "seam_position", "staggered_inner_seams", "wall_sequence", "is_infill_first", "sparse_infill_density", "sparse_infill_pattern", "top_surface_pattern", "bottom_surface_pattern", @@ -808,7 +808,7 @@ static std::vector s_Preset_print_options { "small_perimeter_speed", "small_perimeter_threshold","bridge_angle", "filter_out_gap_fill", "travel_acceleration","inner_wall_acceleration", "min_width_top_surface", "default_jerk", "outer_wall_jerk", "inner_wall_jerk", "infill_jerk", "top_surface_jerk", "initial_layer_jerk","travel_jerk", "top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","only_one_wall_first_layer", "print_flow_ratio", "seam_gap", - "role_based_wipe_speed", "wipe_speed", "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops", + "role_based_wipe_speed", "wipe_speed", "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops", "wipe_before_external_loop", "bridge_density", "precise_outer_wall", "overhang_speed_classic", "bridge_acceleration", "sparse_infill_acceleration", "internal_solid_infill_acceleration", "tree_support_adaptive_layer_height", "tree_support_auto_brim", "tree_support_brim_width", "gcode_comments", "gcode_label_objects", @@ -878,7 +878,7 @@ static std::vector s_Preset_printer_options { "cooling_tube_retraction", "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "purge_in_prime_tower", "enable_filament_ramming", "z_offset", - "disable_m73", "preferred_orientation" + "disable_m73", "preferred_orientation", "emit_machine_limits_to_gcode" }; static std::vector s_Preset_sla_print_options { diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index f242419bb0..d3c5377ad2 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5,6 +5,7 @@ #include "Utils.hpp" #include "Model.hpp" #include "format.hpp" +#include "libslic3r_version.h" #include #include @@ -462,7 +463,7 @@ std::string PresetBundle::get_texture_for_printer_model(std::string model_name) { for (auto vendor_model: vendor_profile.second.models) { - if (vendor_model.name == model_name) + if (vendor_model.name == model_name || vendor_model.id == model_name) { texture_name = vendor_model.bed_texture; vendor_name = vendor_profile.first; @@ -675,7 +676,7 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector import_json_presets(substitutions, file, override_confirm, rule, overwrite, result); } // Determine if it is a preset bundle - if (boost::iends_with(file, ".bbscfg") || boost::iends_with(file, ".bbsflmt") || boost::iends_with(file, ".zip")) { + if (boost::iends_with(file, ".orca_printer") || boost::iends_with(file, ".orca_filament") || boost::iends_with(file, ".zip")) { boost::system::error_code ec; // create user folder fs::path user_folder(data_dir() + "/" + PRESET_USER_DIR); @@ -767,7 +768,7 @@ bool PresetBundle::import_json_presets(PresetsConfigSubstitutions & s std::string version_str = key_values[BBL_JSON_KEY_VERSION]; boost::optional version = Semver::parse(version_str); if (!version) return false; - Semver app_version = *(Semver::parse(SLIC3R_VERSION)); + Semver app_version = *(Semver::parse(SoftFever_VERSION)); if (version->maj() != app_version.maj()) { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " Preset incompatibla, not loading: " << name; return false; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index f4d946b960..ca4def9760 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -487,7 +487,7 @@ void PrintConfigDef::init_common_params() def = this->add("print_host", coString); def->label = L("Hostname, IP or URL"); - def->tooltip = L("Slic3r can upload G-code files to a printer host. This field should contain " + def->tooltip = L("Orca Slicer can upload G-code files to a printer host. This field should contain " "the hostname, IP address or URL of the printer host instance. " "Print host behind HAProxy with basic auth enabled can be accessed by putting the user name and password into the URL " "in the following format: https://username:password@your-octopi-address/"); @@ -505,7 +505,7 @@ void PrintConfigDef::init_common_params() def = this->add("printhost_apikey", coString); def->label = L("API Key / Password"); - def->tooltip = L("Slic3r can upload G-code files to a printer host. This field should contain " + def->tooltip = L("Orca Slicer can upload G-code files to a printer host. This field should contain " "the API Key or the password required for authentication."); def->mode = comAdvanced; def->cli = ConfigOptionDef::nocli; @@ -1633,7 +1633,7 @@ def = this->add("filament_loading_speed", coFloats); def->label = L("Minimal purge on wipe tower"); def->tooltip = L("After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet stable. " - "Before purging the print head into an infill or a sacrificial object, Slic3r will always prime " + "Before purging the print head into an infill or a sacrificial object, Orca Slicer will always prime " "this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably."); def->sidetext = L("mm³"); def->min = 0; @@ -1837,7 +1837,7 @@ def = this->add("filament_loading_speed", coFloats); def->label = L("Sparse infill anchor length"); def->category = L("Strength"); def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. " - "If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Slic3r tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment " + "If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment " "shorter than infill_anchor_max is found, the infill line is connected to a perimeter segment at just one side " "and the length of the perimeter segment taken is limited to this parameter, but no longer than anchor_length_max. " "\nSet this parameter to zero to disable anchoring perimeters connected to a single infill line."); @@ -1864,7 +1864,7 @@ def = this->add("filament_loading_speed", coFloats); def->label = L("Maximum length of the infill anchor"); def->category = L("Strength"); def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. " - "If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Slic3r tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment " + "If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment " "shorter than this parameter is found, the infill line is connected to a perimeter segment at just one side " "and the length of the perimeter segment taken is limited to infill_anchor, but no longer than this parameter. " "\nIf set to 0, the old algorithm for infill connection will be used, it should create the same result as with 1000 & 0."); @@ -2367,7 +2367,7 @@ def = this->add("filament_loading_speed", coFloats); def->label = L("Exclude objects"); def->tooltip = L("Enable this option to add EXCLUDE OBJECT command in g-code"); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(1)); + def->set_default_value(new ConfigOptionBool(false)); def = this->add("gcode_comments", coBool); def->label = L("Verbose G-code"); @@ -2564,6 +2564,14 @@ def = this->add("filament_loading_speed", coFloats); def->mode = comDevelop; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("emit_machine_limits_to_gcode", coBool); + def->label = L("Emit limits to G-code"); + def->category = L("Machine limits"); + def->tooltip = L("If enabled, the machine limits will be emitted to G-code file.\nThis option will be ignored if the g-code flavor is " + "set to Klipper."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(true)); + def = this->add("machine_pause_gcode", coString); def->label = L("Pause G-code"); def->tooltip = L("This G-code will be used as a code for the pause print. User can insert pause G-code in gcode viewer"); @@ -2818,7 +2826,7 @@ def = this->add("filament_loading_speed", coFloats); def = this->add("host_type", coEnum); def->label = L("Host Type"); - def->tooltip = L("Slic3r can upload G-code files to a printer host. This field must contain " + def->tooltip = L("Orca Slicer can upload G-code files to a printer host. This field must contain " "the kind of the host."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("prusalink"); @@ -3001,12 +3009,19 @@ def = this->add("filament_loading_speed", coFloats); def->max = 1000; def->set_default_value(new ConfigOptionInt(2)); + def = this->add("alternate_extra_wall", coBool); + def->label = L("Alternate extra wall"); + def->category = L("Strength"); + def->tooltip = L("This setting adds an extra wall to every other layer. This way the infill gets wedged vertically between the walls, resulting in stronger prints. \n\nWhen this option is enabled, the ensure vertical shell thickness option needs to be disabled. \n\nUsing lightning infill together with this option is not recommended as there is limited infill to anchor the extra perimeters to."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("post_process", coStrings); def->label = L("Post-processing Scripts"); def->tooltip = L("If you want to process the output G-code through custom scripts, " "just list their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first argument, " - "and they can access the Slic3r config settings by reading environment variables."); + "and they can access the Orca Slicer config settings by reading environment variables."); def->gui_flags = "serialized"; def->multiline = true; def->full_width = true; @@ -3312,6 +3327,16 @@ def = this->add("filament_loading_speed", coFloats); def->tooltip = L("To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); + + def = this->add("wipe_before_external_loop", coBool); + def->label = L("Wipe before external loop"); + def->tooltip = L("To minimise visibility of potential overextrusion at the start of an external perimeter when printing with " + "Outer/Inner or Inner/Outer/Inner wall print order, the deretraction is performed slightly on the inside from the " + "start of the external perimeter. That way any potential over extrusion is hidden from the outside surface. \n\nThis " + "is useful when printing with Outer/Inner or Inner/Outer/Inner wall print order as in these modes it is more likely " + "an external perimeter is printed immediately after a deretraction move."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); def = this->add("wipe_speed", coFloatOrPercent); def->label = L("Wipe speed"); @@ -4436,8 +4461,8 @@ def = this->add("filament_loading_speed", coFloats); def->label = L("Use relative E distances"); def->tooltip = L("Relative extrusion is recommended when using \"label_objects\" option." "Some extruders work better with this option unckecked (absolute extrusion mode). " - "Wipe tower is only compatible with relative mode. It is always enabled on " - "BambuLab printers. Default is checked"); + "Wipe tower is only compatible with relative mode. It is recommended on " + "most printers. Default is checked"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(true)); @@ -5494,6 +5519,7 @@ void DynamicPrintConfig::normalize_fdm(int used_filaments) } { this->opt("wall_loops", true)->value = 1; + this->opt("alternate_extra_wall", true)->value = false; this->opt("top_shell_layers", true)->value = 0; this->opt("sparse_infill_density", true)->value = 0; } @@ -5566,6 +5592,7 @@ void DynamicPrintConfig::normalize_fdm_1() } { this->opt("wall_loops", true)->value = 1; + this->opt("alternate_extra_wall", true)->value = false; this->opt("top_shell_layers", true)->value = 0; this->opt("sparse_infill_density", true)->value = 0; } diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index f16606ba38..7b88767b93 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -853,6 +853,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, inner_wall_speed)) // Total number of perimeters. ((ConfigOptionInt, wall_loops)) + ((ConfigOptionBool, alternate_extra_wall)) ((ConfigOptionFloat, minimum_sparse_infill_area)) ((ConfigOptionInt, solid_infill_filament)) ((ConfigOptionFloatOrPercent, internal_solid_infill_line_width)) @@ -879,6 +880,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, role_based_wipe_speed)) ((ConfigOptionFloatOrPercent, wipe_speed)) ((ConfigOptionBool, wipe_on_loops)) + ((ConfigOptionBool, wipe_before_external_loop)) ((ConfigOptionEnum, wall_infill_order)) ((ConfigOptionBool, precise_outer_wall)) ((ConfigOptionBool, overhang_speed_classic)) @@ -906,6 +908,8 @@ PRINT_CONFIG_CLASS_DEFINE( PRINT_CONFIG_CLASS_DEFINE( MachineEnvelopeConfig, + // Orca: whether emit machine limits into the beginning of the G-code. + ((ConfigOptionBool, emit_machine_limits_to_gcode)) // M201 X... Y... Z... E... [mm/sec^2] ((ConfigOptionFloats, machine_max_acceleration_x)) ((ConfigOptionFloats, machine_max_acceleration_y)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index a7ebfdc7f9..866d9224a8 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -911,6 +911,7 @@ bool PrintObject::invalidate_state_by_config_options( } } else if ( opt_key == "wall_loops" + || opt_key == "alternate_extra_wall" || opt_key == "top_one_wall_type" || opt_key == "min_width_top_surface" || opt_key == "only_one_wall_first_layer" diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index a3edb6bf26..a01e588191 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -284,6 +284,9 @@ static std::string g_data_dir; void set_data_dir(const std::string &dir) { g_data_dir = dir; + if (!g_data_dir.empty() && !boost::filesystem::exists(g_data_dir)) { + boost::filesystem::create_directory(g_data_dir); + } } const std::string& data_dir() diff --git a/src/nanosvg/README.txt b/src/nanosvg/README.txt new file mode 100644 index 0000000000..290bf594a4 --- /dev/null +++ b/src/nanosvg/README.txt @@ -0,0 +1 @@ +Upstream source: https://github.com/SoftFever/nanosvg \ No newline at end of file diff --git a/src/nanosvg/nanosvg.h b/src/nanosvg/nanosvg.h new file mode 100644 index 0000000000..32b6bbbe9a --- /dev/null +++ b/src/nanosvg/nanosvg.h @@ -0,0 +1,3120 @@ +/* + * Copyright (c) 2013-14 Mikko Mononen memon@inside.org + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * The SVG parser is based on Anti-Grain Geometry 2.4 SVG example + * Copyright (C) 2002-2004 Maxim Shemanarev (McSeem) (http://www.antigrain.com/) + * + * Arc calculation code based on canvg (https://code.google.com/p/canvg/) + * + * Bounding box calculation based on http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + * + */ + +#ifndef NANOSVG_H +#define NANOSVG_H + +#ifndef NANOSVG_CPLUSPLUS +#ifdef __cplusplus +extern "C" { +#endif +#endif + +// NanoSVG is a simple stupid single-header-file SVG parse. The output of the parser is a list of cubic bezier shapes. +// +// The library suits well for anything from rendering scalable icons in your editor application to prototyping a game. +// +// NanoSVG supports a wide range of SVG features, but something may be missing, feel free to create a pull request! +// +// The shapes in the SVG images are transformed by the viewBox and converted to specified units. +// That is, you should get the same looking data as your designed in your favorite app. +// +// NanoSVG can return the paths in few different units. For example if you want to render an image, you may choose +// to get the paths in pixels, or if you are feeding the data into a CNC-cutter, you may want to use millimeters. +// +// The units passed to NanoSVG should be one of: 'px', 'pt', 'pc' 'mm', 'cm', or 'in'. +// DPI (dots-per-inch) controls how the unit conversion is done. +// +// If you don't know or care about the units stuff, "px" and 96 should get you going. + + +/* Example Usage: + // Load SVG + NSVGimage* image; + image = nsvgParseFromFile("test.svg", "px", 96); + printf("size: %f x %f\n", image->width, image->height); + // Use... + for (NSVGshape *shape = image->shapes; shape != NULL; shape = shape->next) { + for (NSVGpath *path = shape->paths; path != NULL; path = path->next) { + for (int i = 0; i < path->npts-1; i += 3) { + float* p = &path->pts[i*2]; + drawCubicBez(p[0],p[1], p[2],p[3], p[4],p[5], p[6],p[7]); + } + } + } + // Delete + nsvgDelete(image); +*/ + +enum NSVGpaintType { + NSVG_PAINT_UNDEF = -1, + NSVG_PAINT_NONE = 0, + NSVG_PAINT_COLOR = 1, + NSVG_PAINT_LINEAR_GRADIENT = 2, + NSVG_PAINT_RADIAL_GRADIENT = 3 +}; + +enum NSVGspreadType { + NSVG_SPREAD_PAD = 0, + NSVG_SPREAD_REFLECT = 1, + NSVG_SPREAD_REPEAT = 2 +}; + +enum NSVGlineJoin { + NSVG_JOIN_MITER = 0, + NSVG_JOIN_ROUND = 1, + NSVG_JOIN_BEVEL = 2 +}; + +enum NSVGlineCap { + NSVG_CAP_BUTT = 0, + NSVG_CAP_ROUND = 1, + NSVG_CAP_SQUARE = 2 +}; + +enum NSVGfillRule { + NSVG_FILLRULE_NONZERO = 0, + NSVG_FILLRULE_EVENODD = 1 +}; + +enum NSVGflags { + NSVG_FLAGS_VISIBLE = 0x01 +}; + +typedef struct NSVGgradientStop { + unsigned int color; + float offset; +} NSVGgradientStop; + +typedef struct NSVGgradient { + float xform[6]; + char spread; + float fx, fy; + int nstops; + NSVGgradientStop stops[1]; +} NSVGgradient; + +typedef struct NSVGpaint { + signed char type; + union { + unsigned int color; + NSVGgradient* gradient; + }; +} NSVGpaint; + +typedef struct NSVGpath +{ + float* pts; // Cubic bezier points: x0,y0, [cpx1,cpx1,cpx2,cpy2,x1,y1], ... + int npts; // Total number of bezier points. + char closed; // Flag indicating if shapes should be treated as closed. + float bounds[4]; // Tight bounding box of the shape [minx,miny,maxx,maxy]. + struct NSVGpath* next; // Pointer to next path, or NULL if last element. +} NSVGpath; + +typedef struct NSVGshape +{ + char id[64]; // Optional 'id' attr of the shape or its group + NSVGpaint fill; // Fill paint + NSVGpaint stroke; // Stroke paint + float opacity; // Opacity of the shape. + float strokeWidth; // Stroke width (scaled). + float strokeDashOffset; // Stroke dash offset (scaled). + float strokeDashArray[8]; // Stroke dash array (scaled). + char strokeDashCount; // Number of dash values in dash array. + char strokeLineJoin; // Stroke join type. + char strokeLineCap; // Stroke cap type. + float miterLimit; // Miter limit + char fillRule; // Fill rule, see NSVGfillRule. + unsigned char flags; // Logical or of NSVG_FLAGS_* flags + float bounds[4]; // Tight bounding box of the shape [minx,miny,maxx,maxy]. + char fillGradient[64]; // Optional 'id' of fill gradient + char strokeGradient[64]; // Optional 'id' of stroke gradient + float xform[6]; // Root transformation for fill/stroke gradient + NSVGpath* paths; // Linked list of paths in the image. + struct NSVGshape* next; // Pointer to next shape, or NULL if last element. +} NSVGshape; + +typedef struct NSVGimage +{ + float width; // Width of the image. + float height; // Height of the image. + NSVGshape* shapes; // Linked list of shapes in the image. +} NSVGimage; + +// Parses SVG file from a file, returns SVG image as paths. +NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi); + +// Parses SVG file from a null terminated string, returns SVG image as paths. +// Important note: changes the string. +NSVGimage* nsvgParse(char* input, const char* units, float dpi); + +// Duplicates a path. +NSVGpath* nsvgDuplicatePath(NSVGpath* p); + +// Deletes an image. +void nsvgDelete(NSVGimage* image); + +#ifndef NANOSVG_CPLUSPLUS +#ifdef __cplusplus +} +#endif +#endif + +#ifdef NANOSVG_IMPLEMENTATION + +#include +#include +#include +#include + +#define NSVG_PI (3.14159265358979323846264338327f) +#define NSVG_KAPPA90 (0.5522847493f) // Length proportional to radius of a cubic bezier handle for 90deg arcs. + +#define NSVG_ALIGN_MIN 0 +#define NSVG_ALIGN_MID 1 +#define NSVG_ALIGN_MAX 2 +#define NSVG_ALIGN_NONE 0 +#define NSVG_ALIGN_MEET 1 +#define NSVG_ALIGN_SLICE 2 + +#define NSVG_NOTUSED(v) do { (void)(1 ? (void)0 : ( (void)(v) ) ); } while(0) +#define NSVG_RGB(r, g, b) (((unsigned int)r) | ((unsigned int)g << 8) | ((unsigned int)b << 16)) + +#ifdef _MSC_VER + #pragma warning (disable: 4996) // Switch off security warnings + #pragma warning (disable: 4100) // Switch off unreferenced formal parameter warnings + #ifdef __cplusplus + #define NSVG_INLINE inline + #else + #define NSVG_INLINE + #endif +#else + #define NSVG_INLINE inline +#endif + + +static int nsvg__isspace(char c) +{ + return strchr(" \t\n\v\f\r", c) != 0; +} + +static int nsvg__isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +static NSVG_INLINE float nsvg__minf(float a, float b) { return a < b ? a : b; } +static NSVG_INLINE float nsvg__maxf(float a, float b) { return a > b ? a : b; } + + +// Simple XML parser + +#define NSVG_XML_TAG 1 +#define NSVG_XML_CONTENT 2 +#define NSVG_XML_MAX_ATTRIBS 256 + +static void nsvg__parseContent(char* s, + void (*contentCb)(void* ud, const char* s), + void* ud) +{ + // Trim start white spaces + while (*s && nsvg__isspace(*s)) s++; + if (!*s) return; + + if (contentCb) + (*contentCb)(ud, s); +} + +static void nsvg__parseElement(char* s, + void (*startelCb)(void* ud, const char* el, const char** attr), + void (*endelCb)(void* ud, const char* el), + void* ud) +{ + const char* attr[NSVG_XML_MAX_ATTRIBS]; + int nattr = 0; + char* name; + int start = 0; + int end = 0; + char quote; + + // Skip white space after the '<' + while (*s && nsvg__isspace(*s)) s++; + + // Check if the tag is end tag + if (*s == '/') { + s++; + end = 1; + } else { + start = 1; + } + + // Skip comments, data and preprocessor stuff. + if (!*s || *s == '?' || *s == '!') + return; + + // Get tag name + name = s; + while (*s && !nsvg__isspace(*s)) s++; + if (*s) { *s++ = '\0'; } + + // Get attribs + while (!end && *s && nattr < NSVG_XML_MAX_ATTRIBS-3) { + char* name = NULL; + char* value = NULL; + + // Skip white space before the attrib name + while (*s && nsvg__isspace(*s)) s++; + if (!*s) break; + if (*s == '/') { + end = 1; + break; + } + name = s; + // Find end of the attrib name. + while (*s && !nsvg__isspace(*s) && *s != '=') s++; + if (*s) { *s++ = '\0'; } + // Skip until the beginning of the value. + while (*s && *s != '\"' && *s != '\'') s++; + if (!*s) break; + quote = *s; + s++; + // Store value and find the end of it. + value = s; + while (*s && *s != quote) s++; + if (*s) { *s++ = '\0'; } + + // Store only well formed attributes + if (name && value) { + attr[nattr++] = name; + attr[nattr++] = value; + } + } + + // List terminator + attr[nattr++] = 0; + attr[nattr++] = 0; + + // Call callbacks. + if (start && startelCb) + (*startelCb)(ud, name, attr); + if (end && endelCb) + (*endelCb)(ud, name); +} + +int nsvg__parseXML(char* input, + void (*startelCb)(void* ud, const char* el, const char** attr), + void (*endelCb)(void* ud, const char* el), + void (*contentCb)(void* ud, const char* s), + void* ud) +{ + char* s = input; + char* mark = s; + int state = NSVG_XML_CONTENT; + while (*s) { + if (*s == '<' && state == NSVG_XML_CONTENT) { + // Start of a tag + *s++ = '\0'; + nsvg__parseContent(mark, contentCb, ud); + mark = s; + state = NSVG_XML_TAG; + } else if (*s == '>' && state == NSVG_XML_TAG) { + // Start of a content or new tag. + *s++ = '\0'; + nsvg__parseElement(mark, startelCb, endelCb, ud); + mark = s; + state = NSVG_XML_CONTENT; + } else { + s++; + } + } + + return 1; +} + + +/* Simple SVG parser. */ + +#define NSVG_MAX_ATTR 128 + +enum NSVGgradientUnits { + NSVG_USER_SPACE = 0, + NSVG_OBJECT_SPACE = 1 +}; + +#define NSVG_MAX_DASHES 8 + +enum NSVGunits { + NSVG_UNITS_USER, + NSVG_UNITS_PX, + NSVG_UNITS_PT, + NSVG_UNITS_PC, + NSVG_UNITS_MM, + NSVG_UNITS_CM, + NSVG_UNITS_IN, + NSVG_UNITS_PERCENT, + NSVG_UNITS_EM, + NSVG_UNITS_EX +}; + +typedef struct NSVGcoordinate { + float value; + int units; +} NSVGcoordinate; + +typedef struct NSVGlinearData { + NSVGcoordinate x1, y1, x2, y2; +} NSVGlinearData; + +typedef struct NSVGradialData { + NSVGcoordinate cx, cy, r, fx, fy; +} NSVGradialData; + +typedef struct NSVGgradientData +{ + char id[64]; + char ref[64]; + signed char type; + union { + NSVGlinearData linear; + NSVGradialData radial; + }; + char spread; + char units; + float xform[6]; + int nstops; + NSVGgradientStop* stops; + struct NSVGgradientData* next; +} NSVGgradientData; + +typedef struct NSVGattrib +{ + char id[64]; + float xform[6]; + unsigned int fillColor; + unsigned int strokeColor; + float opacity; + float fillOpacity; + float strokeOpacity; + char fillGradient[64]; + char strokeGradient[64]; + float strokeWidth; + float strokeDashOffset; + float strokeDashArray[NSVG_MAX_DASHES]; + int strokeDashCount; + char strokeLineJoin; + char strokeLineCap; + float miterLimit; + char fillRule; + float fontSize; + unsigned int stopColor; + float stopOpacity; + float stopOffset; + char hasFill; + char hasStroke; + char visible; +} NSVGattrib; + +typedef struct NSVGparser +{ + NSVGattrib attr[NSVG_MAX_ATTR]; + int attrHead; + float* pts; + int npts; + int cpts; + NSVGpath* plist; + NSVGimage* image; + NSVGgradientData* gradients; + NSVGshape* shapesTail; + float viewMinx, viewMiny, viewWidth, viewHeight; + int alignX, alignY, alignType; + float dpi; + char pathFlag; + char defsFlag; +} NSVGparser; + +static void nsvg__xformIdentity(float* t) +{ + t[0] = 1.0f; t[1] = 0.0f; + t[2] = 0.0f; t[3] = 1.0f; + t[4] = 0.0f; t[5] = 0.0f; +} + +static void nsvg__xformSetTranslation(float* t, float tx, float ty) +{ + t[0] = 1.0f; t[1] = 0.0f; + t[2] = 0.0f; t[3] = 1.0f; + t[4] = tx; t[5] = ty; +} + +static void nsvg__xformSetScale(float* t, float sx, float sy) +{ + t[0] = sx; t[1] = 0.0f; + t[2] = 0.0f; t[3] = sy; + t[4] = 0.0f; t[5] = 0.0f; +} + +static void nsvg__xformSetSkewX(float* t, float a) +{ + t[0] = 1.0f; t[1] = 0.0f; + t[2] = tanf(a); t[3] = 1.0f; + t[4] = 0.0f; t[5] = 0.0f; +} + +static void nsvg__xformSetSkewY(float* t, float a) +{ + t[0] = 1.0f; t[1] = tanf(a); + t[2] = 0.0f; t[3] = 1.0f; + t[4] = 0.0f; t[5] = 0.0f; +} + +static void nsvg__xformSetRotation(float* t, float a) +{ + float cs = cosf(a), sn = sinf(a); + t[0] = cs; t[1] = sn; + t[2] = -sn; t[3] = cs; + t[4] = 0.0f; t[5] = 0.0f; +} + +static void nsvg__xformMultiply(float* t, float* s) +{ + float t0 = t[0] * s[0] + t[1] * s[2]; + float t2 = t[2] * s[0] + t[3] * s[2]; + float t4 = t[4] * s[0] + t[5] * s[2] + s[4]; + t[1] = t[0] * s[1] + t[1] * s[3]; + t[3] = t[2] * s[1] + t[3] * s[3]; + t[5] = t[4] * s[1] + t[5] * s[3] + s[5]; + t[0] = t0; + t[2] = t2; + t[4] = t4; +} + +static void nsvg__xformInverse(float* inv, float* t) +{ + double invdet, det = (double)t[0] * t[3] - (double)t[2] * t[1]; + if (det > -1e-6 && det < 1e-6) { + nsvg__xformIdentity(t); + return; + } + invdet = 1.0 / det; + inv[0] = (float)(t[3] * invdet); + inv[2] = (float)(-t[2] * invdet); + inv[4] = (float)(((double)t[2] * t[5] - (double)t[3] * t[4]) * invdet); + inv[1] = (float)(-t[1] * invdet); + inv[3] = (float)(t[0] * invdet); + inv[5] = (float)(((double)t[1] * t[4] - (double)t[0] * t[5]) * invdet); +} + +static void nsvg__xformPremultiply(float* t, float* s) +{ + float s2[6]; + memcpy(s2, s, sizeof(float)*6); + nsvg__xformMultiply(s2, t); + memcpy(t, s2, sizeof(float)*6); +} + +static void nsvg__xformPoint(float* dx, float* dy, float x, float y, float* t) +{ + *dx = x*t[0] + y*t[2] + t[4]; + *dy = x*t[1] + y*t[3] + t[5]; +} + +static void nsvg__xformVec(float* dx, float* dy, float x, float y, float* t) +{ + *dx = x*t[0] + y*t[2]; + *dy = x*t[1] + y*t[3]; +} + +#define NSVG_EPSILON (1e-12) + +static int nsvg__ptInBounds(float* pt, float* bounds) +{ + return pt[0] >= bounds[0] && pt[0] <= bounds[2] && pt[1] >= bounds[1] && pt[1] <= bounds[3]; +} + + +static double nsvg__evalBezier(double t, double p0, double p1, double p2, double p3) +{ + double it = 1.0-t; + return it*it*it*p0 + 3.0*it*it*t*p1 + 3.0*it*t*t*p2 + t*t*t*p3; +} + +static void nsvg__curveBounds(float* bounds, float* curve) +{ + int i, j, count; + double roots[2], a, b, c, b2ac, t, v; + float* v0 = &curve[0]; + float* v1 = &curve[2]; + float* v2 = &curve[4]; + float* v3 = &curve[6]; + + // Start the bounding box by end points + bounds[0] = nsvg__minf(v0[0], v3[0]); + bounds[1] = nsvg__minf(v0[1], v3[1]); + bounds[2] = nsvg__maxf(v0[0], v3[0]); + bounds[3] = nsvg__maxf(v0[1], v3[1]); + + // Bezier curve fits inside the convex hull of it's control points. + // If control points are inside the bounds, we're done. + if (nsvg__ptInBounds(v1, bounds) && nsvg__ptInBounds(v2, bounds)) + return; + + // Add bezier curve inflection points in X and Y. + for (i = 0; i < 2; i++) { + a = -3.0 * v0[i] + 9.0 * v1[i] - 9.0 * v2[i] + 3.0 * v3[i]; + b = 6.0 * v0[i] - 12.0 * v1[i] + 6.0 * v2[i]; + c = 3.0 * v1[i] - 3.0 * v0[i]; + count = 0; + if (fabs(a) < NSVG_EPSILON) { + if (fabs(b) > NSVG_EPSILON) { + t = -c / b; + if (t > NSVG_EPSILON && t < 1.0-NSVG_EPSILON) + roots[count++] = t; + } + } else { + b2ac = b*b - 4.0*c*a; + if (b2ac > NSVG_EPSILON) { + t = (-b + sqrt(b2ac)) / (2.0 * a); + if (t > NSVG_EPSILON && t < 1.0-NSVG_EPSILON) + roots[count++] = t; + t = (-b - sqrt(b2ac)) / (2.0 * a); + if (t > NSVG_EPSILON && t < 1.0-NSVG_EPSILON) + roots[count++] = t; + } + } + for (j = 0; j < count; j++) { + v = nsvg__evalBezier(roots[j], v0[i], v1[i], v2[i], v3[i]); + bounds[0+i] = nsvg__minf(bounds[0+i], (float)v); + bounds[2+i] = nsvg__maxf(bounds[2+i], (float)v); + } + } +} + +static NSVGparser* nsvg__createParser(void) +{ + NSVGparser* p; + p = (NSVGparser*)malloc(sizeof(NSVGparser)); + if (p == NULL) goto error; + memset(p, 0, sizeof(NSVGparser)); + + p->image = (NSVGimage*)malloc(sizeof(NSVGimage)); + if (p->image == NULL) goto error; + memset(p->image, 0, sizeof(NSVGimage)); + + // Init style + nsvg__xformIdentity(p->attr[0].xform); + memset(p->attr[0].id, 0, sizeof p->attr[0].id); + p->attr[0].fillColor = NSVG_RGB(0,0,0); + p->attr[0].strokeColor = NSVG_RGB(0,0,0); + p->attr[0].opacity = 1; + p->attr[0].fillOpacity = 1; + p->attr[0].strokeOpacity = 1; + p->attr[0].stopOpacity = 1; + p->attr[0].strokeWidth = 1; + p->attr[0].strokeLineJoin = NSVG_JOIN_MITER; + p->attr[0].strokeLineCap = NSVG_CAP_BUTT; + p->attr[0].miterLimit = 4; + p->attr[0].fillRule = NSVG_FILLRULE_NONZERO; + p->attr[0].hasFill = 1; + p->attr[0].visible = 1; + + return p; + +error: + if (p) { + if (p->image) free(p->image); + free(p); + } + return NULL; +} + +static void nsvg__deletePaths(NSVGpath* path) +{ + while (path) { + NSVGpath *next = path->next; + if (path->pts != NULL) + free(path->pts); + free(path); + path = next; + } +} + +static void nsvg__deletePaint(NSVGpaint* paint) +{ + if (paint->type == NSVG_PAINT_LINEAR_GRADIENT || paint->type == NSVG_PAINT_RADIAL_GRADIENT) + free(paint->gradient); +} + +static void nsvg__deleteGradientData(NSVGgradientData* grad) +{ + NSVGgradientData* next; + while (grad != NULL) { + next = grad->next; + free(grad->stops); + free(grad); + grad = next; + } +} + +static void nsvg__deleteParser(NSVGparser* p) +{ + if (p != NULL) { + nsvg__deletePaths(p->plist); + nsvg__deleteGradientData(p->gradients); + nsvgDelete(p->image); + free(p->pts); + free(p); + } +} + +static void nsvg__resetPath(NSVGparser* p) +{ + p->npts = 0; +} + +static void nsvg__addPoint(NSVGparser* p, float x, float y) +{ + if (p->npts+1 > p->cpts) { + p->cpts = p->cpts ? p->cpts*2 : 8; + p->pts = (float*)realloc(p->pts, p->cpts*2*sizeof(float)); + if (!p->pts) return; + } + p->pts[p->npts*2+0] = x; + p->pts[p->npts*2+1] = y; + p->npts++; +} + +static void nsvg__moveTo(NSVGparser* p, float x, float y) +{ + if (p->npts > 0) { + p->pts[(p->npts-1)*2+0] = x; + p->pts[(p->npts-1)*2+1] = y; + } else { + nsvg__addPoint(p, x, y); + } +} + +static void nsvg__lineTo(NSVGparser* p, float x, float y) +{ + float px,py, dx,dy; + if (p->npts > 0) { + px = p->pts[(p->npts-1)*2+0]; + py = p->pts[(p->npts-1)*2+1]; + dx = x - px; + dy = y - py; + nsvg__addPoint(p, px + dx/3.0f, py + dy/3.0f); + nsvg__addPoint(p, x - dx/3.0f, y - dy/3.0f); + nsvg__addPoint(p, x, y); + } +} + +static void nsvg__cubicBezTo(NSVGparser* p, float cpx1, float cpy1, float cpx2, float cpy2, float x, float y) +{ + if (p->npts > 0) { + nsvg__addPoint(p, cpx1, cpy1); + nsvg__addPoint(p, cpx2, cpy2); + nsvg__addPoint(p, x, y); + } +} + +static NSVGattrib* nsvg__getAttr(NSVGparser* p) +{ + return &p->attr[p->attrHead]; +} + +static void nsvg__pushAttr(NSVGparser* p) +{ + if (p->attrHead < NSVG_MAX_ATTR-1) { + p->attrHead++; + memcpy(&p->attr[p->attrHead], &p->attr[p->attrHead-1], sizeof(NSVGattrib)); + } +} + +static void nsvg__popAttr(NSVGparser* p) +{ + if (p->attrHead > 0) + p->attrHead--; +} + +static float nsvg__actualOrigX(NSVGparser* p) +{ + return p->viewMinx; +} + +static float nsvg__actualOrigY(NSVGparser* p) +{ + return p->viewMiny; +} + +static float nsvg__actualWidth(NSVGparser* p) +{ + return p->viewWidth; +} + +static float nsvg__actualHeight(NSVGparser* p) +{ + return p->viewHeight; +} + +static float nsvg__actualLength(NSVGparser* p) +{ + float w = nsvg__actualWidth(p), h = nsvg__actualHeight(p); + return sqrtf(w*w + h*h) / sqrtf(2.0f); +} + +static float nsvg__convertToPixels(NSVGparser* p, NSVGcoordinate c, float orig, float length) +{ + NSVGattrib* attr = nsvg__getAttr(p); + switch (c.units) { + case NSVG_UNITS_USER: return c.value; + case NSVG_UNITS_PX: return c.value; + case NSVG_UNITS_PT: return c.value / 72.0f * p->dpi; + case NSVG_UNITS_PC: return c.value / 6.0f * p->dpi; + case NSVG_UNITS_MM: return c.value / 25.4f * p->dpi; + case NSVG_UNITS_CM: return c.value / 2.54f * p->dpi; + case NSVG_UNITS_IN: return c.value * p->dpi; + case NSVG_UNITS_EM: return c.value * attr->fontSize; + case NSVG_UNITS_EX: return c.value * attr->fontSize * 0.52f; // x-height of Helvetica. + case NSVG_UNITS_PERCENT: return orig + c.value / 100.0f * length; + default: return c.value; + } + return c.value; +} + +static NSVGgradientData* nsvg__findGradientData(NSVGparser* p, const char* id) +{ + NSVGgradientData* grad = p->gradients; + if (id == NULL || *id == '\0') + return NULL; + while (grad != NULL) { + if (strcmp(grad->id, id) == 0) + return grad; + grad = grad->next; + } + return NULL; +} + +static NSVGgradient* nsvg__createGradient(NSVGparser* p, const char* id, const float* localBounds, float *xform, signed char* paintType) +{ + NSVGgradientData* data = NULL; + NSVGgradientData* ref = NULL; + NSVGgradientStop* stops = NULL; + NSVGgradient* grad; + float ox, oy, sw, sh, sl; + int nstops = 0; + int refIter; + + data = nsvg__findGradientData(p, id); + if (data == NULL) return NULL; + + // TODO: use ref to fill in all unset values too. + ref = data; + refIter = 0; + while (ref != NULL) { + NSVGgradientData* nextRef = NULL; + if (stops == NULL && ref->stops != NULL) { + stops = ref->stops; + nstops = ref->nstops; + break; + } + nextRef = nsvg__findGradientData(p, ref->ref); + if (nextRef == ref) break; // prevent infite loops on malformed data + ref = nextRef; + refIter++; + if (refIter > 32) break; // prevent infite loops on malformed data + } + if (stops == NULL) return NULL; + + grad = (NSVGgradient*)malloc(sizeof(NSVGgradient) + sizeof(NSVGgradientStop)*(nstops-1)); + if (grad == NULL) return NULL; + + // The shape width and height. + if (data->units == NSVG_OBJECT_SPACE) { + ox = localBounds[0]; + oy = localBounds[1]; + sw = localBounds[2] - localBounds[0]; + sh = localBounds[3] - localBounds[1]; + } else { + ox = nsvg__actualOrigX(p); + oy = nsvg__actualOrigY(p); + sw = nsvg__actualWidth(p); + sh = nsvg__actualHeight(p); + } + sl = sqrtf(sw*sw + sh*sh) / sqrtf(2.0f); + + if (data->type == NSVG_PAINT_LINEAR_GRADIENT) { + float x1, y1, x2, y2, dx, dy; + x1 = nsvg__convertToPixels(p, data->linear.x1, ox, sw); + y1 = nsvg__convertToPixels(p, data->linear.y1, oy, sh); + x2 = nsvg__convertToPixels(p, data->linear.x2, ox, sw); + y2 = nsvg__convertToPixels(p, data->linear.y2, oy, sh); + // Calculate transform aligned to the line + dx = x2 - x1; + dy = y2 - y1; + grad->xform[0] = dy; grad->xform[1] = -dx; + grad->xform[2] = dx; grad->xform[3] = dy; + grad->xform[4] = x1; grad->xform[5] = y1; + } else { + float cx, cy, fx, fy, r; + cx = nsvg__convertToPixels(p, data->radial.cx, ox, sw); + cy = nsvg__convertToPixels(p, data->radial.cy, oy, sh); + fx = nsvg__convertToPixels(p, data->radial.fx, ox, sw); + fy = nsvg__convertToPixels(p, data->radial.fy, oy, sh); + r = nsvg__convertToPixels(p, data->radial.r, 0, sl); + // Calculate transform aligned to the circle + grad->xform[0] = r; grad->xform[1] = 0; + grad->xform[2] = 0; grad->xform[3] = r; + grad->xform[4] = cx; grad->xform[5] = cy; + grad->fx = fx / r; + grad->fy = fy / r; + } + + nsvg__xformMultiply(grad->xform, data->xform); + nsvg__xformMultiply(grad->xform, xform); + + grad->spread = data->spread; + memcpy(grad->stops, stops, nstops*sizeof(NSVGgradientStop)); + grad->nstops = nstops; + + *paintType = data->type; + + return grad; +} + +static float nsvg__getAverageScale(float* t) +{ + float sx = sqrtf(t[0]*t[0] + t[2]*t[2]); + float sy = sqrtf(t[1]*t[1] + t[3]*t[3]); + return (sx + sy) * 0.5f; +} + +static void nsvg__getLocalBounds(float* bounds, NSVGshape *shape, float* xform) +{ + NSVGpath* path; + float curve[4*2], curveBounds[4]; + int i, first = 1; + for (path = shape->paths; path != NULL; path = path->next) { + nsvg__xformPoint(&curve[0], &curve[1], path->pts[0], path->pts[1], xform); + for (i = 0; i < path->npts-1; i += 3) { + nsvg__xformPoint(&curve[2], &curve[3], path->pts[(i+1)*2], path->pts[(i+1)*2+1], xform); + nsvg__xformPoint(&curve[4], &curve[5], path->pts[(i+2)*2], path->pts[(i+2)*2+1], xform); + nsvg__xformPoint(&curve[6], &curve[7], path->pts[(i+3)*2], path->pts[(i+3)*2+1], xform); + nsvg__curveBounds(curveBounds, curve); + if (first) { + bounds[0] = curveBounds[0]; + bounds[1] = curveBounds[1]; + bounds[2] = curveBounds[2]; + bounds[3] = curveBounds[3]; + first = 0; + } else { + bounds[0] = nsvg__minf(bounds[0], curveBounds[0]); + bounds[1] = nsvg__minf(bounds[1], curveBounds[1]); + bounds[2] = nsvg__maxf(bounds[2], curveBounds[2]); + bounds[3] = nsvg__maxf(bounds[3], curveBounds[3]); + } + curve[0] = curve[6]; + curve[1] = curve[7]; + } + } +} + +static void nsvg__addShape(NSVGparser* p) +{ + NSVGattrib* attr = nsvg__getAttr(p); + float scale = 1.0f; + NSVGshape* shape; + NSVGpath* path; + int i; + + if (p->plist == NULL) + return; + + shape = (NSVGshape*)malloc(sizeof(NSVGshape)); + if (shape == NULL) goto error; + memset(shape, 0, sizeof(NSVGshape)); + + memcpy(shape->id, attr->id, sizeof shape->id); + memcpy(shape->fillGradient, attr->fillGradient, sizeof shape->fillGradient); + memcpy(shape->strokeGradient, attr->strokeGradient, sizeof shape->strokeGradient); + memcpy(shape->xform, attr->xform, sizeof shape->xform); + scale = nsvg__getAverageScale(attr->xform); + shape->strokeWidth = attr->strokeWidth * scale; + shape->strokeDashOffset = attr->strokeDashOffset * scale; + shape->strokeDashCount = (char)attr->strokeDashCount; + for (i = 0; i < attr->strokeDashCount; i++) + shape->strokeDashArray[i] = attr->strokeDashArray[i] * scale; + shape->strokeLineJoin = attr->strokeLineJoin; + shape->strokeLineCap = attr->strokeLineCap; + shape->miterLimit = attr->miterLimit; + shape->fillRule = attr->fillRule; + shape->opacity = attr->opacity; + + shape->paths = p->plist; + p->plist = NULL; + + // Calculate shape bounds + shape->bounds[0] = shape->paths->bounds[0]; + shape->bounds[1] = shape->paths->bounds[1]; + shape->bounds[2] = shape->paths->bounds[2]; + shape->bounds[3] = shape->paths->bounds[3]; + for (path = shape->paths->next; path != NULL; path = path->next) { + shape->bounds[0] = nsvg__minf(shape->bounds[0], path->bounds[0]); + shape->bounds[1] = nsvg__minf(shape->bounds[1], path->bounds[1]); + shape->bounds[2] = nsvg__maxf(shape->bounds[2], path->bounds[2]); + shape->bounds[3] = nsvg__maxf(shape->bounds[3], path->bounds[3]); + } + + // Set fill + if (attr->hasFill == 0) { + shape->fill.type = NSVG_PAINT_NONE; + } else if (attr->hasFill == 1) { + shape->fill.type = NSVG_PAINT_COLOR; + shape->fill.color = attr->fillColor; + shape->fill.color |= (unsigned int)(attr->fillOpacity*255) << 24; + } else if (attr->hasFill == 2) { + shape->fill.type = NSVG_PAINT_UNDEF; + } + + // Set stroke + if (attr->hasStroke == 0) { + shape->stroke.type = NSVG_PAINT_NONE; + } else if (attr->hasStroke == 1) { + shape->stroke.type = NSVG_PAINT_COLOR; + shape->stroke.color = attr->strokeColor; + shape->stroke.color |= (unsigned int)(attr->strokeOpacity*255) << 24; + } else if (attr->hasStroke == 2) { + shape->stroke.type = NSVG_PAINT_UNDEF; + } + + // Set flags + shape->flags = (attr->visible ? NSVG_FLAGS_VISIBLE : 0x00); + + // Add to tail + if (p->image->shapes == NULL) + p->image->shapes = shape; + else + p->shapesTail->next = shape; + p->shapesTail = shape; + + return; + +error: + if (shape) free(shape); +} + +static void nsvg__addPath(NSVGparser* p, char closed) +{ + NSVGattrib* attr = nsvg__getAttr(p); + NSVGpath* path = NULL; + float bounds[4]; + float* curve; + int i; + + if (p->npts < 4) + return; + + if (closed) + nsvg__lineTo(p, p->pts[0], p->pts[1]); + + // Expect 1 + N*3 points (N = number of cubic bezier segments). + if ((p->npts % 3) != 1) + return; + + path = (NSVGpath*)malloc(sizeof(NSVGpath)); + if (path == NULL) goto error; + memset(path, 0, sizeof(NSVGpath)); + + path->pts = (float*)malloc(p->npts*2*sizeof(float)); + if (path->pts == NULL) goto error; + path->closed = closed; + path->npts = p->npts; + + // Transform path. + for (i = 0; i < p->npts; ++i) + nsvg__xformPoint(&path->pts[i*2], &path->pts[i*2+1], p->pts[i*2], p->pts[i*2+1], attr->xform); + + // Find bounds + for (i = 0; i < path->npts-1; i += 3) { + curve = &path->pts[i*2]; + nsvg__curveBounds(bounds, curve); + if (i == 0) { + path->bounds[0] = bounds[0]; + path->bounds[1] = bounds[1]; + path->bounds[2] = bounds[2]; + path->bounds[3] = bounds[3]; + } else { + path->bounds[0] = nsvg__minf(path->bounds[0], bounds[0]); + path->bounds[1] = nsvg__minf(path->bounds[1], bounds[1]); + path->bounds[2] = nsvg__maxf(path->bounds[2], bounds[2]); + path->bounds[3] = nsvg__maxf(path->bounds[3], bounds[3]); + } + } + + path->next = p->plist; + p->plist = path; + + return; + +error: + if (path != NULL) { + if (path->pts != NULL) free(path->pts); + free(path); + } +} + +// We roll our own string to float because the std library one uses locale and messes things up. +static double nsvg__atof(const char* s) +{ + char* cur = (char*)s; + char* end = NULL; + double res = 0.0, sign = 1.0; + double intPart = 0.0, fracPart = 0.0; + char hasIntPart = 0, hasFracPart = 0; + + // Parse optional sign + if (*cur == '+') { + cur++; + } else if (*cur == '-') { + sign = -1; + cur++; + } + + // Parse integer part + if (nsvg__isdigit(*cur)) { + // Parse digit sequence +#ifdef _MSC_VER + intPart = (double)_strtoi64(cur, &end, 10); +#else + intPart = (double)strtoll(cur, &end, 10); +#endif + if (cur != end) { + res = intPart; + hasIntPart = 1; + cur = end; + } + } + + // Parse fractional part. + if (*cur == '.') { + cur++; // Skip '.' + if (nsvg__isdigit(*cur)) { + // Parse digit sequence +#ifdef _MSC_VER + fracPart = (double)_strtoi64(cur, &end, 10); +#else + fracPart = (double)strtoll(cur, &end, 10); +#endif + if (cur != end) { + res += fracPart / pow(10.0, (double)(end - cur)); + hasFracPart = 1; + cur = end; + } + } + } + + // A valid number should have integer or fractional part. + if (!hasIntPart && !hasFracPart) + return 0.0; + + // Parse optional exponent + if (*cur == 'e' || *cur == 'E') { + double expPart = 0.0; + cur++; // skip 'E' + expPart = (double)strtol(cur, &end, 10); // Parse digit sequence with sign + if (cur != end) { + res *= pow(10.0, expPart); + } + } + + return res * sign; +} + + +static const char* nsvg__parseNumber(const char* s, char* it, const int size) +{ + const int last = size-1; + int i = 0; + + // sign + if (*s == '-' || *s == '+') { + if (i < last) it[i++] = *s; + s++; + } + // integer part + while (*s && nsvg__isdigit(*s)) { + if (i < last) it[i++] = *s; + s++; + } + if (*s == '.') { + // decimal point + if (i < last) it[i++] = *s; + s++; + // fraction part + while (*s && nsvg__isdigit(*s)) { + if (i < last) it[i++] = *s; + s++; + } + } + // exponent + if ((*s == 'e' || *s == 'E') && (s[1] != 'm' && s[1] != 'x')) { + if (i < last) it[i++] = *s; + s++; + if (*s == '-' || *s == '+') { + if (i < last) it[i++] = *s; + s++; + } + while (*s && nsvg__isdigit(*s)) { + if (i < last) it[i++] = *s; + s++; + } + } + it[i] = '\0'; + + return s; +} + +static const char* nsvg__getNextPathItemWhenArcFlag(const char* s, char* it) +{ + it[0] = '\0'; + while (*s && (nsvg__isspace(*s) || *s == ',')) s++; + if (!*s) return s; + if (*s == '0' || *s == '1') { + it[0] = *s++; + it[1] = '\0'; + return s; + } + return s; +} + +static const char* nsvg__getNextPathItem(const char* s, char* it) +{ + it[0] = '\0'; + // Skip white spaces and commas + while (*s && (nsvg__isspace(*s) || *s == ',')) s++; + if (!*s) return s; + if (*s == '-' || *s == '+' || *s == '.' || nsvg__isdigit(*s)) { + s = nsvg__parseNumber(s, it, 64); + } else { + // Parse command + it[0] = *s++; + it[1] = '\0'; + return s; + } + + return s; +} + +static unsigned int nsvg__parseColorHex(const char* str) +{ + unsigned int r=0, g=0, b=0; + if (sscanf(str, "#%2x%2x%2x", &r, &g, &b) == 3 ) // 2 digit hex + return NSVG_RGB(r, g, b); + if (sscanf(str, "#%1x%1x%1x", &r, &g, &b) == 3 ) // 1 digit hex, e.g. #abc -> 0xccbbaa + return NSVG_RGB(r*17, g*17, b*17); // same effect as (r<<4|r), (g<<4|g), .. + return NSVG_RGB(128, 128, 128); +} + +// Parse rgb color. The pointer 'str' must point at "rgb(" (4+ characters). +// This function returns gray (rgb(128, 128, 128) == '#808080') on parse errors +// for backwards compatibility. Note: other image viewers return black instead. + +static unsigned int nsvg__parseColorRGB(const char* str) +{ + int i; + unsigned int rgbi[3]; + float rgbf[3]; + // try decimal integers first + if (sscanf(str, "rgb(%u, %u, %u)", &rgbi[0], &rgbi[1], &rgbi[2]) != 3) { + // integers failed, try percent values (float, locale independent) + const char delimiter[3] = {',', ',', ')'}; + str += 4; // skip "rgb(" + for (i = 0; i < 3; i++) { + while (*str && (nsvg__isspace(*str))) str++; // skip leading spaces + if (*str == '+') str++; // skip '+' (don't allow '-') + if (!*str) break; + rgbf[i] = nsvg__atof(str); + + // Note 1: it would be great if nsvg__atof() returned how many + // bytes it consumed but it doesn't. We need to skip the number, + // the '%' character, spaces, and the delimiter ',' or ')'. + + // Note 2: The following code does not allow values like "33.%", + // i.e. a decimal point w/o fractional part, but this is consistent + // with other image viewers, e.g. firefox, chrome, eog, gimp. + + while (*str && nsvg__isdigit(*str)) str++; // skip integer part + if (*str == '.') { + str++; + if (!nsvg__isdigit(*str)) break; // error: no digit after '.' + while (*str && nsvg__isdigit(*str)) str++; // skip fractional part + } + if (*str == '%') str++; else break; + while (nsvg__isspace(*str)) str++; + if (*str == delimiter[i]) str++; + else break; + } + if (i == 3) { + rgbi[0] = roundf(rgbf[0] * 2.55f); + rgbi[1] = roundf(rgbf[1] * 2.55f); + rgbi[2] = roundf(rgbf[2] * 2.55f); + } else { + rgbi[0] = rgbi[1] = rgbi[2] = 128; + } + } + // clip values as the CSS spec requires + for (i = 0; i < 3; i++) { + if (rgbi[i] > 255) rgbi[i] = 255; + } + return NSVG_RGB(rgbi[0], rgbi[1], rgbi[2]); +} + +typedef struct NSVGNamedColor { + const char* name; + unsigned int color; +} NSVGNamedColor; + +NSVGNamedColor nsvg__colors[] = { + + { "red", NSVG_RGB(255, 0, 0) }, + { "green", NSVG_RGB( 0, 128, 0) }, + { "blue", NSVG_RGB( 0, 0, 255) }, + { "yellow", NSVG_RGB(255, 255, 0) }, + { "cyan", NSVG_RGB( 0, 255, 255) }, + { "magenta", NSVG_RGB(255, 0, 255) }, + { "black", NSVG_RGB( 0, 0, 0) }, + { "grey", NSVG_RGB(128, 128, 128) }, + { "gray", NSVG_RGB(128, 128, 128) }, + { "white", NSVG_RGB(255, 255, 255) }, + +#ifdef NANOSVG_ALL_COLOR_KEYWORDS + { "aliceblue", NSVG_RGB(240, 248, 255) }, + { "antiquewhite", NSVG_RGB(250, 235, 215) }, + { "aqua", NSVG_RGB( 0, 255, 255) }, + { "aquamarine", NSVG_RGB(127, 255, 212) }, + { "azure", NSVG_RGB(240, 255, 255) }, + { "beige", NSVG_RGB(245, 245, 220) }, + { "bisque", NSVG_RGB(255, 228, 196) }, + { "blanchedalmond", NSVG_RGB(255, 235, 205) }, + { "blueviolet", NSVG_RGB(138, 43, 226) }, + { "brown", NSVG_RGB(165, 42, 42) }, + { "burlywood", NSVG_RGB(222, 184, 135) }, + { "cadetblue", NSVG_RGB( 95, 158, 160) }, + { "chartreuse", NSVG_RGB(127, 255, 0) }, + { "chocolate", NSVG_RGB(210, 105, 30) }, + { "coral", NSVG_RGB(255, 127, 80) }, + { "cornflowerblue", NSVG_RGB(100, 149, 237) }, + { "cornsilk", NSVG_RGB(255, 248, 220) }, + { "crimson", NSVG_RGB(220, 20, 60) }, + { "darkblue", NSVG_RGB( 0, 0, 139) }, + { "darkcyan", NSVG_RGB( 0, 139, 139) }, + { "darkgoldenrod", NSVG_RGB(184, 134, 11) }, + { "darkgray", NSVG_RGB(169, 169, 169) }, + { "darkgreen", NSVG_RGB( 0, 100, 0) }, + { "darkgrey", NSVG_RGB(169, 169, 169) }, + { "darkkhaki", NSVG_RGB(189, 183, 107) }, + { "darkmagenta", NSVG_RGB(139, 0, 139) }, + { "darkolivegreen", NSVG_RGB( 85, 107, 47) }, + { "darkorange", NSVG_RGB(255, 140, 0) }, + { "darkorchid", NSVG_RGB(153, 50, 204) }, + { "darkred", NSVG_RGB(139, 0, 0) }, + { "darksalmon", NSVG_RGB(233, 150, 122) }, + { "darkseagreen", NSVG_RGB(143, 188, 143) }, + { "darkslateblue", NSVG_RGB( 72, 61, 139) }, + { "darkslategray", NSVG_RGB( 47, 79, 79) }, + { "darkslategrey", NSVG_RGB( 47, 79, 79) }, + { "darkturquoise", NSVG_RGB( 0, 206, 209) }, + { "darkviolet", NSVG_RGB(148, 0, 211) }, + { "deeppink", NSVG_RGB(255, 20, 147) }, + { "deepskyblue", NSVG_RGB( 0, 191, 255) }, + { "dimgray", NSVG_RGB(105, 105, 105) }, + { "dimgrey", NSVG_RGB(105, 105, 105) }, + { "dodgerblue", NSVG_RGB( 30, 144, 255) }, + { "firebrick", NSVG_RGB(178, 34, 34) }, + { "floralwhite", NSVG_RGB(255, 250, 240) }, + { "forestgreen", NSVG_RGB( 34, 139, 34) }, + { "fuchsia", NSVG_RGB(255, 0, 255) }, + { "gainsboro", NSVG_RGB(220, 220, 220) }, + { "ghostwhite", NSVG_RGB(248, 248, 255) }, + { "gold", NSVG_RGB(255, 215, 0) }, + { "goldenrod", NSVG_RGB(218, 165, 32) }, + { "greenyellow", NSVG_RGB(173, 255, 47) }, + { "honeydew", NSVG_RGB(240, 255, 240) }, + { "hotpink", NSVG_RGB(255, 105, 180) }, + { "indianred", NSVG_RGB(205, 92, 92) }, + { "indigo", NSVG_RGB( 75, 0, 130) }, + { "ivory", NSVG_RGB(255, 255, 240) }, + { "khaki", NSVG_RGB(240, 230, 140) }, + { "lavender", NSVG_RGB(230, 230, 250) }, + { "lavenderblush", NSVG_RGB(255, 240, 245) }, + { "lawngreen", NSVG_RGB(124, 252, 0) }, + { "lemonchiffon", NSVG_RGB(255, 250, 205) }, + { "lightblue", NSVG_RGB(173, 216, 230) }, + { "lightcoral", NSVG_RGB(240, 128, 128) }, + { "lightcyan", NSVG_RGB(224, 255, 255) }, + { "lightgoldenrodyellow", NSVG_RGB(250, 250, 210) }, + { "lightgray", NSVG_RGB(211, 211, 211) }, + { "lightgreen", NSVG_RGB(144, 238, 144) }, + { "lightgrey", NSVG_RGB(211, 211, 211) }, + { "lightpink", NSVG_RGB(255, 182, 193) }, + { "lightsalmon", NSVG_RGB(255, 160, 122) }, + { "lightseagreen", NSVG_RGB( 32, 178, 170) }, + { "lightskyblue", NSVG_RGB(135, 206, 250) }, + { "lightslategray", NSVG_RGB(119, 136, 153) }, + { "lightslategrey", NSVG_RGB(119, 136, 153) }, + { "lightsteelblue", NSVG_RGB(176, 196, 222) }, + { "lightyellow", NSVG_RGB(255, 255, 224) }, + { "lime", NSVG_RGB( 0, 255, 0) }, + { "limegreen", NSVG_RGB( 50, 205, 50) }, + { "linen", NSVG_RGB(250, 240, 230) }, + { "maroon", NSVG_RGB(128, 0, 0) }, + { "mediumaquamarine", NSVG_RGB(102, 205, 170) }, + { "mediumblue", NSVG_RGB( 0, 0, 205) }, + { "mediumorchid", NSVG_RGB(186, 85, 211) }, + { "mediumpurple", NSVG_RGB(147, 112, 219) }, + { "mediumseagreen", NSVG_RGB( 60, 179, 113) }, + { "mediumslateblue", NSVG_RGB(123, 104, 238) }, + { "mediumspringgreen", NSVG_RGB( 0, 250, 154) }, + { "mediumturquoise", NSVG_RGB( 72, 209, 204) }, + { "mediumvioletred", NSVG_RGB(199, 21, 133) }, + { "midnightblue", NSVG_RGB( 25, 25, 112) }, + { "mintcream", NSVG_RGB(245, 255, 250) }, + { "mistyrose", NSVG_RGB(255, 228, 225) }, + { "moccasin", NSVG_RGB(255, 228, 181) }, + { "navajowhite", NSVG_RGB(255, 222, 173) }, + { "navy", NSVG_RGB( 0, 0, 128) }, + { "oldlace", NSVG_RGB(253, 245, 230) }, + { "olive", NSVG_RGB(128, 128, 0) }, + { "olivedrab", NSVG_RGB(107, 142, 35) }, + { "orange", NSVG_RGB(255, 165, 0) }, + { "orangered", NSVG_RGB(255, 69, 0) }, + { "orchid", NSVG_RGB(218, 112, 214) }, + { "palegoldenrod", NSVG_RGB(238, 232, 170) }, + { "palegreen", NSVG_RGB(152, 251, 152) }, + { "paleturquoise", NSVG_RGB(175, 238, 238) }, + { "palevioletred", NSVG_RGB(219, 112, 147) }, + { "papayawhip", NSVG_RGB(255, 239, 213) }, + { "peachpuff", NSVG_RGB(255, 218, 185) }, + { "peru", NSVG_RGB(205, 133, 63) }, + { "pink", NSVG_RGB(255, 192, 203) }, + { "plum", NSVG_RGB(221, 160, 221) }, + { "powderblue", NSVG_RGB(176, 224, 230) }, + { "purple", NSVG_RGB(128, 0, 128) }, + { "rosybrown", NSVG_RGB(188, 143, 143) }, + { "royalblue", NSVG_RGB( 65, 105, 225) }, + { "saddlebrown", NSVG_RGB(139, 69, 19) }, + { "salmon", NSVG_RGB(250, 128, 114) }, + { "sandybrown", NSVG_RGB(244, 164, 96) }, + { "seagreen", NSVG_RGB( 46, 139, 87) }, + { "seashell", NSVG_RGB(255, 245, 238) }, + { "sienna", NSVG_RGB(160, 82, 45) }, + { "silver", NSVG_RGB(192, 192, 192) }, + { "skyblue", NSVG_RGB(135, 206, 235) }, + { "slateblue", NSVG_RGB(106, 90, 205) }, + { "slategray", NSVG_RGB(112, 128, 144) }, + { "slategrey", NSVG_RGB(112, 128, 144) }, + { "snow", NSVG_RGB(255, 250, 250) }, + { "springgreen", NSVG_RGB( 0, 255, 127) }, + { "steelblue", NSVG_RGB( 70, 130, 180) }, + { "tan", NSVG_RGB(210, 180, 140) }, + { "teal", NSVG_RGB( 0, 128, 128) }, + { "thistle", NSVG_RGB(216, 191, 216) }, + { "tomato", NSVG_RGB(255, 99, 71) }, + { "turquoise", NSVG_RGB( 64, 224, 208) }, + { "violet", NSVG_RGB(238, 130, 238) }, + { "wheat", NSVG_RGB(245, 222, 179) }, + { "whitesmoke", NSVG_RGB(245, 245, 245) }, + { "yellowgreen", NSVG_RGB(154, 205, 50) }, +#endif +}; + +static unsigned int nsvg__parseColorName(const char* str) +{ + int i, ncolors = sizeof(nsvg__colors) / sizeof(NSVGNamedColor); + + for (i = 0; i < ncolors; i++) { + if (strcmp(nsvg__colors[i].name, str) == 0) { + return nsvg__colors[i].color; + } + } + + return NSVG_RGB(128, 128, 128); +} + +static unsigned int nsvg__parseColor(const char* str) +{ + size_t len = 0; + while(*str == ' ') ++str; + len = strlen(str); + if (len >= 1 && *str == '#') + return nsvg__parseColorHex(str); + else if (len >= 4 && str[0] == 'r' && str[1] == 'g' && str[2] == 'b' && str[3] == '(') + return nsvg__parseColorRGB(str); + return nsvg__parseColorName(str); +} + +static float nsvg__parseOpacity(const char* str) +{ + float val = nsvg__atof(str); + if (val < 0.0f) val = 0.0f; + if (val > 1.0f) val = 1.0f; + return val; +} + +static float nsvg__parseMiterLimit(const char* str) +{ + float val = nsvg__atof(str); + if (val < 0.0f) val = 0.0f; + return val; +} + +static int nsvg__parseUnits(const char* units) +{ + if (units[0] == 'p' && units[1] == 'x') + return NSVG_UNITS_PX; + else if (units[0] == 'p' && units[1] == 't') + return NSVG_UNITS_PT; + else if (units[0] == 'p' && units[1] == 'c') + return NSVG_UNITS_PC; + else if (units[0] == 'm' && units[1] == 'm') + return NSVG_UNITS_MM; + else if (units[0] == 'c' && units[1] == 'm') + return NSVG_UNITS_CM; + else if (units[0] == 'i' && units[1] == 'n') + return NSVG_UNITS_IN; + else if (units[0] == '%') + return NSVG_UNITS_PERCENT; + else if (units[0] == 'e' && units[1] == 'm') + return NSVG_UNITS_EM; + else if (units[0] == 'e' && units[1] == 'x') + return NSVG_UNITS_EX; + return NSVG_UNITS_USER; +} + +static int nsvg__isCoordinate(const char* s) +{ + // optional sign + if (*s == '-' || *s == '+') + s++; + // must have at least one digit, or start by a dot + return (nsvg__isdigit(*s) || *s == '.'); +} + +static NSVGcoordinate nsvg__parseCoordinateRaw(const char* str) +{ + NSVGcoordinate coord = {0, NSVG_UNITS_USER}; + char buf[64]; + coord.units = nsvg__parseUnits(nsvg__parseNumber(str, buf, 64)); + coord.value = nsvg__atof(buf); + return coord; +} + +static NSVGcoordinate nsvg__coord(float v, int units) +{ + NSVGcoordinate coord = {v, units}; + return coord; +} + +static float nsvg__parseCoordinate(NSVGparser* p, const char* str, float orig, float length) +{ + NSVGcoordinate coord = nsvg__parseCoordinateRaw(str); + return nsvg__convertToPixels(p, coord, orig, length); +} + +static int nsvg__parseTransformArgs(const char* str, float* args, int maxNa, int* na) +{ + const char* end; + const char* ptr; + char it[64]; + + *na = 0; + ptr = str; + while (*ptr && *ptr != '(') ++ptr; + if (*ptr == 0) + return 1; + end = ptr; + while (*end && *end != ')') ++end; + if (*end == 0) + return 1; + + while (ptr < end) { + if (*ptr == '-' || *ptr == '+' || *ptr == '.' || nsvg__isdigit(*ptr)) { + if (*na >= maxNa) return 0; + ptr = nsvg__parseNumber(ptr, it, 64); + args[(*na)++] = (float)nsvg__atof(it); + } else { + ++ptr; + } + } + return (int)(end - str); +} + + +static int nsvg__parseMatrix(float* xform, const char* str) +{ + float t[6]; + int na = 0; + int len = nsvg__parseTransformArgs(str, t, 6, &na); + if (na != 6) return len; + memcpy(xform, t, sizeof(float)*6); + return len; +} + +static int nsvg__parseTranslate(float* xform, const char* str) +{ + float args[2]; + float t[6]; + int na = 0; + int len = nsvg__parseTransformArgs(str, args, 2, &na); + if (na == 1) args[1] = 0.0; + + nsvg__xformSetTranslation(t, args[0], args[1]); + memcpy(xform, t, sizeof(float)*6); + return len; +} + +static int nsvg__parseScale(float* xform, const char* str) +{ + float args[2]; + int na = 0; + float t[6]; + int len = nsvg__parseTransformArgs(str, args, 2, &na); + if (na == 1) args[1] = args[0]; + nsvg__xformSetScale(t, args[0], args[1]); + memcpy(xform, t, sizeof(float)*6); + return len; +} + +static int nsvg__parseSkewX(float* xform, const char* str) +{ + float args[1]; + int na = 0; + float t[6]; + int len = nsvg__parseTransformArgs(str, args, 1, &na); + nsvg__xformSetSkewX(t, args[0]/180.0f*NSVG_PI); + memcpy(xform, t, sizeof(float)*6); + return len; +} + +static int nsvg__parseSkewY(float* xform, const char* str) +{ + float args[1]; + int na = 0; + float t[6]; + int len = nsvg__parseTransformArgs(str, args, 1, &na); + nsvg__xformSetSkewY(t, args[0]/180.0f*NSVG_PI); + memcpy(xform, t, sizeof(float)*6); + return len; +} + +static int nsvg__parseRotate(float* xform, const char* str) +{ + float args[3]; + int na = 0; + float m[6]; + float t[6]; + int len = nsvg__parseTransformArgs(str, args, 3, &na); + if (na == 1) + args[1] = args[2] = 0.0f; + nsvg__xformIdentity(m); + + if (na > 1) { + nsvg__xformSetTranslation(t, -args[1], -args[2]); + nsvg__xformMultiply(m, t); + } + + nsvg__xformSetRotation(t, args[0]/180.0f*NSVG_PI); + nsvg__xformMultiply(m, t); + + if (na > 1) { + nsvg__xformSetTranslation(t, args[1], args[2]); + nsvg__xformMultiply(m, t); + } + + memcpy(xform, m, sizeof(float)*6); + + return len; +} + +static void nsvg__parseTransform(float* xform, const char* str) +{ + float t[6]; + int len; + nsvg__xformIdentity(xform); + while (*str) + { + if (strncmp(str, "matrix", 6) == 0) + len = nsvg__parseMatrix(t, str); + else if (strncmp(str, "translate", 9) == 0) + len = nsvg__parseTranslate(t, str); + else if (strncmp(str, "scale", 5) == 0) + len = nsvg__parseScale(t, str); + else if (strncmp(str, "rotate", 6) == 0) + len = nsvg__parseRotate(t, str); + else if (strncmp(str, "skewX", 5) == 0) + len = nsvg__parseSkewX(t, str); + else if (strncmp(str, "skewY", 5) == 0) + len = nsvg__parseSkewY(t, str); + else{ + ++str; + continue; + } + if (len != 0) { + str += len; + } else { + ++str; + continue; + } + + nsvg__xformPremultiply(xform, t); + } +} + +static void nsvg__parseUrl(char* id, const char* str) +{ + int i = 0; + str += 4; // "url("; + if (*str && *str == '#') + str++; + while (i < 63 && *str && *str != ')') { + id[i] = *str++; + i++; + } + id[i] = '\0'; +} + +static char nsvg__parseLineCap(const char* str) +{ + if (strcmp(str, "butt") == 0) + return NSVG_CAP_BUTT; + else if (strcmp(str, "round") == 0) + return NSVG_CAP_ROUND; + else if (strcmp(str, "square") == 0) + return NSVG_CAP_SQUARE; + // TODO: handle inherit. + return NSVG_CAP_BUTT; +} + +static char nsvg__parseLineJoin(const char* str) +{ + if (strcmp(str, "miter") == 0) + return NSVG_JOIN_MITER; + else if (strcmp(str, "round") == 0) + return NSVG_JOIN_ROUND; + else if (strcmp(str, "bevel") == 0) + return NSVG_JOIN_BEVEL; + // TODO: handle inherit. + return NSVG_JOIN_MITER; +} + +static char nsvg__parseFillRule(const char* str) +{ + if (strcmp(str, "nonzero") == 0) + return NSVG_FILLRULE_NONZERO; + else if (strcmp(str, "evenodd") == 0) + return NSVG_FILLRULE_EVENODD; + // TODO: handle inherit. + return NSVG_FILLRULE_NONZERO; +} + +static const char* nsvg__getNextDashItem(const char* s, char* it) +{ + int n = 0; + it[0] = '\0'; + // Skip white spaces and commas + while (*s && (nsvg__isspace(*s) || *s == ',')) s++; + // Advance until whitespace, comma or end. + while (*s && (!nsvg__isspace(*s) && *s != ',')) { + if (n < 63) + it[n++] = *s; + s++; + } + it[n++] = '\0'; + return s; +} + +static int nsvg__parseStrokeDashArray(NSVGparser* p, const char* str, float* strokeDashArray) +{ + char item[64]; + int count = 0, i; + float sum = 0.0f; + + // Handle "none" + if (str[0] == 'n') + return 0; + + // Parse dashes + while (*str) { + str = nsvg__getNextDashItem(str, item); + if (!*item) break; + if (count < NSVG_MAX_DASHES) + strokeDashArray[count++] = fabsf(nsvg__parseCoordinate(p, item, 0.0f, nsvg__actualLength(p))); + } + + for (i = 0; i < count; i++) + sum += strokeDashArray[i]; + if (sum <= 1e-6f) + count = 0; + + return count; +} + +static void nsvg__parseStyle(NSVGparser* p, const char* str); + +static int nsvg__parseAttr(NSVGparser* p, const char* name, const char* value) +{ + float xform[6]; + NSVGattrib* attr = nsvg__getAttr(p); + if (!attr) return 0; + + if (strcmp(name, "style") == 0) { + nsvg__parseStyle(p, value); + } else if (strcmp(name, "display") == 0) { + if (strcmp(value, "none") == 0) + attr->visible = 0; + // Don't reset ->visible on display:inline, one display:none hides the whole subtree + + } else if (strcmp(name, "fill") == 0) { + if (strcmp(value, "none") == 0) { + attr->hasFill = 0; + } else if (strncmp(value, "url(", 4) == 0) { + attr->hasFill = 2; + nsvg__parseUrl(attr->fillGradient, value); + } else { + attr->hasFill = 1; + attr->fillColor = nsvg__parseColor(value); + } + } else if (strcmp(name, "opacity") == 0) { + attr->opacity = nsvg__parseOpacity(value); + } else if (strcmp(name, "fill-opacity") == 0) { + attr->fillOpacity = nsvg__parseOpacity(value); + } else if (strcmp(name, "stroke") == 0) { + if (strcmp(value, "none") == 0) { + attr->hasStroke = 0; + } else if (strncmp(value, "url(", 4) == 0) { + attr->hasStroke = 2; + nsvg__parseUrl(attr->strokeGradient, value); + } else { + attr->hasStroke = 1; + attr->strokeColor = nsvg__parseColor(value); + } + } else if (strcmp(name, "stroke-width") == 0) { + attr->strokeWidth = nsvg__parseCoordinate(p, value, 0.0f, nsvg__actualLength(p)); + } else if (strcmp(name, "stroke-dasharray") == 0) { + attr->strokeDashCount = nsvg__parseStrokeDashArray(p, value, attr->strokeDashArray); + } else if (strcmp(name, "stroke-dashoffset") == 0) { + attr->strokeDashOffset = nsvg__parseCoordinate(p, value, 0.0f, nsvg__actualLength(p)); + } else if (strcmp(name, "stroke-opacity") == 0) { + attr->strokeOpacity = nsvg__parseOpacity(value); + } else if (strcmp(name, "stroke-linecap") == 0) { + attr->strokeLineCap = nsvg__parseLineCap(value); + } else if (strcmp(name, "stroke-linejoin") == 0) { + attr->strokeLineJoin = nsvg__parseLineJoin(value); + } else if (strcmp(name, "stroke-miterlimit") == 0) { + attr->miterLimit = nsvg__parseMiterLimit(value); + } else if (strcmp(name, "fill-rule") == 0) { + attr->fillRule = nsvg__parseFillRule(value); + } else if (strcmp(name, "font-size") == 0) { + attr->fontSize = nsvg__parseCoordinate(p, value, 0.0f, nsvg__actualLength(p)); + } else if (strcmp(name, "transform") == 0) { + nsvg__parseTransform(xform, value); + nsvg__xformPremultiply(attr->xform, xform); + } else if (strcmp(name, "stop-color") == 0) { + attr->stopColor = nsvg__parseColor(value); + } else if (strcmp(name, "stop-opacity") == 0) { + attr->stopOpacity = nsvg__parseOpacity(value); + } else if (strcmp(name, "offset") == 0) { + attr->stopOffset = nsvg__parseCoordinate(p, value, 0.0f, 1.0f); + } else if (strcmp(name, "id") == 0) { + strncpy(attr->id, value, 63); + attr->id[63] = '\0'; + } else { + return 0; + } + return 1; +} + +static int nsvg__parseNameValue(NSVGparser* p, const char* start, const char* end) +{ + const char* str; + const char* val; + char name[512]; + char value[512]; + int n; + + str = start; + while (str < end && *str != ':') ++str; + + val = str; + + // Right Trim + while (str > start && (*str == ':' || nsvg__isspace(*str))) --str; + ++str; + + n = (int)(str - start); + if (n > 511) n = 511; + if (n) memcpy(name, start, n); + name[n] = 0; + + while (val < end && (*val == ':' || nsvg__isspace(*val))) ++val; + + n = (int)(end - val); + if (n > 511) n = 511; + if (n) memcpy(value, val, n); + value[n] = 0; + + return nsvg__parseAttr(p, name, value); +} + +static void nsvg__parseStyle(NSVGparser* p, const char* str) +{ + const char* start; + const char* end; + + while (*str) { + // Left Trim + while(*str && nsvg__isspace(*str)) ++str; + start = str; + while(*str && *str != ';') ++str; + end = str; + + // Right Trim + while (end > start && (*end == ';' || nsvg__isspace(*end))) --end; + ++end; + + nsvg__parseNameValue(p, start, end); + if (*str) ++str; + } +} + +static void nsvg__parseAttribs(NSVGparser* p, const char** attr) +{ + int i; + for (i = 0; attr[i]; i += 2) + { + if (strcmp(attr[i], "style") == 0) + nsvg__parseStyle(p, attr[i + 1]); + else + nsvg__parseAttr(p, attr[i], attr[i + 1]); + } +} + +static int nsvg__getArgsPerElement(char cmd) +{ + switch (cmd) { + case 'v': + case 'V': + case 'h': + case 'H': + return 1; + case 'm': + case 'M': + case 'l': + case 'L': + case 't': + case 'T': + return 2; + case 'q': + case 'Q': + case 's': + case 'S': + return 4; + case 'c': + case 'C': + return 6; + case 'a': + case 'A': + return 7; + case 'z': + case 'Z': + return 0; + } + return -1; +} + +static void nsvg__pathMoveTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +{ + if (rel) { + *cpx += args[0]; + *cpy += args[1]; + } else { + *cpx = args[0]; + *cpy = args[1]; + } + nsvg__moveTo(p, *cpx, *cpy); +} + +static void nsvg__pathLineTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +{ + if (rel) { + *cpx += args[0]; + *cpy += args[1]; + } else { + *cpx = args[0]; + *cpy = args[1]; + } + nsvg__lineTo(p, *cpx, *cpy); +} + +static void nsvg__pathHLineTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +{ + if (rel) + *cpx += args[0]; + else + *cpx = args[0]; + nsvg__lineTo(p, *cpx, *cpy); +} + +static void nsvg__pathVLineTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +{ + if (rel) + *cpy += args[0]; + else + *cpy = args[0]; + nsvg__lineTo(p, *cpx, *cpy); +} + +static void nsvg__pathCubicBezTo(NSVGparser* p, float* cpx, float* cpy, + float* cpx2, float* cpy2, float* args, int rel) +{ + float x2, y2, cx1, cy1, cx2, cy2; + + if (rel) { + cx1 = *cpx + args[0]; + cy1 = *cpy + args[1]; + cx2 = *cpx + args[2]; + cy2 = *cpy + args[3]; + x2 = *cpx + args[4]; + y2 = *cpy + args[5]; + } else { + cx1 = args[0]; + cy1 = args[1]; + cx2 = args[2]; + cy2 = args[3]; + x2 = args[4]; + y2 = args[5]; + } + + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); + + *cpx2 = cx2; + *cpy2 = cy2; + *cpx = x2; + *cpy = y2; +} + +static void nsvg__pathCubicBezShortTo(NSVGparser* p, float* cpx, float* cpy, + float* cpx2, float* cpy2, float* args, int rel) +{ + float x1, y1, x2, y2, cx1, cy1, cx2, cy2; + + x1 = *cpx; + y1 = *cpy; + if (rel) { + cx2 = *cpx + args[0]; + cy2 = *cpy + args[1]; + x2 = *cpx + args[2]; + y2 = *cpy + args[3]; + } else { + cx2 = args[0]; + cy2 = args[1]; + x2 = args[2]; + y2 = args[3]; + } + + cx1 = 2*x1 - *cpx2; + cy1 = 2*y1 - *cpy2; + + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); + + *cpx2 = cx2; + *cpy2 = cy2; + *cpx = x2; + *cpy = y2; +} + +static void nsvg__pathQuadBezTo(NSVGparser* p, float* cpx, float* cpy, + float* cpx2, float* cpy2, float* args, int rel) +{ + float x1, y1, x2, y2, cx, cy; + float cx1, cy1, cx2, cy2; + + x1 = *cpx; + y1 = *cpy; + if (rel) { + cx = *cpx + args[0]; + cy = *cpy + args[1]; + x2 = *cpx + args[2]; + y2 = *cpy + args[3]; + } else { + cx = args[0]; + cy = args[1]; + x2 = args[2]; + y2 = args[3]; + } + + // Convert to cubic bezier + cx1 = x1 + 2.0f/3.0f*(cx - x1); + cy1 = y1 + 2.0f/3.0f*(cy - y1); + cx2 = x2 + 2.0f/3.0f*(cx - x2); + cy2 = y2 + 2.0f/3.0f*(cy - y2); + + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); + + *cpx2 = cx; + *cpy2 = cy; + *cpx = x2; + *cpy = y2; +} + +static void nsvg__pathQuadBezShortTo(NSVGparser* p, float* cpx, float* cpy, + float* cpx2, float* cpy2, float* args, int rel) +{ + float x1, y1, x2, y2, cx, cy; + float cx1, cy1, cx2, cy2; + + x1 = *cpx; + y1 = *cpy; + if (rel) { + x2 = *cpx + args[0]; + y2 = *cpy + args[1]; + } else { + x2 = args[0]; + y2 = args[1]; + } + + cx = 2*x1 - *cpx2; + cy = 2*y1 - *cpy2; + + // Convert to cubix bezier + cx1 = x1 + 2.0f/3.0f*(cx - x1); + cy1 = y1 + 2.0f/3.0f*(cy - y1); + cx2 = x2 + 2.0f/3.0f*(cx - x2); + cy2 = y2 + 2.0f/3.0f*(cy - y2); + + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); + + *cpx2 = cx; + *cpy2 = cy; + *cpx = x2; + *cpy = y2; +} + +static float nsvg__sqr(float x) { return x*x; } +static float nsvg__vmag(float x, float y) { return sqrtf(x*x + y*y); } + +static float nsvg__vecrat(float ux, float uy, float vx, float vy) +{ + return (ux*vx + uy*vy) / (nsvg__vmag(ux,uy) * nsvg__vmag(vx,vy)); +} + +static float nsvg__vecang(float ux, float uy, float vx, float vy) +{ + float r = nsvg__vecrat(ux,uy, vx,vy); + if (r < -1.0f) r = -1.0f; + if (r > 1.0f) r = 1.0f; + return ((ux*vy < uy*vx) ? -1.0f : 1.0f) * acosf(r); +} + +static void nsvg__pathArcTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +{ + // Ported from canvg (https://code.google.com/p/canvg/) + float rx, ry, rotx; + float x1, y1, x2, y2, cx, cy, dx, dy, d; + float x1p, y1p, cxp, cyp, s, sa, sb; + float ux, uy, vx, vy, a1, da; + float x, y, tanx, tany, a, px = 0, py = 0, ptanx = 0, ptany = 0, t[6]; + float sinrx, cosrx; + int fa, fs; + int i, ndivs; + float hda, kappa; + + rx = fabsf(args[0]); // y radius + ry = fabsf(args[1]); // x radius + rotx = args[2] / 180.0f * NSVG_PI; // x rotation angle + fa = fabsf(args[3]) > 1e-6 ? 1 : 0; // Large arc + fs = fabsf(args[4]) > 1e-6 ? 1 : 0; // Sweep direction + x1 = *cpx; // start point + y1 = *cpy; + if (rel) { // end point + x2 = *cpx + args[5]; + y2 = *cpy + args[6]; + } else { + x2 = args[5]; + y2 = args[6]; + } + + dx = x1 - x2; + dy = y1 - y2; + d = sqrtf(dx*dx + dy*dy); + if (d < 1e-6f || rx < 1e-6f || ry < 1e-6f) { + // The arc degenerates to a line + nsvg__lineTo(p, x2, y2); + *cpx = x2; + *cpy = y2; + return; + } + + sinrx = sinf(rotx); + cosrx = cosf(rotx); + + // Convert to center point parameterization. + // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes + // 1) Compute x1', y1' + x1p = cosrx * dx / 2.0f + sinrx * dy / 2.0f; + y1p = -sinrx * dx / 2.0f + cosrx * dy / 2.0f; + d = nsvg__sqr(x1p)/nsvg__sqr(rx) + nsvg__sqr(y1p)/nsvg__sqr(ry); + if (d > 1) { + d = sqrtf(d); + rx *= d; + ry *= d; + } + // 2) Compute cx', cy' + s = 0.0f; + sa = nsvg__sqr(rx)*nsvg__sqr(ry) - nsvg__sqr(rx)*nsvg__sqr(y1p) - nsvg__sqr(ry)*nsvg__sqr(x1p); + sb = nsvg__sqr(rx)*nsvg__sqr(y1p) + nsvg__sqr(ry)*nsvg__sqr(x1p); + if (sa < 0.0f) sa = 0.0f; + if (sb > 0.0f) + s = sqrtf(sa / sb); + if (fa == fs) + s = -s; + cxp = s * rx * y1p / ry; + cyp = s * -ry * x1p / rx; + + // 3) Compute cx,cy from cx',cy' + cx = (x1 + x2)/2.0f + cosrx*cxp - sinrx*cyp; + cy = (y1 + y2)/2.0f + sinrx*cxp + cosrx*cyp; + + // 4) Calculate theta1, and delta theta. + ux = (x1p - cxp) / rx; + uy = (y1p - cyp) / ry; + vx = (-x1p - cxp) / rx; + vy = (-y1p - cyp) / ry; + a1 = nsvg__vecang(1.0f,0.0f, ux,uy); // Initial angle + da = nsvg__vecang(ux,uy, vx,vy); // Delta angle + +// if (vecrat(ux,uy,vx,vy) <= -1.0f) da = NSVG_PI; +// if (vecrat(ux,uy,vx,vy) >= 1.0f) da = 0; + + if (fs == 0 && da > 0) + da -= 2 * NSVG_PI; + else if (fs == 1 && da < 0) + da += 2 * NSVG_PI; + + // Approximate the arc using cubic spline segments. + t[0] = cosrx; t[1] = sinrx; + t[2] = -sinrx; t[3] = cosrx; + t[4] = cx; t[5] = cy; + + // Split arc into max 90 degree segments. + // The loop assumes an iteration per end point (including start and end), this +1. + ndivs = (int)(fabsf(da) / (NSVG_PI*0.5f) + 1.0f); + hda = (da / (float)ndivs) / 2.0f; + // Fix for ticket #179: division by 0: avoid cotangens around 0 (infinite) + if ((hda < 1e-3f) && (hda > -1e-3f)) + hda *= 0.5f; + else + hda = (1.0f - cosf(hda)) / sinf(hda); + kappa = fabsf(4.0f / 3.0f * hda); + if (da < 0.0f) + kappa = -kappa; + + for (i = 0; i <= ndivs; i++) { + a = a1 + da * ((float)i/(float)ndivs); + dx = cosf(a); + dy = sinf(a); + nsvg__xformPoint(&x, &y, dx*rx, dy*ry, t); // position + nsvg__xformVec(&tanx, &tany, -dy*rx * kappa, dx*ry * kappa, t); // tangent + if (i > 0) + nsvg__cubicBezTo(p, px+ptanx,py+ptany, x-tanx, y-tany, x, y); + px = x; + py = y; + ptanx = tanx; + ptany = tany; + } + + *cpx = x2; + *cpy = y2; +} + +static void nsvg__parsePath(NSVGparser* p, const char** attr) +{ + const char* s = NULL; + char cmd = '\0'; + float args[10]; + int nargs; + int rargs = 0; + char initPoint; + float cpx, cpy, cpx2, cpy2; + const char* tmp[4]; + char closedFlag; + int i; + char item[64]; + + for (i = 0; attr[i]; i += 2) { + if (strcmp(attr[i], "d") == 0) { + s = attr[i + 1]; + } else { + tmp[0] = attr[i]; + tmp[1] = attr[i + 1]; + tmp[2] = 0; + tmp[3] = 0; + nsvg__parseAttribs(p, tmp); + } + } + + if (s) { + nsvg__resetPath(p); + cpx = 0; cpy = 0; + cpx2 = 0; cpy2 = 0; + initPoint = 0; + closedFlag = 0; + nargs = 0; + + while (*s) { + item[0] = '\0'; + if ((cmd == 'A' || cmd == 'a') && (nargs == 3 || nargs == 4)) + s = nsvg__getNextPathItemWhenArcFlag(s, item); + if (!*item) + s = nsvg__getNextPathItem(s, item); + if (!*item) break; + if (cmd != '\0' && nsvg__isCoordinate(item)) { + if (nargs < 10) + args[nargs++] = (float)nsvg__atof(item); + if (nargs >= rargs) { + switch (cmd) { + case 'm': + case 'M': + nsvg__pathMoveTo(p, &cpx, &cpy, args, cmd == 'm' ? 1 : 0); + // Moveto can be followed by multiple coordinate pairs, + // which should be treated as linetos. + cmd = (cmd == 'm') ? 'l' : 'L'; + rargs = nsvg__getArgsPerElement(cmd); + cpx2 = cpx; cpy2 = cpy; + initPoint = 1; + break; + case 'l': + case 'L': + nsvg__pathLineTo(p, &cpx, &cpy, args, cmd == 'l' ? 1 : 0); + cpx2 = cpx; cpy2 = cpy; + break; + case 'H': + case 'h': + nsvg__pathHLineTo(p, &cpx, &cpy, args, cmd == 'h' ? 1 : 0); + cpx2 = cpx; cpy2 = cpy; + break; + case 'V': + case 'v': + nsvg__pathVLineTo(p, &cpx, &cpy, args, cmd == 'v' ? 1 : 0); + cpx2 = cpx; cpy2 = cpy; + break; + case 'C': + case 'c': + nsvg__pathCubicBezTo(p, &cpx, &cpy, &cpx2, &cpy2, args, cmd == 'c' ? 1 : 0); + break; + case 'S': + case 's': + nsvg__pathCubicBezShortTo(p, &cpx, &cpy, &cpx2, &cpy2, args, cmd == 's' ? 1 : 0); + break; + case 'Q': + case 'q': + nsvg__pathQuadBezTo(p, &cpx, &cpy, &cpx2, &cpy2, args, cmd == 'q' ? 1 : 0); + break; + case 'T': + case 't': + nsvg__pathQuadBezShortTo(p, &cpx, &cpy, &cpx2, &cpy2, args, cmd == 't' ? 1 : 0); + break; + case 'A': + case 'a': + nsvg__pathArcTo(p, &cpx, &cpy, args, cmd == 'a' ? 1 : 0); + cpx2 = cpx; cpy2 = cpy; + break; + default: + if (nargs >= 2) { + cpx = args[nargs-2]; + cpy = args[nargs-1]; + cpx2 = cpx; cpy2 = cpy; + } + break; + } + nargs = 0; + } + } else { + cmd = item[0]; + if (cmd == 'M' || cmd == 'm') { + // Commit path. + if (p->npts > 0) + nsvg__addPath(p, closedFlag); + // Start new subpath. + nsvg__resetPath(p); + closedFlag = 0; + nargs = 0; + } else if (initPoint == 0) { + // Do not allow other commands until initial point has been set (moveTo called once). + cmd = '\0'; + } + if (cmd == 'Z' || cmd == 'z') { + closedFlag = 1; + // Commit path. + if (p->npts > 0) { + // Move current point to first point + cpx = p->pts[0]; + cpy = p->pts[1]; + cpx2 = cpx; cpy2 = cpy; + nsvg__addPath(p, closedFlag); + } + // Start new subpath. + nsvg__resetPath(p); + nsvg__moveTo(p, cpx, cpy); + closedFlag = 0; + nargs = 0; + } + rargs = nsvg__getArgsPerElement(cmd); + if (rargs == -1) { + // Command not recognized + cmd = '\0'; + rargs = 0; + } + } + } + // Commit path. + if (p->npts) + nsvg__addPath(p, closedFlag); + } + + nsvg__addShape(p); +} + +static void nsvg__parseRect(NSVGparser* p, const char** attr) +{ + float x = 0.0f; + float y = 0.0f; + float w = 0.0f; + float h = 0.0f; + float rx = -1.0f; // marks not set + float ry = -1.0f; + int i; + + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "x") == 0) x = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigX(p), nsvg__actualWidth(p)); + if (strcmp(attr[i], "y") == 0) y = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigY(p), nsvg__actualHeight(p)); + if (strcmp(attr[i], "width") == 0) w = nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualWidth(p)); + if (strcmp(attr[i], "height") == 0) h = nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualHeight(p)); + if (strcmp(attr[i], "rx") == 0) rx = fabsf(nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualWidth(p))); + if (strcmp(attr[i], "ry") == 0) ry = fabsf(nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualHeight(p))); + } + } + + if (rx < 0.0f && ry > 0.0f) rx = ry; + if (ry < 0.0f && rx > 0.0f) ry = rx; + if (rx < 0.0f) rx = 0.0f; + if (ry < 0.0f) ry = 0.0f; + if (rx > w/2.0f) rx = w/2.0f; + if (ry > h/2.0f) ry = h/2.0f; + + if (w != 0.0f && h != 0.0f) { + nsvg__resetPath(p); + + if (rx < 0.00001f || ry < 0.0001f) { + nsvg__moveTo(p, x, y); + nsvg__lineTo(p, x+w, y); + nsvg__lineTo(p, x+w, y+h); + nsvg__lineTo(p, x, y+h); + } else { + // Rounded rectangle + nsvg__moveTo(p, x+rx, y); + nsvg__lineTo(p, x+w-rx, y); + nsvg__cubicBezTo(p, x+w-rx*(1-NSVG_KAPPA90), y, x+w, y+ry*(1-NSVG_KAPPA90), x+w, y+ry); + nsvg__lineTo(p, x+w, y+h-ry); + nsvg__cubicBezTo(p, x+w, y+h-ry*(1-NSVG_KAPPA90), x+w-rx*(1-NSVG_KAPPA90), y+h, x+w-rx, y+h); + nsvg__lineTo(p, x+rx, y+h); + nsvg__cubicBezTo(p, x+rx*(1-NSVG_KAPPA90), y+h, x, y+h-ry*(1-NSVG_KAPPA90), x, y+h-ry); + nsvg__lineTo(p, x, y+ry); + nsvg__cubicBezTo(p, x, y+ry*(1-NSVG_KAPPA90), x+rx*(1-NSVG_KAPPA90), y, x+rx, y); + } + + nsvg__addPath(p, 1); + + nsvg__addShape(p); + } +} + +static void nsvg__parseCircle(NSVGparser* p, const char** attr) +{ + float cx = 0.0f; + float cy = 0.0f; + float r = 0.0f; + int i; + + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "cx") == 0) cx = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigX(p), nsvg__actualWidth(p)); + if (strcmp(attr[i], "cy") == 0) cy = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigY(p), nsvg__actualHeight(p)); + if (strcmp(attr[i], "r") == 0) r = fabsf(nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualLength(p))); + } + } + + if (r > 0.0f) { + nsvg__resetPath(p); + + nsvg__moveTo(p, cx+r, cy); + nsvg__cubicBezTo(p, cx+r, cy+r*NSVG_KAPPA90, cx+r*NSVG_KAPPA90, cy+r, cx, cy+r); + nsvg__cubicBezTo(p, cx-r*NSVG_KAPPA90, cy+r, cx-r, cy+r*NSVG_KAPPA90, cx-r, cy); + nsvg__cubicBezTo(p, cx-r, cy-r*NSVG_KAPPA90, cx-r*NSVG_KAPPA90, cy-r, cx, cy-r); + nsvg__cubicBezTo(p, cx+r*NSVG_KAPPA90, cy-r, cx+r, cy-r*NSVG_KAPPA90, cx+r, cy); + + nsvg__addPath(p, 1); + + nsvg__addShape(p); + } +} + +static void nsvg__parseEllipse(NSVGparser* p, const char** attr) +{ + float cx = 0.0f; + float cy = 0.0f; + float rx = 0.0f; + float ry = 0.0f; + int i; + + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "cx") == 0) cx = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigX(p), nsvg__actualWidth(p)); + if (strcmp(attr[i], "cy") == 0) cy = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigY(p), nsvg__actualHeight(p)); + if (strcmp(attr[i], "rx") == 0) rx = fabsf(nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualWidth(p))); + if (strcmp(attr[i], "ry") == 0) ry = fabsf(nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualHeight(p))); + } + } + + if (rx > 0.0f && ry > 0.0f) { + + nsvg__resetPath(p); + + nsvg__moveTo(p, cx+rx, cy); + nsvg__cubicBezTo(p, cx+rx, cy+ry*NSVG_KAPPA90, cx+rx*NSVG_KAPPA90, cy+ry, cx, cy+ry); + nsvg__cubicBezTo(p, cx-rx*NSVG_KAPPA90, cy+ry, cx-rx, cy+ry*NSVG_KAPPA90, cx-rx, cy); + nsvg__cubicBezTo(p, cx-rx, cy-ry*NSVG_KAPPA90, cx-rx*NSVG_KAPPA90, cy-ry, cx, cy-ry); + nsvg__cubicBezTo(p, cx+rx*NSVG_KAPPA90, cy-ry, cx+rx, cy-ry*NSVG_KAPPA90, cx+rx, cy); + + nsvg__addPath(p, 1); + + nsvg__addShape(p); + } +} + +static void nsvg__parseLine(NSVGparser* p, const char** attr) +{ + float x1 = 0.0; + float y1 = 0.0; + float x2 = 0.0; + float y2 = 0.0; + int i; + + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "x1") == 0) x1 = nsvg__parseCoordinate(p, attr[i + 1], nsvg__actualOrigX(p), nsvg__actualWidth(p)); + if (strcmp(attr[i], "y1") == 0) y1 = nsvg__parseCoordinate(p, attr[i + 1], nsvg__actualOrigY(p), nsvg__actualHeight(p)); + if (strcmp(attr[i], "x2") == 0) x2 = nsvg__parseCoordinate(p, attr[i + 1], nsvg__actualOrigX(p), nsvg__actualWidth(p)); + if (strcmp(attr[i], "y2") == 0) y2 = nsvg__parseCoordinate(p, attr[i + 1], nsvg__actualOrigY(p), nsvg__actualHeight(p)); + } + } + + nsvg__resetPath(p); + + nsvg__moveTo(p, x1, y1); + nsvg__lineTo(p, x2, y2); + + nsvg__addPath(p, 0); + + nsvg__addShape(p); +} + +static void nsvg__parsePoly(NSVGparser* p, const char** attr, int closeFlag) +{ + int i; + const char* s; + float args[2]; + int nargs, npts = 0; + char item[64]; + + nsvg__resetPath(p); + + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "points") == 0) { + s = attr[i + 1]; + nargs = 0; + while (*s) { + s = nsvg__getNextPathItem(s, item); + args[nargs++] = (float)nsvg__atof(item); + if (nargs >= 2) { + if (npts == 0) + nsvg__moveTo(p, args[0], args[1]); + else + nsvg__lineTo(p, args[0], args[1]); + nargs = 0; + npts++; + } + } + } + } + } + + nsvg__addPath(p, (char)closeFlag); + + nsvg__addShape(p); +} + +static void nsvg__parseSVG(NSVGparser* p, const char** attr) +{ + int i; + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "width") == 0) { + p->image->width = nsvg__parseCoordinate(p, attr[i + 1], 0.0f, 0.0f); + } else if (strcmp(attr[i], "height") == 0) { + p->image->height = nsvg__parseCoordinate(p, attr[i + 1], 0.0f, 0.0f); + } else if (strcmp(attr[i], "viewBox") == 0) { + const char *s = attr[i + 1]; + char buf[64]; + s = nsvg__parseNumber(s, buf, 64); + p->viewMinx = nsvg__atof(buf); + while (*s && (nsvg__isspace(*s) || *s == '%' || *s == ',')) s++; + if (!*s) return; + s = nsvg__parseNumber(s, buf, 64); + p->viewMiny = nsvg__atof(buf); + while (*s && (nsvg__isspace(*s) || *s == '%' || *s == ',')) s++; + if (!*s) return; + s = nsvg__parseNumber(s, buf, 64); + p->viewWidth = nsvg__atof(buf); + while (*s && (nsvg__isspace(*s) || *s == '%' || *s == ',')) s++; + if (!*s) return; + s = nsvg__parseNumber(s, buf, 64); + p->viewHeight = nsvg__atof(buf); + } else if (strcmp(attr[i], "preserveAspectRatio") == 0) { + if (strstr(attr[i + 1], "none") != 0) { + // No uniform scaling + p->alignType = NSVG_ALIGN_NONE; + } else { + // Parse X align + if (strstr(attr[i + 1], "xMin") != 0) + p->alignX = NSVG_ALIGN_MIN; + else if (strstr(attr[i + 1], "xMid") != 0) + p->alignX = NSVG_ALIGN_MID; + else if (strstr(attr[i + 1], "xMax") != 0) + p->alignX = NSVG_ALIGN_MAX; + // Parse X align + if (strstr(attr[i + 1], "yMin") != 0) + p->alignY = NSVG_ALIGN_MIN; + else if (strstr(attr[i + 1], "yMid") != 0) + p->alignY = NSVG_ALIGN_MID; + else if (strstr(attr[i + 1], "yMax") != 0) + p->alignY = NSVG_ALIGN_MAX; + // Parse meet/slice + p->alignType = NSVG_ALIGN_MEET; + if (strstr(attr[i + 1], "slice") != 0) + p->alignType = NSVG_ALIGN_SLICE; + } + } + } + } +} + +static void nsvg__parseGradient(NSVGparser* p, const char** attr, signed char type) +{ + int i; + NSVGgradientData* grad = (NSVGgradientData*)malloc(sizeof(NSVGgradientData)); + if (grad == NULL) return; + memset(grad, 0, sizeof(NSVGgradientData)); + grad->units = NSVG_OBJECT_SPACE; + grad->type = type; + if (grad->type == NSVG_PAINT_LINEAR_GRADIENT) { + grad->linear.x1 = nsvg__coord(0.0f, NSVG_UNITS_PERCENT); + grad->linear.y1 = nsvg__coord(0.0f, NSVG_UNITS_PERCENT); + grad->linear.x2 = nsvg__coord(100.0f, NSVG_UNITS_PERCENT); + grad->linear.y2 = nsvg__coord(0.0f, NSVG_UNITS_PERCENT); + } else if (grad->type == NSVG_PAINT_RADIAL_GRADIENT) { + grad->radial.cx = nsvg__coord(50.0f, NSVG_UNITS_PERCENT); + grad->radial.cy = nsvg__coord(50.0f, NSVG_UNITS_PERCENT); + grad->radial.r = nsvg__coord(50.0f, NSVG_UNITS_PERCENT); + } + + nsvg__xformIdentity(grad->xform); + + for (i = 0; attr[i]; i += 2) { + if (strcmp(attr[i], "id") == 0) { + strncpy(grad->id, attr[i+1], 63); + grad->id[63] = '\0'; + } else if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "gradientUnits") == 0) { + if (strcmp(attr[i+1], "objectBoundingBox") == 0) + grad->units = NSVG_OBJECT_SPACE; + else + grad->units = NSVG_USER_SPACE; + } else if (strcmp(attr[i], "gradientTransform") == 0) { + nsvg__parseTransform(grad->xform, attr[i + 1]); + } else if (strcmp(attr[i], "cx") == 0) { + grad->radial.cx = nsvg__parseCoordinateRaw(attr[i + 1]); + } else if (strcmp(attr[i], "cy") == 0) { + grad->radial.cy = nsvg__parseCoordinateRaw(attr[i + 1]); + } else if (strcmp(attr[i], "r") == 0) { + grad->radial.r = nsvg__parseCoordinateRaw(attr[i + 1]); + } else if (strcmp(attr[i], "fx") == 0) { + grad->radial.fx = nsvg__parseCoordinateRaw(attr[i + 1]); + } else if (strcmp(attr[i], "fy") == 0) { + grad->radial.fy = nsvg__parseCoordinateRaw(attr[i + 1]); + } else if (strcmp(attr[i], "x1") == 0) { + grad->linear.x1 = nsvg__parseCoordinateRaw(attr[i + 1]); + } else if (strcmp(attr[i], "y1") == 0) { + grad->linear.y1 = nsvg__parseCoordinateRaw(attr[i + 1]); + } else if (strcmp(attr[i], "x2") == 0) { + grad->linear.x2 = nsvg__parseCoordinateRaw(attr[i + 1]); + } else if (strcmp(attr[i], "y2") == 0) { + grad->linear.y2 = nsvg__parseCoordinateRaw(attr[i + 1]); + } else if (strcmp(attr[i], "spreadMethod") == 0) { + if (strcmp(attr[i+1], "pad") == 0) + grad->spread = NSVG_SPREAD_PAD; + else if (strcmp(attr[i+1], "reflect") == 0) + grad->spread = NSVG_SPREAD_REFLECT; + else if (strcmp(attr[i+1], "repeat") == 0) + grad->spread = NSVG_SPREAD_REPEAT; + } else if (strcmp(attr[i], "xlink:href") == 0) { + const char *href = attr[i+1]; + strncpy(grad->ref, href+1, 62); + grad->ref[62] = '\0'; + } + } + } + + grad->next = p->gradients; + p->gradients = grad; +} + +static void nsvg__parseGradientStop(NSVGparser* p, const char** attr) +{ + NSVGattrib* curAttr = nsvg__getAttr(p); + NSVGgradientData* grad; + NSVGgradientStop* stop; + int i, idx; + + curAttr->stopOffset = 0; + curAttr->stopColor = 0; + curAttr->stopOpacity = 1.0f; + + for (i = 0; attr[i]; i += 2) { + nsvg__parseAttr(p, attr[i], attr[i + 1]); + } + + // Add stop to the last gradient. + grad = p->gradients; + if (grad == NULL) return; + + grad->nstops++; + grad->stops = (NSVGgradientStop*)realloc(grad->stops, sizeof(NSVGgradientStop)*grad->nstops); + if (grad->stops == NULL) return; + + // Insert + idx = grad->nstops-1; + for (i = 0; i < grad->nstops-1; i++) { + if (curAttr->stopOffset < grad->stops[i].offset) { + idx = i; + break; + } + } + if (idx != grad->nstops-1) { + for (i = grad->nstops-1; i > idx; i--) + grad->stops[i] = grad->stops[i-1]; + } + + stop = &grad->stops[idx]; + stop->color = curAttr->stopColor; + stop->color |= (unsigned int)(curAttr->stopOpacity*255) << 24; + stop->offset = curAttr->stopOffset; +} + +static void nsvg__startElement(void* ud, const char* el, const char** attr) +{ + NSVGparser* p = (NSVGparser*)ud; + + if (p->defsFlag) { + // Skip everything but gradients in defs + if (strcmp(el, "linearGradient") == 0) { + nsvg__parseGradient(p, attr, NSVG_PAINT_LINEAR_GRADIENT); + } else if (strcmp(el, "radialGradient") == 0) { + nsvg__parseGradient(p, attr, NSVG_PAINT_RADIAL_GRADIENT); + } else if (strcmp(el, "stop") == 0) { + nsvg__parseGradientStop(p, attr); + } + return; + } + + if (strcmp(el, "g") == 0) { + nsvg__pushAttr(p); + nsvg__parseAttribs(p, attr); + } else if (strcmp(el, "path") == 0) { + if (p->pathFlag) // Do not allow nested paths. + return; + nsvg__pushAttr(p); + nsvg__parsePath(p, attr); + nsvg__popAttr(p); + } else if (strcmp(el, "rect") == 0) { + nsvg__pushAttr(p); + nsvg__parseRect(p, attr); + nsvg__popAttr(p); + } else if (strcmp(el, "circle") == 0) { + nsvg__pushAttr(p); + nsvg__parseCircle(p, attr); + nsvg__popAttr(p); + } else if (strcmp(el, "ellipse") == 0) { + nsvg__pushAttr(p); + nsvg__parseEllipse(p, attr); + nsvg__popAttr(p); + } else if (strcmp(el, "line") == 0) { + nsvg__pushAttr(p); + nsvg__parseLine(p, attr); + nsvg__popAttr(p); + } else if (strcmp(el, "polyline") == 0) { + nsvg__pushAttr(p); + nsvg__parsePoly(p, attr, 0); + nsvg__popAttr(p); + } else if (strcmp(el, "polygon") == 0) { + nsvg__pushAttr(p); + nsvg__parsePoly(p, attr, 1); + nsvg__popAttr(p); + } else if (strcmp(el, "linearGradient") == 0) { + nsvg__parseGradient(p, attr, NSVG_PAINT_LINEAR_GRADIENT); + } else if (strcmp(el, "radialGradient") == 0) { + nsvg__parseGradient(p, attr, NSVG_PAINT_RADIAL_GRADIENT); + } else if (strcmp(el, "stop") == 0) { + nsvg__parseGradientStop(p, attr); + } else if (strcmp(el, "defs") == 0) { + p->defsFlag = 1; + } else if (strcmp(el, "svg") == 0) { + nsvg__parseSVG(p, attr); + } +} + +static void nsvg__endElement(void* ud, const char* el) +{ + NSVGparser* p = (NSVGparser*)ud; + + if (strcmp(el, "g") == 0) { + nsvg__popAttr(p); + } else if (strcmp(el, "path") == 0) { + p->pathFlag = 0; + } else if (strcmp(el, "defs") == 0) { + p->defsFlag = 0; + } +} + +static void nsvg__content(void* ud, const char* s) +{ + NSVG_NOTUSED(ud); + NSVG_NOTUSED(s); + // empty +} + +static void nsvg__imageBounds(NSVGparser* p, float* bounds) +{ + NSVGshape* shape; + shape = p->image->shapes; + if (shape == NULL) { + bounds[0] = bounds[1] = bounds[2] = bounds[3] = 0.0; + return; + } + bounds[0] = shape->bounds[0]; + bounds[1] = shape->bounds[1]; + bounds[2] = shape->bounds[2]; + bounds[3] = shape->bounds[3]; + for (shape = shape->next; shape != NULL; shape = shape->next) { + bounds[0] = nsvg__minf(bounds[0], shape->bounds[0]); + bounds[1] = nsvg__minf(bounds[1], shape->bounds[1]); + bounds[2] = nsvg__maxf(bounds[2], shape->bounds[2]); + bounds[3] = nsvg__maxf(bounds[3], shape->bounds[3]); + } +} + +static float nsvg__viewAlign(float content, float container, int type) +{ + if (type == NSVG_ALIGN_MIN) + return 0; + else if (type == NSVG_ALIGN_MAX) + return container - content; + // mid + return (container - content) * 0.5f; +} + +static void nsvg__scaleGradient(NSVGgradient* grad, float tx, float ty, float sx, float sy) +{ + float t[6]; + nsvg__xformSetTranslation(t, tx, ty); + nsvg__xformMultiply (grad->xform, t); + + nsvg__xformSetScale(t, sx, sy); + nsvg__xformMultiply (grad->xform, t); +} + +static void nsvg__scaleToViewbox(NSVGparser* p, const char* units) +{ + NSVGshape* shape; + NSVGpath* path; + float tx, ty, sx, sy, us, bounds[4], t[6], avgs; + int i; + float* pt; + + // Guess image size if not set completely. + nsvg__imageBounds(p, bounds); + + if (p->viewWidth == 0) { + if (p->image->width > 0) { + p->viewWidth = p->image->width; + } else { + p->viewMinx = bounds[0]; + p->viewWidth = bounds[2] - bounds[0]; + } + } + if (p->viewHeight == 0) { + if (p->image->height > 0) { + p->viewHeight = p->image->height; + } else { + p->viewMiny = bounds[1]; + p->viewHeight = bounds[3] - bounds[1]; + } + } + if (p->image->width == 0) + p->image->width = p->viewWidth; + if (p->image->height == 0) + p->image->height = p->viewHeight; + + tx = -p->viewMinx; + ty = -p->viewMiny; + sx = p->viewWidth > 0 ? p->image->width / p->viewWidth : 0; + sy = p->viewHeight > 0 ? p->image->height / p->viewHeight : 0; + // Unit scaling + us = 1.0f / nsvg__convertToPixels(p, nsvg__coord(1.0f, nsvg__parseUnits(units)), 0.0f, 1.0f); + + // Fix aspect ratio + if (p->alignType == NSVG_ALIGN_MEET) { + // fit whole image into viewbox + sx = sy = nsvg__minf(sx, sy); + tx += nsvg__viewAlign(p->viewWidth*sx, p->image->width, p->alignX) / sx; + ty += nsvg__viewAlign(p->viewHeight*sy, p->image->height, p->alignY) / sy; + } else if (p->alignType == NSVG_ALIGN_SLICE) { + // fill whole viewbox with image + sx = sy = nsvg__maxf(sx, sy); + tx += nsvg__viewAlign(p->viewWidth*sx, p->image->width, p->alignX) / sx; + ty += nsvg__viewAlign(p->viewHeight*sy, p->image->height, p->alignY) / sy; + } + + // Transform + sx *= us; + sy *= us; + avgs = (sx+sy) / 2.0f; + for (shape = p->image->shapes; shape != NULL; shape = shape->next) { + shape->bounds[0] = (shape->bounds[0] + tx) * sx; + shape->bounds[1] = (shape->bounds[1] + ty) * sy; + shape->bounds[2] = (shape->bounds[2] + tx) * sx; + shape->bounds[3] = (shape->bounds[3] + ty) * sy; + for (path = shape->paths; path != NULL; path = path->next) { + path->bounds[0] = (path->bounds[0] + tx) * sx; + path->bounds[1] = (path->bounds[1] + ty) * sy; + path->bounds[2] = (path->bounds[2] + tx) * sx; + path->bounds[3] = (path->bounds[3] + ty) * sy; + for (i =0; i < path->npts; i++) { + pt = &path->pts[i*2]; + pt[0] = (pt[0] + tx) * sx; + pt[1] = (pt[1] + ty) * sy; + } + } + + if (shape->fill.type == NSVG_PAINT_LINEAR_GRADIENT || shape->fill.type == NSVG_PAINT_RADIAL_GRADIENT) { + nsvg__scaleGradient(shape->fill.gradient, tx,ty, sx,sy); + memcpy(t, shape->fill.gradient->xform, sizeof(float)*6); + nsvg__xformInverse(shape->fill.gradient->xform, t); + } + if (shape->stroke.type == NSVG_PAINT_LINEAR_GRADIENT || shape->stroke.type == NSVG_PAINT_RADIAL_GRADIENT) { + nsvg__scaleGradient(shape->stroke.gradient, tx,ty, sx,sy); + memcpy(t, shape->stroke.gradient->xform, sizeof(float)*6); + nsvg__xformInverse(shape->stroke.gradient->xform, t); + } + + shape->strokeWidth *= avgs; + shape->strokeDashOffset *= avgs; + for (i = 0; i < shape->strokeDashCount; i++) + shape->strokeDashArray[i] *= avgs; + } +} + +static void nsvg__createGradients(NSVGparser* p) +{ + NSVGshape* shape; + + for (shape = p->image->shapes; shape != NULL; shape = shape->next) { + if (shape->fill.type == NSVG_PAINT_UNDEF) { + if (shape->fillGradient[0] != '\0') { + float inv[6], localBounds[4]; + nsvg__xformInverse(inv, shape->xform); + nsvg__getLocalBounds(localBounds, shape, inv); + shape->fill.gradient = nsvg__createGradient(p, shape->fillGradient, localBounds, shape->xform, &shape->fill.type); + } + if (shape->fill.type == NSVG_PAINT_UNDEF) { + shape->fill.type = NSVG_PAINT_NONE; + } + } + if (shape->stroke.type == NSVG_PAINT_UNDEF) { + if (shape->strokeGradient[0] != '\0') { + float inv[6], localBounds[4]; + nsvg__xformInverse(inv, shape->xform); + nsvg__getLocalBounds(localBounds, shape, inv); + shape->stroke.gradient = nsvg__createGradient(p, shape->strokeGradient, localBounds, shape->xform, &shape->stroke.type); + } + if (shape->stroke.type == NSVG_PAINT_UNDEF) { + shape->stroke.type = NSVG_PAINT_NONE; + } + } + } +} + +NSVGimage* nsvgParse(char* input, const char* units, float dpi) +{ + NSVGparser* p; + NSVGimage* ret = 0; + + p = nsvg__createParser(); + if (p == NULL) { + return NULL; + } + p->dpi = dpi; + + nsvg__parseXML(input, nsvg__startElement, nsvg__endElement, nsvg__content, p); + + // Create gradients after all definitions have been parsed + nsvg__createGradients(p); + + // Scale to viewBox + nsvg__scaleToViewbox(p, units); + + ret = p->image; + p->image = NULL; + + nsvg__deleteParser(p); + + return ret; +} + +#if WIN32 +#define WIN32_LEAN_AND_MEAN +#include "windows.h" +#endif + +NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi) +{ + FILE* fp = NULL; + size_t size; + char* data = NULL; + NSVGimage* image = NULL; + +#if WIN32 + int name_len = MultiByteToWideChar(CP_UTF8, NULL, filename, strlen(filename), NULL, 0); + wchar_t w_fname[512]; + memset(w_fname, 0, sizeof(w_fname)); + MultiByteToWideChar(CP_UTF8, NULL, filename, strlen(filename), w_fname, name_len); + w_fname[name_len] = '\0'; + fp = _wfopen(w_fname, L"rb"); +#else + fp = fopen(filename, "rb"); +#endif + if (!fp) goto error; + fseek(fp, 0, SEEK_END); + size = ftell(fp); + fseek(fp, 0, SEEK_SET); + data = (char*)malloc(size+1); + if (data == NULL) goto error; + if (fread(data, 1, size, fp) != size) goto error; + data[size] = '\0'; // Must be null terminated. + fclose(fp); + image = nsvgParse(data, units, dpi); + free(data); + + return image; + +error: + if (fp) fclose(fp); + if (data) free(data); + if (image) nsvgDelete(image); + return NULL; +} + +NSVGpath* nsvgDuplicatePath(NSVGpath* p) +{ + NSVGpath* res = NULL; + + if (p == NULL) + return NULL; + + res = (NSVGpath*)malloc(sizeof(NSVGpath)); + if (res == NULL) goto error; + memset(res, 0, sizeof(NSVGpath)); + + res->pts = (float*)malloc(p->npts*2*sizeof(float)); + if (res->pts == NULL) goto error; + memcpy(res->pts, p->pts, p->npts * sizeof(float) * 2); + res->npts = p->npts; + + memcpy(res->bounds, p->bounds, sizeof(p->bounds)); + + res->closed = p->closed; + + return res; + +error: + if (res != NULL) { + free(res->pts); + free(res); + } + return NULL; +} + +void nsvgDelete(NSVGimage* image) +{ + NSVGshape *snext, *shape; + if (image == NULL) return; + shape = image->shapes; + while (shape != NULL) { + snext = shape->next; + nsvg__deletePaths(shape->paths); + nsvg__deletePaint(&shape->fill); + nsvg__deletePaint(&shape->stroke); + free(shape); + shape = snext; + } + free(image); +} + +#endif // NANOSVG_IMPLEMENTATION + +#endif // NANOSVG_H diff --git a/src/nanosvg/nanosvgrast.h b/src/nanosvg/nanosvgrast.h new file mode 100644 index 0000000000..a4b866beba --- /dev/null +++ b/src/nanosvg/nanosvgrast.h @@ -0,0 +1,1483 @@ +/* + * Copyright (c) 2013-14 Mikko Mononen memon@inside.org + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * The polygon rasterization is heavily based on stb_truetype rasterizer + * by Sean Barrett - http://nothings.org/ + * + */ + +/* Modified by FLTK to support non-square X,Y axes scaling. + * + * Added: nsvgRasterizeXY() +*/ + + +#ifndef NANOSVGRAST_H +#define NANOSVGRAST_H + +#include "nanosvg.h" + +#ifndef NANOSVGRAST_CPLUSPLUS +#ifdef __cplusplus +extern "C" { +#endif +#endif + +typedef struct NSVGrasterizer NSVGrasterizer; + +/* Example Usage: + // Load SVG + NSVGimage* image; + image = nsvgParseFromFile("test.svg", "px", 96); + + // Create rasterizer (can be used to render multiple images). + struct NSVGrasterizer* rast = nsvgCreateRasterizer(); + // Allocate memory for image + unsigned char* img = malloc(w*h*4); + // Rasterize + nsvgRasterize(rast, image, 0,0,1, img, w, h, w*4); + + // For non-square X,Y scaling, use + nsvgRasterizeXY(rast, image, 0,0,1,1, img, w, h, w*4); +*/ + +// Allocated rasterizer context. +NSVGrasterizer* nsvgCreateRasterizer(void); + +// Rasterizes SVG image, returns RGBA image (non-premultiplied alpha) +// r - pointer to rasterizer context +// image - pointer to image to rasterize +// tx,ty - image offset (applied after scaling) +// scale - image scale (assumes square aspect ratio) +// dst - pointer to destination image data, 4 bytes per pixel (RGBA) +// w - width of the image to render +// h - height of the image to render +// stride - number of bytes per scaleline in the destination buffer +void nsvgRasterize(NSVGrasterizer* r, + NSVGimage* image, float tx, float ty, float scale, + unsigned char* dst, int w, int h, int stride); + +// As above, but allow X and Y axes to scale independently for non-square aspects +void nsvgRasterizeXY(NSVGrasterizer* r, + NSVGimage* image, float tx, float ty, + float sx, float sy, + unsigned char* dst, int w, int h, int stride); + +// Deletes rasterizer context. +void nsvgDeleteRasterizer(NSVGrasterizer*); + + +#ifndef NANOSVGRAST_CPLUSPLUS +#ifdef __cplusplus +} +#endif +#endif + +#ifdef NANOSVGRAST_IMPLEMENTATION + +#include +#include +#include + +#define NSVG__SUBSAMPLES 5 +#define NSVG__FIXSHIFT 10 +#define NSVG__FIX (1 << NSVG__FIXSHIFT) +#define NSVG__FIXMASK (NSVG__FIX-1) +#define NSVG__MEMPAGE_SIZE 1024 + +typedef struct NSVGedge { + float x0,y0, x1,y1; + int dir; + struct NSVGedge* next; +} NSVGedge; + +typedef struct NSVGpoint { + float x, y; + float dx, dy; + float len; + float dmx, dmy; + unsigned char flags; +} NSVGpoint; + +typedef struct NSVGactiveEdge { + int x,dx; + float ey; + int dir; + struct NSVGactiveEdge *next; +} NSVGactiveEdge; + +typedef struct NSVGmemPage { + unsigned char mem[NSVG__MEMPAGE_SIZE]; + int size; + struct NSVGmemPage* next; +} NSVGmemPage; + +typedef struct NSVGcachedPaint { + signed char type; + char spread; + float xform[6]; + unsigned int colors[256]; +} NSVGcachedPaint; + +struct NSVGrasterizer +{ + float px, py; + + float tessTol; + float distTol; + + NSVGedge* edges; + int nedges; + int cedges; + + NSVGpoint* points; + int npoints; + int cpoints; + + NSVGpoint* points2; + int npoints2; + int cpoints2; + + NSVGactiveEdge* freelist; + NSVGmemPage* pages; + NSVGmemPage* curpage; + + unsigned char* scanline; + int cscanline; + + unsigned char* bitmap; + int width, height, stride; +}; + +NSVGrasterizer* nsvgCreateRasterizer(void) +{ + NSVGrasterizer* r = (NSVGrasterizer*)malloc(sizeof(NSVGrasterizer)); + if (r == NULL) goto error; + memset(r, 0, sizeof(NSVGrasterizer)); + + r->tessTol = 0.25f; + r->distTol = 0.01f; + + return r; + +error: + nsvgDeleteRasterizer(r); + return NULL; +} + +void nsvgDeleteRasterizer(NSVGrasterizer* r) +{ + NSVGmemPage* p; + + if (r == NULL) return; + + p = r->pages; + while (p != NULL) { + NSVGmemPage* next = p->next; + free(p); + p = next; + } + + if (r->edges) free(r->edges); + if (r->points) free(r->points); + if (r->points2) free(r->points2); + if (r->scanline) free(r->scanline); + + free(r); +} + +static NSVGmemPage* nsvg__nextPage(NSVGrasterizer* r, NSVGmemPage* cur) +{ + NSVGmemPage *newp; + + // If using existing chain, return the next page in chain + if (cur != NULL && cur->next != NULL) { + return cur->next; + } + + // Alloc new page + newp = (NSVGmemPage*)malloc(sizeof(NSVGmemPage)); + if (newp == NULL) return NULL; + memset(newp, 0, sizeof(NSVGmemPage)); + + // Add to linked list + if (cur != NULL) + cur->next = newp; + else + r->pages = newp; + + return newp; +} + +static void nsvg__resetPool(NSVGrasterizer* r) +{ + NSVGmemPage* p = r->pages; + while (p != NULL) { + p->size = 0; + p = p->next; + } + r->curpage = r->pages; +} + +static unsigned char* nsvg__alloc(NSVGrasterizer* r, int size) +{ + unsigned char* buf; + if (size > NSVG__MEMPAGE_SIZE) return NULL; + if (r->curpage == NULL || r->curpage->size+size > NSVG__MEMPAGE_SIZE) { + r->curpage = nsvg__nextPage(r, r->curpage); + } + buf = &r->curpage->mem[r->curpage->size]; + r->curpage->size += size; + return buf; +} + +static int nsvg__ptEquals(float x1, float y1, float x2, float y2, float tol) +{ + float dx = x2 - x1; + float dy = y2 - y1; + return dx*dx + dy*dy < tol*tol; +} + +static void nsvg__addPathPoint(NSVGrasterizer* r, float x, float y, int flags) +{ + NSVGpoint* pt; + + if (r->npoints > 0) { + pt = &r->points[r->npoints-1]; + if (nsvg__ptEquals(pt->x,pt->y, x,y, r->distTol)) { + pt->flags = (unsigned char)(pt->flags | flags); + return; + } + } + + if (r->npoints+1 > r->cpoints) { + r->cpoints = r->cpoints > 0 ? r->cpoints * 2 : 64; + r->points = (NSVGpoint*)realloc(r->points, sizeof(NSVGpoint) * r->cpoints); + if (r->points == NULL) return; + } + + pt = &r->points[r->npoints]; + pt->x = x; + pt->y = y; + pt->flags = (unsigned char)flags; + r->npoints++; +} + +static void nsvg__appendPathPoint(NSVGrasterizer* r, NSVGpoint pt) +{ + if (r->npoints+1 > r->cpoints) { + r->cpoints = r->cpoints > 0 ? r->cpoints * 2 : 64; + r->points = (NSVGpoint*)realloc(r->points, sizeof(NSVGpoint) * r->cpoints); + if (r->points == NULL) return; + } + r->points[r->npoints] = pt; + r->npoints++; +} + +static void nsvg__duplicatePoints(NSVGrasterizer* r) +{ + if (r->npoints > r->cpoints2) { + r->cpoints2 = r->npoints; + r->points2 = (NSVGpoint*)realloc(r->points2, sizeof(NSVGpoint) * r->cpoints2); + if (r->points2 == NULL) return; + } + + memcpy(r->points2, r->points, sizeof(NSVGpoint) * r->npoints); + r->npoints2 = r->npoints; +} + +static void nsvg__addEdge(NSVGrasterizer* r, float x0, float y0, float x1, float y1) +{ + NSVGedge* e; + + // Skip horizontal edges + if (y0 == y1) + return; + + if (r->nedges+1 > r->cedges) { + r->cedges = r->cedges > 0 ? r->cedges * 2 : 64; + r->edges = (NSVGedge*)realloc(r->edges, sizeof(NSVGedge) * r->cedges); + if (r->edges == NULL) return; + } + + e = &r->edges[r->nedges]; + r->nedges++; + + if (y0 < y1) { + e->x0 = x0; + e->y0 = y0; + e->x1 = x1; + e->y1 = y1; + e->dir = 1; + } else { + e->x0 = x1; + e->y0 = y1; + e->x1 = x0; + e->y1 = y0; + e->dir = -1; + } +} + +static float nsvg__normalize(float *x, float* y) +{ + float d = sqrtf((*x)*(*x) + (*y)*(*y)); + if (d > 1e-6f) { + float id = 1.0f / d; + *x *= id; + *y *= id; + } + return d; +} + +static float nsvg__absf(float x) { return x < 0 ? -x : x; } +static float nsvg__roundf(float x) { return (x >= 0) ? floorf(x + 0.5) : ceilf(x - 0.5); } + +static void nsvg__flattenCubicBez(NSVGrasterizer* r, + float x1, float y1, float x2, float y2, + float x3, float y3, float x4, float y4, + int level, int type) +{ + float x12,y12,x23,y23,x34,y34,x123,y123,x234,y234,x1234,y1234; + float dx,dy,d2,d3; + + if (level > 10) return; + + x12 = (x1+x2)*0.5f; + y12 = (y1+y2)*0.5f; + x23 = (x2+x3)*0.5f; + y23 = (y2+y3)*0.5f; + x34 = (x3+x4)*0.5f; + y34 = (y3+y4)*0.5f; + x123 = (x12+x23)*0.5f; + y123 = (y12+y23)*0.5f; + + dx = x4 - x1; + dy = y4 - y1; + d2 = nsvg__absf(((x2 - x4) * dy - (y2 - y4) * dx)); + d3 = nsvg__absf(((x3 - x4) * dy - (y3 - y4) * dx)); + + if ((d2 + d3)*(d2 + d3) < r->tessTol * (dx*dx + dy*dy)) { + nsvg__addPathPoint(r, x4, y4, type); + return; + } + + x234 = (x23+x34)*0.5f; + y234 = (y23+y34)*0.5f; + x1234 = (x123+x234)*0.5f; + y1234 = (y123+y234)*0.5f; + + nsvg__flattenCubicBez(r, x1,y1, x12,y12, x123,y123, x1234,y1234, level+1, 0); + nsvg__flattenCubicBez(r, x1234,y1234, x234,y234, x34,y34, x4,y4, level+1, type); +} + +static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float sx, float sy) +{ + int i, j; + NSVGpath* path; + + for (path = shape->paths; path != NULL; path = path->next) { + r->npoints = 0; + // Flatten path + nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, 0); + for (i = 0; i < path->npts-1; i += 3) { + float* p = &path->pts[i*2]; + nsvg__flattenCubicBez(r, p[0]*sx,p[1]*sy, p[2]*sx,p[3]*sy, p[4]*sx,p[5]*sy, p[6]*sx,p[7]*sy, 0, 0); + } + // Close path + nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, 0); + // Build edges + for (i = 0, j = r->npoints-1; i < r->npoints; j = i++) + nsvg__addEdge(r, r->points[j].x, r->points[j].y, r->points[i].x, r->points[i].y); + } +} + +enum NSVGpointFlags +{ + NSVG_PT_CORNER = 0x01, + NSVG_PT_BEVEL = 0x02, + NSVG_PT_LEFT = 0x04 +}; + +static void nsvg__initClosed(NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth) +{ + float w = lineWidth * 0.5f; + float dx = p1->x - p0->x; + float dy = p1->y - p0->y; + float len = nsvg__normalize(&dx, &dy); + float px = p0->x + dx*len*0.5f, py = p0->y + dy*len*0.5f; + float dlx = dy, dly = -dx; + float lx = px - dlx*w, ly = py - dly*w; + float rx = px + dlx*w, ry = py + dly*w; + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +static void nsvg__buttCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p, float dx, float dy, float lineWidth, int connect) +{ + float w = lineWidth * 0.5f; + float px = p->x, py = p->y; + float dlx = dy, dly = -dx; + float lx = px - dlx*w, ly = py - dly*w; + float rx = px + dlx*w, ry = py + dly*w; + + nsvg__addEdge(r, lx, ly, rx, ry); + + if (connect) { + nsvg__addEdge(r, left->x, left->y, lx, ly); + nsvg__addEdge(r, rx, ry, right->x, right->y); + } + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +static void nsvg__squareCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p, float dx, float dy, float lineWidth, int connect) +{ + float w = lineWidth * 0.5f; + float px = p->x - dx*w, py = p->y - dy*w; + float dlx = dy, dly = -dx; + float lx = px - dlx*w, ly = py - dly*w; + float rx = px + dlx*w, ry = py + dly*w; + + nsvg__addEdge(r, lx, ly, rx, ry); + + if (connect) { + nsvg__addEdge(r, left->x, left->y, lx, ly); + nsvg__addEdge(r, rx, ry, right->x, right->y); + } + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +#ifndef NSVG_PI +#define NSVG_PI (3.14159265358979323846264338327f) +#endif + +static void nsvg__roundCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p, float dx, float dy, float lineWidth, int ncap, int connect) +{ + int i; + float w = lineWidth * 0.5f; + float px = p->x, py = p->y; + float dlx = dy, dly = -dx; + float lx = 0, ly = 0, rx = 0, ry = 0, prevx = 0, prevy = 0; + + for (i = 0; i < ncap; i++) { + float a = (float)i/(float)(ncap-1)*NSVG_PI; + float ax = cosf(a) * w, ay = sinf(a) * w; + float x = px - dlx*ax - dx*ay; + float y = py - dly*ax - dy*ay; + + if (i > 0) + nsvg__addEdge(r, prevx, prevy, x, y); + + prevx = x; + prevy = y; + + if (i == 0) { + lx = x; ly = y; + } else if (i == ncap-1) { + rx = x; ry = y; + } + } + + if (connect) { + nsvg__addEdge(r, left->x, left->y, lx, ly); + nsvg__addEdge(r, rx, ry, right->x, right->y); + } + + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +static void nsvg__bevelJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth) +{ + float w = lineWidth * 0.5f; + float dlx0 = p0->dy, dly0 = -p0->dx; + float dlx1 = p1->dy, dly1 = -p1->dx; + float lx0 = p1->x - (dlx0 * w), ly0 = p1->y - (dly0 * w); + float rx0 = p1->x + (dlx0 * w), ry0 = p1->y + (dly0 * w); + float lx1 = p1->x - (dlx1 * w), ly1 = p1->y - (dly1 * w); + float rx1 = p1->x + (dlx1 * w), ry1 = p1->y + (dly1 * w); + + nsvg__addEdge(r, lx0, ly0, left->x, left->y); + nsvg__addEdge(r, lx1, ly1, lx0, ly0); + + nsvg__addEdge(r, right->x, right->y, rx0, ry0); + nsvg__addEdge(r, rx0, ry0, rx1, ry1); + + left->x = lx1; left->y = ly1; + right->x = rx1; right->y = ry1; +} + +static void nsvg__miterJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth) +{ + float w = lineWidth * 0.5f; + float dlx0 = p0->dy, dly0 = -p0->dx; + float dlx1 = p1->dy, dly1 = -p1->dx; + float lx0, rx0, lx1, rx1; + float ly0, ry0, ly1, ry1; + + if (p1->flags & NSVG_PT_LEFT) { + lx0 = lx1 = p1->x - p1->dmx * w; + ly0 = ly1 = p1->y - p1->dmy * w; + nsvg__addEdge(r, lx1, ly1, left->x, left->y); + + rx0 = p1->x + (dlx0 * w); + ry0 = p1->y + (dly0 * w); + rx1 = p1->x + (dlx1 * w); + ry1 = p1->y + (dly1 * w); + nsvg__addEdge(r, right->x, right->y, rx0, ry0); + nsvg__addEdge(r, rx0, ry0, rx1, ry1); + } else { + lx0 = p1->x - (dlx0 * w); + ly0 = p1->y - (dly0 * w); + lx1 = p1->x - (dlx1 * w); + ly1 = p1->y - (dly1 * w); + nsvg__addEdge(r, lx0, ly0, left->x, left->y); + nsvg__addEdge(r, lx1, ly1, lx0, ly0); + + rx0 = rx1 = p1->x + p1->dmx * w; + ry0 = ry1 = p1->y + p1->dmy * w; + nsvg__addEdge(r, right->x, right->y, rx1, ry1); + } + + left->x = lx1; left->y = ly1; + right->x = rx1; right->y = ry1; +} + +static void nsvg__roundJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth, int ncap) +{ + int i, n; + float w = lineWidth * 0.5f; + float dlx0 = p0->dy, dly0 = -p0->dx; + float dlx1 = p1->dy, dly1 = -p1->dx; + float a0 = atan2f(dly0, dlx0); + float a1 = atan2f(dly1, dlx1); + float da = a1 - a0; + float lx, ly, rx, ry; + + if (da < NSVG_PI) da += NSVG_PI*2; + if (da > NSVG_PI) da -= NSVG_PI*2; + + n = (int)ceilf((nsvg__absf(da) / NSVG_PI) * (float)ncap); + if (n < 2) n = 2; + if (n > ncap) n = ncap; + + lx = left->x; + ly = left->y; + rx = right->x; + ry = right->y; + + for (i = 0; i < n; i++) { + float u = (float)i/(float)(n-1); + float a = a0 + u*da; + float ax = cosf(a) * w, ay = sinf(a) * w; + float lx1 = p1->x - ax, ly1 = p1->y - ay; + float rx1 = p1->x + ax, ry1 = p1->y + ay; + + nsvg__addEdge(r, lx1, ly1, lx, ly); + nsvg__addEdge(r, rx, ry, rx1, ry1); + + lx = lx1; ly = ly1; + rx = rx1; ry = ry1; + } + + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +static void nsvg__straightJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p1, float lineWidth) +{ + float w = lineWidth * 0.5f; + float lx = p1->x - (p1->dmx * w), ly = p1->y - (p1->dmy * w); + float rx = p1->x + (p1->dmx * w), ry = p1->y + (p1->dmy * w); + + nsvg__addEdge(r, lx, ly, left->x, left->y); + nsvg__addEdge(r, right->x, right->y, rx, ry); + + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +static int nsvg__curveDivs(float r, float arc, float tol) +{ + float da = acosf(r / (r + tol)) * 2.0f; + int divs = (int)ceilf(arc / da); + if (divs < 2) divs = 2; + return divs; +} + +static void nsvg__expandStroke(NSVGrasterizer* r, NSVGpoint* points, int npoints, int closed, int lineJoin, int lineCap, float lineWidth) +{ + int ncap = nsvg__curveDivs(lineWidth*0.5f, NSVG_PI, r->tessTol); // Calculate divisions per half circle. + NSVGpoint left = {0,0,0,0,0,0,0,0}, right = {0,0,0,0,0,0,0,0}, firstLeft = {0,0,0,0,0,0,0,0}, firstRight = {0,0,0,0,0,0,0,0}; + NSVGpoint* p0, *p1; + int j, s, e; + + // Build stroke edges + if (closed) { + // Looping + p0 = &points[npoints-1]; + p1 = &points[0]; + s = 0; + e = npoints; + } else { + // Add cap + p0 = &points[0]; + p1 = &points[1]; + s = 1; + e = npoints-1; + } + + if (closed) { + nsvg__initClosed(&left, &right, p0, p1, lineWidth); + firstLeft = left; + firstRight = right; + } else { + // Add cap + float dx = p1->x - p0->x; + float dy = p1->y - p0->y; + nsvg__normalize(&dx, &dy); + if (lineCap == NSVG_CAP_BUTT) + nsvg__buttCap(r, &left, &right, p0, dx, dy, lineWidth, 0); + else if (lineCap == NSVG_CAP_SQUARE) + nsvg__squareCap(r, &left, &right, p0, dx, dy, lineWidth, 0); + else if (lineCap == NSVG_CAP_ROUND) + nsvg__roundCap(r, &left, &right, p0, dx, dy, lineWidth, ncap, 0); + } + + for (j = s; j < e; ++j) { + if (p1->flags & NSVG_PT_CORNER) { + if (lineJoin == NSVG_JOIN_ROUND) + nsvg__roundJoin(r, &left, &right, p0, p1, lineWidth, ncap); + else if (lineJoin == NSVG_JOIN_BEVEL || (p1->flags & NSVG_PT_BEVEL)) + nsvg__bevelJoin(r, &left, &right, p0, p1, lineWidth); + else + nsvg__miterJoin(r, &left, &right, p0, p1, lineWidth); + } else { + nsvg__straightJoin(r, &left, &right, p1, lineWidth); + } + p0 = p1++; + } + + if (closed) { + // Loop it + nsvg__addEdge(r, firstLeft.x, firstLeft.y, left.x, left.y); + nsvg__addEdge(r, right.x, right.y, firstRight.x, firstRight.y); + } else { + // Add cap + float dx = p1->x - p0->x; + float dy = p1->y - p0->y; + nsvg__normalize(&dx, &dy); + if (lineCap == NSVG_CAP_BUTT) + nsvg__buttCap(r, &right, &left, p1, -dx, -dy, lineWidth, 1); + else if (lineCap == NSVG_CAP_SQUARE) + nsvg__squareCap(r, &right, &left, p1, -dx, -dy, lineWidth, 1); + else if (lineCap == NSVG_CAP_ROUND) + nsvg__roundCap(r, &right, &left, p1, -dx, -dy, lineWidth, ncap, 1); + } +} + +static void nsvg__prepareStroke(NSVGrasterizer* r, float miterLimit, int lineJoin) +{ + int i, j; + NSVGpoint* p0, *p1; + + p0 = &r->points[r->npoints-1]; + p1 = &r->points[0]; + for (i = 0; i < r->npoints; i++) { + // Calculate segment direction and length + p0->dx = p1->x - p0->x; + p0->dy = p1->y - p0->y; + p0->len = nsvg__normalize(&p0->dx, &p0->dy); + // Advance + p0 = p1++; + } + + // calculate joins + p0 = &r->points[r->npoints-1]; + p1 = &r->points[0]; + for (j = 0; j < r->npoints; j++) { + float dlx0, dly0, dlx1, dly1, dmr2, cross; + dlx0 = p0->dy; + dly0 = -p0->dx; + dlx1 = p1->dy; + dly1 = -p1->dx; + // Calculate extrusions + p1->dmx = (dlx0 + dlx1) * 0.5f; + p1->dmy = (dly0 + dly1) * 0.5f; + dmr2 = p1->dmx*p1->dmx + p1->dmy*p1->dmy; + if (dmr2 > 0.000001f) { + float s2 = 1.0f / dmr2; + if (s2 > 600.0f) { + s2 = 600.0f; + } + p1->dmx *= s2; + p1->dmy *= s2; + } + + // Clear flags, but keep the corner. + p1->flags = (p1->flags & NSVG_PT_CORNER) ? NSVG_PT_CORNER : 0; + + // Keep track of left turns. + cross = p1->dx * p0->dy - p0->dx * p1->dy; + if (cross > 0.0f) + p1->flags |= NSVG_PT_LEFT; + + // Check to see if the corner needs to be beveled. + if (p1->flags & NSVG_PT_CORNER) { + if ((dmr2 * miterLimit*miterLimit) < 1.0f || lineJoin == NSVG_JOIN_BEVEL || lineJoin == NSVG_JOIN_ROUND) { + p1->flags |= NSVG_PT_BEVEL; + } + } + + p0 = p1++; + } +} + +static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float sx, float sy) +{ + int i, j, closed; + NSVGpath* path; + NSVGpoint* p0, *p1; + float miterLimit = shape->miterLimit; + int lineJoin = shape->strokeLineJoin; + int lineCap = shape->strokeLineCap; + const float sw = (sx + sy) / 2; // average scaling factor + const float lineWidth = shape->strokeWidth * sw; // FIXME (?) + + for (path = shape->paths; path != NULL; path = path->next) { + // Flatten path + r->npoints = 0; + nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, NSVG_PT_CORNER); + for (i = 0; i < path->npts-1; i += 3) { + float* p = &path->pts[i*2]; + nsvg__flattenCubicBez(r, p[0]*sx,p[1]*sy, p[2]*sx,p[3]*sy, p[4]*sx,p[5]*sy, p[6]*sx,p[7]*sy, 0, NSVG_PT_CORNER); + } + if (r->npoints < 2) + continue; + + closed = path->closed; + + // If the first and last points are the same, remove the last, mark as closed path. + p0 = &r->points[r->npoints-1]; + p1 = &r->points[0]; + if (nsvg__ptEquals(p0->x,p0->y, p1->x,p1->y, r->distTol)) { + r->npoints--; + p0 = &r->points[r->npoints-1]; + closed = 1; + } + + if (shape->strokeDashCount > 0) { + int idash = 0, dashState = 1; + float totalDist = 0, dashLen, allDashLen, dashOffset; + NSVGpoint cur; + + if (closed) + nsvg__appendPathPoint(r, r->points[0]); + + // Duplicate points -> points2. + nsvg__duplicatePoints(r); + + r->npoints = 0; + cur = r->points2[0]; + nsvg__appendPathPoint(r, cur); + + // Figure out dash offset. + allDashLen = 0; + for (j = 0; j < shape->strokeDashCount; j++) + allDashLen += shape->strokeDashArray[j]; + if (shape->strokeDashCount & 1) + allDashLen *= 2.0f; + // Find location inside pattern + dashOffset = fmodf(shape->strokeDashOffset, allDashLen); + if (dashOffset < 0.0f) + dashOffset += allDashLen; + + while (dashOffset > shape->strokeDashArray[idash]) { + dashOffset -= shape->strokeDashArray[idash]; + idash = (idash + 1) % shape->strokeDashCount; + } + dashLen = (shape->strokeDashArray[idash] - dashOffset) * sw; + + for (j = 1; j < r->npoints2; ) { + float dx = r->points2[j].x - cur.x; + float dy = r->points2[j].y - cur.y; + float dist = sqrtf(dx*dx + dy*dy); + + if ((totalDist + dist) > dashLen) { + // Calculate intermediate point + float d = (dashLen - totalDist) / dist; + float x = cur.x + dx * d; + float y = cur.y + dy * d; + nsvg__addPathPoint(r, x, y, NSVG_PT_CORNER); + + // Stroke + if (r->npoints > 1 && dashState) { + nsvg__prepareStroke(r, miterLimit, lineJoin); + nsvg__expandStroke(r, r->points, r->npoints, 0, lineJoin, lineCap, lineWidth); + } + // Advance dash pattern + dashState = !dashState; + idash = (idash+1) % shape->strokeDashCount; + dashLen = shape->strokeDashArray[idash] * sw; + // Restart + cur.x = x; + cur.y = y; + cur.flags = NSVG_PT_CORNER; + totalDist = 0.0f; + r->npoints = 0; + nsvg__appendPathPoint(r, cur); + } else { + totalDist += dist; + cur = r->points2[j]; + nsvg__appendPathPoint(r, cur); + j++; + } + } + // Stroke any leftover path + if (r->npoints > 1 && dashState) + nsvg__expandStroke(r, r->points, r->npoints, 0, lineJoin, lineCap, lineWidth); + } else { + nsvg__prepareStroke(r, miterLimit, lineJoin); + nsvg__expandStroke(r, r->points, r->npoints, closed, lineJoin, lineCap, lineWidth); + } + } +} + +static int nsvg__cmpEdge(const void *p, const void *q) +{ + const NSVGedge* a = (const NSVGedge*)p; + const NSVGedge* b = (const NSVGedge*)q; + + if (a->y0 < b->y0) return -1; + if (a->y0 > b->y0) return 1; + return 0; +} + + +static NSVGactiveEdge* nsvg__addActive(NSVGrasterizer* r, NSVGedge* e, float startPoint) +{ + NSVGactiveEdge* z; + + if (r->freelist != NULL) { + // Restore from freelist. + z = r->freelist; + r->freelist = z->next; + } else { + // Alloc new edge. + z = (NSVGactiveEdge*)nsvg__alloc(r, sizeof(NSVGactiveEdge)); + if (z == NULL) return NULL; + } + + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); +// STBTT_assert(e->y0 <= start_point); + // round dx down to avoid going too far + if (dxdy < 0) + z->dx = (int)(-nsvg__roundf(NSVG__FIX * -dxdy)); + else + z->dx = (int)nsvg__roundf(NSVG__FIX * dxdy); + z->x = (int)nsvg__roundf(NSVG__FIX * (e->x0 + dxdy * (startPoint - e->y0))); +// z->x -= off_x * FIX; + z->ey = e->y1; + z->next = 0; + z->dir = e->dir; + + return z; +} + +static void nsvg__freeActive(NSVGrasterizer* r, NSVGactiveEdge* z) +{ + z->next = r->freelist; + r->freelist = z; +} + +static void nsvg__fillScanline(unsigned char* scanline, int len, int x0, int x1, int maxWeight, int* xmin, int* xmax) +{ + int i = x0 >> NSVG__FIXSHIFT; + int j = x1 >> NSVG__FIXSHIFT; + if (i < *xmin) *xmin = i; + if (j > *xmax) *xmax = j; + if (i < len && j >= 0) { + if (i == j) { + // x0,x1 are the same pixel, so compute combined coverage + scanline[i] = (unsigned char)(scanline[i] + ((x1 - x0) * maxWeight >> NSVG__FIXSHIFT)); + } else { + if (i >= 0) // add antialiasing for x0 + scanline[i] = (unsigned char)(scanline[i] + (((NSVG__FIX - (x0 & NSVG__FIXMASK)) * maxWeight) >> NSVG__FIXSHIFT)); + else + i = -1; // clip + + if (j < len) // add antialiasing for x1 + scanline[j] = (unsigned char)(scanline[j] + (((x1 & NSVG__FIXMASK) * maxWeight) >> NSVG__FIXSHIFT)); + else + j = len; // clip + + for (++i; i < j; ++i) // fill pixels between x0 and x1 + scanline[i] = (unsigned char)(scanline[i] + maxWeight); + } + } +} + +// note: this routine clips fills that extend off the edges... ideally this +// wouldn't happen, but it could happen if the truetype glyph bounding boxes +// are wrong, or if the user supplies a too-small bitmap +static void nsvg__fillActiveEdges(unsigned char* scanline, int len, NSVGactiveEdge* e, int maxWeight, int* xmin, int* xmax, char fillRule) +{ + // non-zero winding fill + int x0 = 0, w = 0; + + if (fillRule == NSVG_FILLRULE_NONZERO) { + // Non-zero + while (e != NULL) { + if (w == 0) { + // if we're currently at zero, we need to record the edge start point + x0 = e->x; w += e->dir; + } else { + int x1 = e->x; w += e->dir; + // if we went to zero, we need to draw + if (w == 0) + nsvg__fillScanline(scanline, len, x0, x1, maxWeight, xmin, xmax); + } + e = e->next; + } + } else if (fillRule == NSVG_FILLRULE_EVENODD) { + // Even-odd + while (e != NULL) { + if (w == 0) { + // if we're currently at zero, we need to record the edge start point + x0 = e->x; w = 1; + } else { + int x1 = e->x; w = 0; + nsvg__fillScanline(scanline, len, x0, x1, maxWeight, xmin, xmax); + } + e = e->next; + } + } +} + +static float nsvg__clampf(float a, float mn, float mx) { return a < mn ? mn : (a > mx ? mx : a); } + +static unsigned int nsvg__RGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + return ((unsigned int)r) | ((unsigned int)g << 8) | ((unsigned int)b << 16) | ((unsigned int)a << 24); +} + +static unsigned int nsvg__lerpRGBA(unsigned int c0, unsigned int c1, float u) +{ + int iu = (int)(nsvg__clampf(u, 0.0f, 1.0f) * 256.0f); + int r = (((c0) & 0xff)*(256-iu) + (((c1) & 0xff)*iu)) >> 8; + int g = (((c0>>8) & 0xff)*(256-iu) + (((c1>>8) & 0xff)*iu)) >> 8; + int b = (((c0>>16) & 0xff)*(256-iu) + (((c1>>16) & 0xff)*iu)) >> 8; + int a = (((c0>>24) & 0xff)*(256-iu) + (((c1>>24) & 0xff)*iu)) >> 8; + return nsvg__RGBA((unsigned char)r, (unsigned char)g, (unsigned char)b, (unsigned char)a); +} + +static unsigned int nsvg__applyOpacity(unsigned int c, float u) +{ + int iu = (int)(nsvg__clampf(u, 0.0f, 1.0f) * 256.0f); + int r = (c) & 0xff; + int g = (c>>8) & 0xff; + int b = (c>>16) & 0xff; + int a = (((c>>24) & 0xff)*iu) >> 8; + return nsvg__RGBA((unsigned char)r, (unsigned char)g, (unsigned char)b, (unsigned char)a); +} + +static inline int nsvg__div255(int x) +{ + return ((x+1) * 257) >> 16; +} + +static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* cover, int x, int y, + float tx, float ty, float sx, float sy, NSVGcachedPaint* cache) +{ + + if (cache->type == NSVG_PAINT_COLOR) { + int i, cr, cg, cb, ca; + cr = cache->colors[0] & 0xff; + cg = (cache->colors[0] >> 8) & 0xff; + cb = (cache->colors[0] >> 16) & 0xff; + ca = (cache->colors[0] >> 24) & 0xff; + + for (i = 0; i < count; i++) { + int r,g,b; + int a = nsvg__div255((int)cover[0] * ca); + int ia = 255 - a; + // Premultiply + r = nsvg__div255(cr * a); + g = nsvg__div255(cg * a); + b = nsvg__div255(cb * a); + + // Blend over + r += nsvg__div255(ia * (int)dst[0]); + g += nsvg__div255(ia * (int)dst[1]); + b += nsvg__div255(ia * (int)dst[2]); + a += nsvg__div255(ia * (int)dst[3]); + + dst[0] = (unsigned char)r; + dst[1] = (unsigned char)g; + dst[2] = (unsigned char)b; + dst[3] = (unsigned char)a; + + cover++; + dst += 4; + } + } else if (cache->type == NSVG_PAINT_LINEAR_GRADIENT) { + // TODO: spread modes. + // TODO: plenty of opportunities to optimize. + float fx, fy, dx, gy; + float* t = cache->xform; + int i, cr, cg, cb, ca; + unsigned int c; + + fx = ((float)x - tx) / sx; + fy = ((float)y - ty) / sy; + dx = 1.0f / sx; + + for (i = 0; i < count; i++) { + int r,g,b,a,ia; + gy = fx*t[1] + fy*t[3] + t[5]; + c = cache->colors[(int)nsvg__clampf(gy*255.0f, 0, 255.0f)]; + cr = (c) & 0xff; + cg = (c >> 8) & 0xff; + cb = (c >> 16) & 0xff; + ca = (c >> 24) & 0xff; + + a = nsvg__div255((int)cover[0] * ca); + ia = 255 - a; + + // Premultiply + r = nsvg__div255(cr * a); + g = nsvg__div255(cg * a); + b = nsvg__div255(cb * a); + + // Blend over + r += nsvg__div255(ia * (int)dst[0]); + g += nsvg__div255(ia * (int)dst[1]); + b += nsvg__div255(ia * (int)dst[2]); + a += nsvg__div255(ia * (int)dst[3]); + + dst[0] = (unsigned char)r; + dst[1] = (unsigned char)g; + dst[2] = (unsigned char)b; + dst[3] = (unsigned char)a; + + cover++; + dst += 4; + fx += dx; + } + } else if (cache->type == NSVG_PAINT_RADIAL_GRADIENT) { + // TODO: spread modes. + // TODO: plenty of opportunities to optimize. + // TODO: focus (fx,fy) + float fx, fy, dx, gx, gy, gd; + float* t = cache->xform; + int i, cr, cg, cb, ca; + unsigned int c; + + fx = ((float)x - tx) / sx; + fy = ((float)y - ty) / sy; + dx = 1.0f / sx; + + for (i = 0; i < count; i++) { + int r,g,b,a,ia; + gx = fx*t[0] + fy*t[2] + t[4]; + gy = fx*t[1] + fy*t[3] + t[5]; + gd = sqrtf(gx*gx + gy*gy); + c = cache->colors[(int)nsvg__clampf(gd*255.0f, 0, 255.0f)]; + cr = (c) & 0xff; + cg = (c >> 8) & 0xff; + cb = (c >> 16) & 0xff; + ca = (c >> 24) & 0xff; + + a = nsvg__div255((int)cover[0] * ca); + ia = 255 - a; + + // Premultiply + r = nsvg__div255(cr * a); + g = nsvg__div255(cg * a); + b = nsvg__div255(cb * a); + + // Blend over + r += nsvg__div255(ia * (int)dst[0]); + g += nsvg__div255(ia * (int)dst[1]); + b += nsvg__div255(ia * (int)dst[2]); + a += nsvg__div255(ia * (int)dst[3]); + + dst[0] = (unsigned char)r; + dst[1] = (unsigned char)g; + dst[2] = (unsigned char)b; + dst[3] = (unsigned char)a; + + cover++; + dst += 4; + fx += dx; + } + } +} + +static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, float sx, float sy, NSVGcachedPaint* cache, char fillRule) +{ + NSVGactiveEdge *active = NULL; + int y, s; + int e = 0; + int maxWeight = (255 / NSVG__SUBSAMPLES); // weight per vertical scanline + int xmin, xmax; + + for (y = 0; y < r->height; y++) { + memset(r->scanline, 0, r->width); + xmin = r->width; + xmax = 0; + for (s = 0; s < NSVG__SUBSAMPLES; ++s) { + // find center of pixel for this scanline + float scany = (float)(y*NSVG__SUBSAMPLES + s) + 0.5f; + NSVGactiveEdge **step = &active; + + // update all active edges; + // remove all active edges that terminate before the center of this scanline + while (*step) { + NSVGactiveEdge *z = *step; + if (z->ey <= scany) { + *step = z->next; // delete from list +// NSVG__assert(z->valid); + nsvg__freeActive(r, z); + } else { + z->x += z->dx; // advance to position for current scanline + step = &((*step)->next); // advance through list + } + } + + // resort the list if needed + for (;;) { + int changed = 0; + step = &active; + while (*step && (*step)->next) { + if ((*step)->x > (*step)->next->x) { + NSVGactiveEdge* t = *step; + NSVGactiveEdge* q = t->next; + t->next = q->next; + q->next = t; + *step = q; + changed = 1; + } + step = &(*step)->next; + } + if (!changed) break; + } + + // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline + while (e < r->nedges && r->edges[e].y0 <= scany) { + if (r->edges[e].y1 > scany) { + NSVGactiveEdge* z = nsvg__addActive(r, &r->edges[e], scany); + if (z == NULL) break; + // find insertion point + if (active == NULL) { + active = z; + } else if (z->x < active->x) { + // insert at front + z->next = active; + active = z; + } else { + // find thing to insert AFTER + NSVGactiveEdge* p = active; + while (p->next && p->next->x < z->x) + p = p->next; + // at this point, p->next->x is NOT < z->x + z->next = p->next; + p->next = z; + } + } + e++; + } + + // now process all active edges in non-zero fashion + if (active != NULL) + nsvg__fillActiveEdges(r->scanline, r->width, active, maxWeight, &xmin, &xmax, fillRule); + } + // Blit + if (xmin < 0) xmin = 0; + if (xmax > r->width-1) xmax = r->width-1; + if (xmin <= xmax) { + nsvg__scanlineSolid(&r->bitmap[y * r->stride] + xmin*4, xmax-xmin+1, &r->scanline[xmin], xmin, y, tx,ty, sx, sy, cache); + } + } + +} + +static void nsvg__unpremultiplyAlpha(unsigned char* image, int w, int h, int stride) +{ + int x,y; + + // Unpremultiply + for (y = 0; y < h; y++) { + unsigned char *row = &image[y*stride]; + for (x = 0; x < w; x++) { + int r = row[0], g = row[1], b = row[2], a = row[3]; + if (a != 0) { + row[0] = (unsigned char)(r*255/a); + row[1] = (unsigned char)(g*255/a); + row[2] = (unsigned char)(b*255/a); + } + row += 4; + } + } + + // Defringe + for (y = 0; y < h; y++) { + unsigned char *row = &image[y*stride]; + for (x = 0; x < w; x++) { + int r = 0, g = 0, b = 0, a = row[3], n = 0; + if (a == 0) { + if (x-1 > 0 && row[-1] != 0) { + r += row[-4]; + g += row[-3]; + b += row[-2]; + n++; + } + if (x+1 < w && row[7] != 0) { + r += row[4]; + g += row[5]; + b += row[6]; + n++; + } + if (y-1 > 0 && row[-stride+3] != 0) { + r += row[-stride]; + g += row[-stride+1]; + b += row[-stride+2]; + n++; + } + if (y+1 < h && row[stride+3] != 0) { + r += row[stride]; + g += row[stride+1]; + b += row[stride+2]; + n++; + } + if (n > 0) { + row[0] = (unsigned char)(r/n); + row[1] = (unsigned char)(g/n); + row[2] = (unsigned char)(b/n); + } + } + row += 4; + } + } +} + + +static void nsvg__initPaint(NSVGcachedPaint* cache, NSVGpaint* paint, float opacity) +{ + int i, j; + NSVGgradient* grad; + + cache->type = paint->type; + + if (paint->type == NSVG_PAINT_COLOR) { + cache->colors[0] = nsvg__applyOpacity(paint->color, opacity); + return; + } + + grad = paint->gradient; + + cache->spread = grad->spread; + memcpy(cache->xform, grad->xform, sizeof(float)*6); + + if (grad->nstops == 0) { + for (i = 0; i < 256; i++) + cache->colors[i] = 0; + } else if (grad->nstops == 1) { + for (i = 0; i < 256; i++) + cache->colors[i] = nsvg__applyOpacity(grad->stops[i].color, opacity); + } else { + unsigned int ca, cb = 0; + float ua, ub, du, u; + int ia, ib, count; + + ca = nsvg__applyOpacity(grad->stops[0].color, opacity); + ua = nsvg__clampf(grad->stops[0].offset, 0, 1); + ub = nsvg__clampf(grad->stops[grad->nstops-1].offset, ua, 1); + ia = (int)(ua * 255.0f); + ib = (int)(ub * 255.0f); + for (i = 0; i < ia; i++) { + cache->colors[i] = ca; + } + + for (i = 0; i < grad->nstops-1; i++) { + ca = nsvg__applyOpacity(grad->stops[i].color, opacity); + cb = nsvg__applyOpacity(grad->stops[i+1].color, opacity); + ua = nsvg__clampf(grad->stops[i].offset, 0, 1); + ub = nsvg__clampf(grad->stops[i+1].offset, 0, 1); + ia = (int)(ua * 255.0f); + ib = (int)(ub * 255.0f); + count = ib - ia; + if (count <= 0) continue; + u = 0; + du = 1.0f / (float)count; + for (j = 0; j < count; j++) { + cache->colors[ia+j] = nsvg__lerpRGBA(ca,cb,u); + u += du; + } + } + + for (i = ib; i < 256; i++) + cache->colors[i] = cb; + } + +} + +/* +static void dumpEdges(NSVGrasterizer* r, const char* name) +{ + float xmin = 0, xmax = 0, ymin = 0, ymax = 0; + NSVGedge *e = NULL; + int i; + if (r->nedges == 0) return; + FILE* fp = fopen(name, "w"); + if (fp == NULL) return; + + xmin = xmax = r->edges[0].x0; + ymin = ymax = r->edges[0].y0; + for (i = 0; i < r->nedges; i++) { + e = &r->edges[i]; + xmin = nsvg__minf(xmin, e->x0); + xmin = nsvg__minf(xmin, e->x1); + xmax = nsvg__maxf(xmax, e->x0); + xmax = nsvg__maxf(xmax, e->x1); + ymin = nsvg__minf(ymin, e->y0); + ymin = nsvg__minf(ymin, e->y1); + ymax = nsvg__maxf(ymax, e->y0); + ymax = nsvg__maxf(ymax, e->y1); + } + + fprintf(fp, "", xmin, ymin, (xmax - xmin), (ymax - ymin)); + + for (i = 0; i < r->nedges; i++) { + e = &r->edges[i]; + fprintf(fp ,"", e->x0,e->y0, e->x1,e->y1); + } + + for (i = 0; i < r->npoints; i++) { + if (i+1 < r->npoints) + fprintf(fp ,"", r->points[i].x, r->points[i].y, r->points[i+1].x, r->points[i+1].y); + fprintf(fp ,"", r->points[i].x, r->points[i].y, r->points[i].flags == 0 ? "#f00" : "#0f0"); + } + + fprintf(fp, ""); + fclose(fp); +} +*/ + +void nsvgRasterizeXY(NSVGrasterizer* r, + NSVGimage* image, float tx, float ty, + float sx, float sy, + unsigned char* dst, int w, int h, int stride) +{ + NSVGshape *shape = NULL; + NSVGedge *e = NULL; + NSVGcachedPaint cache; + int i; + + r->bitmap = dst; + r->width = w; + r->height = h; + r->stride = stride; + + if (w > r->cscanline) { + r->cscanline = w; + r->scanline = (unsigned char*)realloc(r->scanline, w); + if (r->scanline == NULL) return; + } + + for (i = 0; i < h; i++) + memset(&dst[i*stride], 0, w*4); + + for (shape = image->shapes; shape != NULL; shape = shape->next) { + if (!(shape->flags & NSVG_FLAGS_VISIBLE)) + continue; + + if (shape->fill.type != NSVG_PAINT_NONE) { + nsvg__resetPool(r); + r->freelist = NULL; + r->nedges = 0; + + nsvg__flattenShape(r, shape, sx, sy); + + // Scale and translate edges + for (i = 0; i < r->nedges; i++) { + e = &r->edges[i]; + e->x0 = tx + e->x0; + e->y0 = (ty + e->y0) * NSVG__SUBSAMPLES; + e->x1 = tx + e->x1; + e->y1 = (ty + e->y1) * NSVG__SUBSAMPLES; + } + + // Rasterize edges + if (r->nedges != 0) + qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); + + // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule + nsvg__initPaint(&cache, &shape->fill, shape->opacity); + + nsvg__rasterizeSortedEdges(r, tx,ty, sx, sy, &cache, shape->fillRule); + } + if (shape->stroke.type != NSVG_PAINT_NONE && (shape->strokeWidth * sx) > 0.01f) { + nsvg__resetPool(r); + r->freelist = NULL; + r->nedges = 0; + + nsvg__flattenShapeStroke(r, shape, sx, sy); + +// dumpEdges(r, "edge.svg"); + + // Scale and translate edges + for (i = 0; i < r->nedges; i++) { + e = &r->edges[i]; + e->x0 = tx + e->x0; + e->y0 = (ty + e->y0) * NSVG__SUBSAMPLES; + e->x1 = tx + e->x1; + e->y1 = (ty + e->y1) * NSVG__SUBSAMPLES; + } + + // Rasterize edges + if (r->nedges != 0) + qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); + + // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule + nsvg__initPaint(&cache, &shape->stroke, shape->opacity); + + nsvg__rasterizeSortedEdges(r, tx,ty,sx, sy, &cache, NSVG_FILLRULE_NONZERO); + } + } + + nsvg__unpremultiplyAlpha(dst, w, h, stride); + + r->bitmap = NULL; + r->width = 0; + r->height = 0; + r->stride = 0; +} + +void nsvgRasterize(NSVGrasterizer* r, + NSVGimage* image, float tx, float ty, float scale, + unsigned char* dst, int w, int h, int stride) +{ + nsvgRasterizeXY(r,image, tx, ty, scale, scale, dst, w, h, stride); +} + +#endif // NANOSVGRAST_IMPLEMENTATION + +#endif // NANOSVGRAST_H diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index fc58e97178..5386aad933 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -526,8 +526,6 @@ set(SLIC3R_GUI_SOURCES Utils/CalibUtils.hpp ) -find_package(NanoSVG REQUIRED) - if (WIN32) list(APPEND SLIC3R_GUI_SOURCES GUI/dark_mode/dark_mode.hpp @@ -575,7 +573,7 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES}) encoding_check(libslic3r_gui) -target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui minilzo GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto NanoSVG::nanosvg NanoSVG::nanosvgrast) +target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui minilzo GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto) #target_link_libraries(libslic3r_gui libslic3r cereal imgui minilzo GLEW::GLEW OpenGL::GL hidapi libcurl OpenSSL::SSL OpenSSL::Crypto ${wxWidgets_LIBRARIES} glfw) if (MSVC) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 9fa8383d18..6e89a04d46 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -1084,7 +1084,7 @@ void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect) m_input_nozzle_max->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); //m_clr_picker->msw_rescale(); - degree->sys_color_changed(); + degree->msw_rescale(); bitmap_max_degree->SetBitmap(degree->bmp()); bitmap_min_degree->SetBitmap(degree->bmp()); m_button_reset->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE); diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index de4aca579c..e8f21416af 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -19,7 +19,7 @@ AboutDialogLogo::AboutDialogLogo(wxWindow* parent) { this->SetBackgroundColour(*wxWHITE); this->logo = ScalableBitmap(this, Slic3r::var("OrcaSlicer_192px.png"), wxBITMAP_TYPE_PNG); - this->SetMinSize(this->logo.GetSize()); + this->SetMinSize(this->logo.GetBmpSize()); this->Bind(wxEVT_PAINT, &AboutDialogLogo::onRepaint, this); } @@ -30,9 +30,9 @@ void AboutDialogLogo::onRepaint(wxEvent &event) dc.SetBackgroundMode(wxTRANSPARENT); wxSize size = this->GetSize(); - int logo_w = this->logo.GetWidth(); - int logo_h = this->logo.GetHeight(); - dc.DrawBitmap(this->logo.get_bitmap(), (size.GetWidth() - logo_w)/2, (size.GetHeight() - logo_h)/2, true); + int logo_w = this->logo.GetBmpWidth(); + int logo_h = this->logo.GetBmpHeight(); + dc.DrawBitmap(this->logo.bmp(), (size.GetWidth() - logo_w)/2, (size.GetHeight() - logo_h)/2, true); event.Skip(); } @@ -380,7 +380,7 @@ AboutDialog::AboutDialog() void AboutDialog::on_dpi_changed(const wxRect &suggested_rect) { - m_logo_bitmap.sys_color_changed(); + m_logo_bitmap.msw_rescale(); m_logo->SetBitmap(m_logo_bitmap.bmp()); const wxFont& font = GetFont(); diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 900316609c..1c4c186816 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -187,7 +187,7 @@ void MaterialItem::doRender(wxDC &dc) auto acolor = m_ams_coloul; if (mcolor.Alpha() == 0 || acolor.Alpha() == 0) { - dc.DrawBitmap(m_transparent_mitem.get_bitmap(), FromDIP(1), FromDIP(1)); + dc.DrawBitmap(m_transparent_mitem.bmp(), FromDIP(1), FromDIP(1)); } if (!IsEnabled()) { @@ -247,10 +247,10 @@ void MaterialItem::doRender(wxDC &dc) //arrow if ( (acolor.Red() > 160 && acolor.Green() > 160 && acolor.Blue() > 160) && (acolor.Red() < 180 && acolor.Green() < 180 && acolor.Blue() < 180)) { - dc.DrawBitmap(m_arraw_bitmap_white.get_bitmap(), GetSize().x - m_arraw_bitmap_white.GetSize().x - FromDIP(7), GetSize().y - m_arraw_bitmap_white.GetSize().y); + dc.DrawBitmap(m_arraw_bitmap_white.bmp(), GetSize().x - m_arraw_bitmap_white.GetBmpSize().x - FromDIP(7), GetSize().y - m_arraw_bitmap_white.GetBmpSize().y); } else { - dc.DrawBitmap(m_arraw_bitmap_gray.get_bitmap(), GetSize().x - m_arraw_bitmap_gray.GetSize().x - FromDIP(7), GetSize().y - m_arraw_bitmap_gray.GetSize().y); + dc.DrawBitmap(m_arraw_bitmap_gray.bmp(), GetSize().x - m_arraw_bitmap_gray.GetBmpSize().x - FromDIP(7), GetSize().y - m_arraw_bitmap_gray.GetBmpSize().y); } @@ -677,7 +677,7 @@ void MappingItem::doRender(wxDC &dc) dc.SetBrush(wxBrush(m_coloul)); if (m_coloul.Alpha() == 0) { - dc.DrawBitmap( m_transparent_mapping_item.get_bitmap(), 0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2); + dc.DrawBitmap( m_transparent_mapping_item.bmp(), 0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2); } else { dc.DrawRectangle(0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2, MAPPING_ITEM_REAL_SIZE.x, MAPPING_ITEM_REAL_SIZE.y); @@ -1340,7 +1340,7 @@ void AmsReplaceMaterialDialog::update_machine_obj(MachineObject* obj) } else { label_txt->SetLabelText(_L("If there are two identical filaments in AMS, AMS filament backup will be enabled. \n(Currently supporting automatic supply of consumables with the same brand, material type, and color)")); - } + } label_txt->SetMinSize(wxSize(FromDIP(380), -1)); label_txt->SetMaxSize(wxSize(FromDIP(380), -1)); @@ -1494,7 +1494,7 @@ void AmsRMGroup::doRender(wxDC& dc) float startAngle = 0.0; float endAngle = 0.0; - dc.DrawBitmap(bitmap_bg.get_bitmap(), wxPoint((size.x - bitmap_bg.GetSize().x) / 2, (size.y - bitmap_bg.GetSize().y) / 2)); + dc.DrawBitmap(bitmap_bg.bmp(), wxPoint((size.x - bitmap_bg.GetBmpSize().x) / 2, (size.y - bitmap_bg.GetBmpSize().y) / 2)); for (auto iter = m_group_info.rbegin(); iter != m_group_info.rend(); ++iter) { std::string tray_name = iter->first; @@ -1575,7 +1575,7 @@ void AmsRMGroup::doRender(wxDC& dc) dc.DrawEllipticArc(x - center_mask_radius, y - center_mask_radius, center_mask_radius * 2, center_mask_radius * 2, 0, 360); //draw center icon - dc.DrawBitmap(bitmap_backup_tips_0.get_bitmap(), wxPoint((size.x - bitmap_backup_tips_0.GetSize().x) / 2, (size.y - bitmap_backup_tips_0.GetSize().y) / 2)); + dc.DrawBitmap(bitmap_backup_tips_0.bmp(), wxPoint((size.x - bitmap_backup_tips_0.GetBmpSize().x) / 2, (size.y - bitmap_backup_tips_0.GetBmpSize().y) / 2)); //dc.DrawBitmap(bitmap_backup_tips_1.bmp(), wxPoint((size.x - bitmap_backup_tips_1.GetBmpSize().x) / 2, (size.y - bitmap_backup_tips_1.GetBmpSize().y) / 2)); //draw material diff --git a/src/slic3r/GUI/Auxiliary.cpp b/src/slic3r/GUI/Auxiliary.cpp index 2049fa88de..c3554bfe5f 100644 --- a/src/slic3r/GUI/Auxiliary.cpp +++ b/src/slic3r/GUI/Auxiliary.cpp @@ -226,7 +226,7 @@ void AuFile::PaintBackground(wxDC &dc) dc.SetPen(AUFILE_GREY200); dc.SetBrush(AUFILE_GREY200); dc.DrawRoundedRectangle(0, 0, size.x, size.y, AUFILE_ROUNDING); - dc.DrawBitmap(m_file_bitmap.get_bitmap(), (size.x - m_file_bitmap.GetWidth()) / 2, (size.y - m_file_bitmap.GetHeight()) / 2); + dc.DrawBitmap(m_file_bitmap.bmp(), (size.x - m_file_bitmap.GetBmpWidth()) / 2, (size.y - m_file_bitmap.GetBmpHeight()) / 2); } } @@ -257,7 +257,7 @@ void AuFile::PaintForeground(wxDC &dc) } if (m_type == MODEL_PICTURE) { - dc.DrawBitmap(m_file_edit_mask.get_bitmap(), 0, size.y - m_file_edit_mask.GetSize().y); + dc.DrawBitmap(m_file_edit_mask.bmp(), 0, size.y - m_file_edit_mask.GetBmpSize().y); } @@ -268,14 +268,14 @@ void AuFile::PaintForeground(wxDC &dc) auto sizet = dc.GetTextExtent(cover_text_left); auto pos = wxPoint(0, 0); pos.x = (size.x / 2 - sizet.x) / 2; - pos.y = (size.y - (m_file_edit_mask.GetSize().y + sizet.y) / 2); + pos.y = (size.y - (m_file_edit_mask.GetBmpSize().y + sizet.y) / 2); dc.DrawText(cover_text_left, pos); // right text sizet = dc.GetTextExtent(cover_text_right); pos = wxPoint(0, 0); pos.x = size.x / 2 + (size.x / 2 - sizet.x) / 2; - pos.y = (size.y - (m_file_edit_mask.GetSize().y + sizet.y) / 2); + pos.y = (size.y - (m_file_edit_mask.GetBmpSize().y + sizet.y) / 2); dc.DrawText(cover_text_right, pos); // Split @@ -283,7 +283,7 @@ void AuFile::PaintForeground(wxDC &dc) dc.SetBrush(*wxWHITE); pos = wxPoint(0, 0); pos.x = size.x / 2 - 1; - pos.y = size.y - FromDIP(24) - (m_file_edit_mask.GetSize().y - FromDIP(24)) / 2; + pos.y = size.y - FromDIP(24) - (m_file_edit_mask.GetBmpSize().y - FromDIP(24)) / 2; dc.DrawRectangle(pos.x, pos.y, 2, FromDIP(24)); } else { // right text @@ -297,7 +297,7 @@ void AuFile::PaintForeground(wxDC &dc) if (m_cover) { dc.SetTextForeground(*wxWHITE); - dc.DrawBitmap(m_file_cover.get_bitmap(), size.x - m_file_cover.GetSize().x, 0); + dc.DrawBitmap(m_file_cover.bmp(), size.x - m_file_cover.GetBmpSize().x, 0); dc.SetFont(Label::Body_12); auto sizet = dc.GetTextExtent(cover_text_cover); auto pos = wxPoint(0, 0); @@ -306,7 +306,7 @@ void AuFile::PaintForeground(wxDC &dc) dc.DrawText(cover_text_cover, pos); } - if (m_hover) { dc.DrawBitmap(m_file_delete.get_bitmap(), size.x - m_file_delete.GetSize().x - FromDIP(10), FromDIP(10)); } + if (m_hover) { dc.DrawBitmap(m_file_delete.bmp(), size.x - m_file_delete.GetBmpSize().x - FromDIP(10), FromDIP(10)); } } void AuFile::on_mouse_enter(wxMouseEvent &evt) @@ -421,7 +421,7 @@ void AuFile::on_mouse_left_up(wxMouseEvent &evt) auto pos = evt.GetPosition(); // set cover - auto mask_size = wxSize(GetSize().x, m_file_edit_mask.GetSize().y); + auto mask_size = wxSize(GetSize().x, m_file_edit_mask.GetBmpSize().y); auto cover_left = 0; auto cover_top = size.y - mask_size.y; auto cover_right = mask_size.x / 2; @@ -443,10 +443,10 @@ void AuFile::on_mouse_left_up(wxMouseEvent &evt) if (pos.x > rename_left && pos.x < rename_right && pos.y > rename_top && pos.y < rename_bottom) { on_set_rename(); return; } // close - auto close_left = size.x - m_file_delete.GetSize().x - FromDIP(10); + auto close_left = size.x - m_file_delete.GetBmpSize().x - FromDIP(10); auto close_top = FromDIP(10); auto close_right = size.x - FromDIP(10); - auto close_bottom = m_file_delete.GetSize().y + FromDIP(10); + auto close_bottom = m_file_delete.GetBmpSize().y + FromDIP(10); if (pos.x > close_left && pos.x < close_right && pos.y > close_top && pos.y < close_bottom) { on_set_delete(); return; } exit_rename_mode(); diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 3fa7ffe748..7e33b8cd8f 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -93,7 +93,9 @@ void BBLTopbarArt::DrawButton(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& i int bmpX = 0, bmpY = 0; int textX = 0, textY = 0; - const wxBitmap &bmp = item.GetCurrentBitmapFor(wnd); + const wxBitmap& bmp = item.GetState() & wxAUI_BUTTON_STATE_DISABLED + ? item.GetDisabledBitmap() + : item.GetBitmap(); const wxSize bmpSize = bmp.IsOk() ? bmp.GetScaledSize() : wxSize(0, 0); @@ -531,15 +533,6 @@ void BBLTopbar::OnFullScreen(wxAuiToolBarEvent& event) m_frame->Restore(); } else { - wxDisplay display(this); - auto size = display.GetClientArea().GetSize(); -#ifdef __WXMSW__ - HWND hWnd = m_frame->GetHandle(); - RECT borderThickness; - SetRectEmpty(&borderThickness); - AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE), FALSE, 0); - m_frame->SetMaxSize(size + wxSize{-borderThickness.left + borderThickness.right, -borderThickness.top + borderThickness.bottom}); -#endif // __WXMSW__ m_normalRect = m_frame->GetRect(); m_frame->Maximize(); } diff --git a/src/slic3r/GUI/BitmapCache.cpp b/src/slic3r/GUI/BitmapCache.cpp index 9eab03ddf9..080a0f7db6 100644 --- a/src/slic3r/GUI/BitmapCache.cpp +++ b/src/slic3r/GUI/BitmapCache.cpp @@ -13,8 +13,10 @@ #include #endif /* __WXGTK2__ */ -#include -#include +#define NANOSVG_IMPLEMENTATION +#include "nanosvg/nanosvg.h" +#define NANOSVGRAST_IMPLEMENTATION +#include "nanosvg/nanosvgrast.h" namespace Slic3r { namespace GUI { @@ -58,168 +60,7 @@ static wxBitmap wxImage_to_wxBitmap_with_alpha(wxImage &&image, float scale = 1. #endif } -wxBitmapBundle* BitmapCache::insert_bndl(const std::string& name, const std::vector& bmps) -{ - wxVector bitmaps; - - std::set scales = {1.0}; -#ifndef __linux__ - -#ifdef __APPLE__ - scales.emplace(m_scale); -#else - size_t disp_cnt = wxDisplay::GetCount(); - for (size_t disp = 0; disp < disp_cnt; ++disp) - scales.emplace(wxDisplay(disp).GetScaleFactor()); -#endif - -#endif // !__linux__ - - for (double scale : scales) { - size_t width = 0; - size_t height = 0; - for (const wxBitmapBundle* bmp_bndl : bmps) { -#ifdef __APPLE__ - wxSize size = bmp_bndl->GetDefaultSize(); -#else - wxSize size = bmp_bndl->GetPreferredBitmapSizeAtScale(scale); -#endif - width += size.GetWidth(); - height = std::max(height, size.GetHeight()); - } - - std::string bitmap_key = name + "," +float_to_string_decimal_point(scale); - -#ifdef __WXGTK2__ - // Broken alpha workaround - wxImage image(width, height); - image.InitAlpha(); - // Fill in with a white color. - memset(image.GetData(), 0x0ff, width * height * 3); - // Fill in with full transparency. - memset(image.GetAlpha(), 0, width * height); - size_t x = 0; - for (const wxBitmapBundle* bmp_bndl : bmps) { - wxBitmap bmp = bmp_bndl->GetBitmap(bmp_bndl->GetDefaultSize()); - if (bmp.GetWidth() > 0) { - if (bmp.GetDepth() == 32) { - wxAlphaPixelData data(bmp); - //FIXME The following method is missing from wxWidgets 3.1.1. - // It looks like the wxWidgets 3.0.3 called the wrapped bitmap's UseAlpha(). - //data.UseAlpha(); - if (data) { - for (int r = 0; r < bmp.GetHeight(); ++r) { - wxAlphaPixelData::Iterator src(data); - src.Offset(data, 0, r); - unsigned char* dst_pixels = image.GetData() + (x + r * width) * 3; - unsigned char* dst_alpha = image.GetAlpha() + x + r * width; - for (int c = 0; c < bmp.GetWidth(); ++c, ++src) { - *dst_pixels++ = src.Red(); - *dst_pixels++ = src.Green(); - *dst_pixels++ = src.Blue(); - *dst_alpha++ = src.Alpha(); - } - } - } - } - else if (bmp.GetDepth() == 24) { - wxNativePixelData data(bmp); - if (data) { - for (int r = 0; r < bmp.GetHeight(); ++r) { - wxNativePixelData::Iterator src(data); - src.Offset(data, 0, r); - unsigned char* dst_pixels = image.GetData() + (x + r * width) * 3; - unsigned char* dst_alpha = image.GetAlpha() + x + r * width; - for (int c = 0; c < bmp.GetWidth(); ++c, ++src) { - *dst_pixels++ = src.Red(); - *dst_pixels++ = src.Green(); - *dst_pixels++ = src.Blue(); - *dst_alpha++ = wxALPHA_OPAQUE; - } - } - } - } - } - x += bmp.GetScaledWidth(); - } - - bitmaps.push_back(* this->insert(bitmap_key, wxImage_to_wxBitmap_with_alpha(std::move(image)))); - -#else - - wxBitmap* bitmap = this->insert(bitmap_key, width, height, scale); - wxMemoryDC memDC; - memDC.SelectObject(*bitmap); - memDC.SetBackground(*wxTRANSPARENT_BRUSH); - memDC.Clear(); - size_t x = 0; - for (const wxBitmapBundle* bmp_bndl : bmps) { - wxBitmap bmp = bmp_bndl->GetBitmap(bmp_bndl->GetPreferredBitmapSizeAtScale(scale)); - - if (bmp.GetWidth() > 0) - memDC.DrawBitmap(bmp, x, 0, true); - // we should "move" with step equal to non-scaled width -#ifdef __APPLE__ - x += bmp.GetScaledWidth(); -#else - x += bmp.GetWidth(); -#endif - } - memDC.SelectObject(wxNullBitmap); - bitmaps.push_back(*bitmap); - -#endif - } - - return insert_bndl(name, bitmaps); -} - -wxBitmapBundle* BitmapCache::insert_bndl(const std::string &bitmap_key, const char* data, size_t width, size_t height) -{ - wxBitmapBundle* bndl = nullptr; - auto it = m_bndl_map.find(bitmap_key); - if (it == m_bndl_map.end()) { - bndl = new wxBitmapBundle(wxBitmapBundle::FromSVG(data, wxSize(width, height))); - m_bndl_map[bitmap_key] = bndl; - } - else { - bndl = it->second; - *bndl = wxBitmapBundle::FromSVG(data, wxSize(width, height)); - } - return bndl; -} - -wxBitmapBundle* BitmapCache::insert_bndl(const std::string& bitmap_key, const wxBitmapBundle& bmp) -{ - wxBitmapBundle* bndl = nullptr; - auto it = m_bndl_map.find(bitmap_key); - if (it == m_bndl_map.end()) { - bndl = new wxBitmapBundle(bmp); - m_bndl_map[bitmap_key] = bndl; - } - else { - bndl = it->second; - *bndl = wxBitmapBundle(bmp); - } - return bndl; -} - -wxBitmapBundle* BitmapCache::insert_bndl(const std::string& bitmap_key, const wxVector& bmps) -{ - wxBitmapBundle* bndl = nullptr; - auto it = m_bndl_map.find(bitmap_key); - if (it == m_bndl_map.end()) { - bndl = new wxBitmapBundle(wxBitmapBundle::FromBitmaps(bmps)); - m_bndl_map[bitmap_key] = bndl; - } - else { - bndl = it->second; - *bndl = wxBitmapBundle::FromBitmaps(bmps); - } - return bndl; -} - -wxBitmap* BitmapCache::insert(const std::string &bitmap_key, size_t width, size_t height, double scale/* = -1.0*/) +wxBitmap* BitmapCache::insert(const std::string &bitmap_key, size_t width, size_t height) { wxBitmap *bitmap = nullptr; auto it = m_map.find(bitmap_key); @@ -235,7 +76,7 @@ wxBitmap* BitmapCache::insert(const std::string &bitmap_key, size_t width, size_ // So, We need to let the Mac OS wxBitmap implementation // know that the image may already be scaled appropriately for Retina, // and thereby that it's not supposed to upscale it. - bitmap->CreateScaled(width, height, -1, scale < 0.0 ? m_scale : scale); + bitmap->CreateScaled(width, height, -1, m_scale); #endif m_map[bitmap_key] = bitmap; } else { @@ -264,6 +105,110 @@ wxBitmap* BitmapCache::insert(const std::string &bitmap_key, const wxBitmap &bmp return bitmap; } +wxBitmap* BitmapCache::insert(const std::string &bitmap_key, const wxBitmap &bmp, const wxBitmap &bmp2) +{ + // Copying the wxBitmaps is cheap as the bitmap's content is reference counted. + const wxBitmap bmps[2] = { bmp, bmp2 }; + return this->insert(bitmap_key, bmps, bmps + 2); +} + +wxBitmap* BitmapCache::insert(const std::string &bitmap_key, const wxBitmap &bmp, const wxBitmap &bmp2, const wxBitmap &bmp3) +{ + // Copying the wxBitmaps is cheap as the bitmap's content is reference counted. + const wxBitmap bmps[3] = { bmp, bmp2, bmp3 }; + return this->insert(bitmap_key, bmps, bmps + 3); +} + +wxBitmap* BitmapCache::insert(const std::string &bitmap_key, const wxBitmap *begin, const wxBitmap *end) +{ + size_t width = 0; + size_t height = 0; + for (const wxBitmap *bmp = begin; bmp != end; ++ bmp) { +#ifdef __APPLE__ + width += bmp->GetScaledWidth(); + height = std::max(height, bmp->GetScaledHeight()); +#else + width += bmp->GetWidth(); + height = std::max(height, bmp->GetHeight()); +#endif + } + +#ifdef __WXGTK2__ + // Broken alpha workaround + wxImage image(width, height); + image.InitAlpha(); + // Fill in with a white color. + memset(image.GetData(), 0x0ff, width * height * 3); + // Fill in with full transparency. + memset(image.GetAlpha(), 0, width * height); + size_t x = 0; + for (const wxBitmap *bmp = begin; bmp != end; ++ bmp) { + if (bmp->GetWidth() > 0) { + if (bmp->GetDepth() == 32) { + wxAlphaPixelData data(*const_cast(bmp)); + //FIXME The following method is missing from wxWidgets 3.1.1. + // It looks like the wxWidgets 3.0.3 called the wrapped bitmap's UseAlpha(). + //data.UseAlpha(); + if (data) { + for (int r = 0; r < bmp->GetHeight(); ++ r) { + wxAlphaPixelData::Iterator src(data); + src.Offset(data, 0, r); + unsigned char *dst_pixels = image.GetData() + (x + r * width) * 3; + unsigned char *dst_alpha = image.GetAlpha() + x + r * width; + for (int c = 0; c < bmp->GetWidth(); ++ c, ++ src) { + *dst_pixels ++ = src.Red(); + *dst_pixels ++ = src.Green(); + *dst_pixels ++ = src.Blue(); + *dst_alpha ++ = src.Alpha(); + } + } + } + } else if (bmp->GetDepth() == 24) { + wxNativePixelData data(*const_cast(bmp)); + if (data) { + for (int r = 0; r < bmp->GetHeight(); ++ r) { + wxNativePixelData::Iterator src(data); + src.Offset(data, 0, r); + unsigned char *dst_pixels = image.GetData() + (x + r * width) * 3; + unsigned char *dst_alpha = image.GetAlpha() + x + r * width; + for (int c = 0; c < bmp->GetWidth(); ++ c, ++ src) { + *dst_pixels ++ = src.Red(); + *dst_pixels ++ = src.Green(); + *dst_pixels ++ = src.Blue(); + *dst_alpha ++ = wxALPHA_OPAQUE; + } + } + } + } + } + x += bmp->GetWidth(); + } + return this->insert(bitmap_key, wxImage_to_wxBitmap_with_alpha(std::move(image))); + +#else + + wxBitmap *bitmap = this->insert(bitmap_key, width, height); + wxMemoryDC memDC; + memDC.SelectObject(*bitmap); + memDC.SetBackground(*wxTRANSPARENT_BRUSH); + memDC.Clear(); + size_t x = 0; + for (const wxBitmap *bmp = begin; bmp != end; ++ bmp) { + if (bmp->GetWidth() > 0) + memDC.DrawBitmap(*bmp, x, 0, true); +#ifdef __APPLE__ + // we should "move" with step equal to non-scaled width + x += bmp->GetScaledWidth(); +#else + x += bmp->GetWidth(); +#endif + } + memDC.SelectObject(wxNullBitmap); + return bitmap; + +#endif +} + wxBitmap* BitmapCache::insert_raw_rgba(const std::string &bitmap_key, unsigned width, unsigned height, const unsigned char *raw_data, const bool grayscale/* = false*/) { wxImage image(width, height); @@ -360,102 +305,7 @@ error: return NULL; } -void BitmapCache::nsvgGetDataFromFileWithReplace(const char* filename, std::string& data_str, const std::map& replaces) -{ - FILE* fp = NULL; - size_t size; - char* data = NULL; - - fp = boost::nowide::fopen(filename, "rb"); - if (!fp) goto error; - fseek(fp, 0, SEEK_END); - size = ftell(fp); - fseek(fp, 0, SEEK_SET); - data = (char*)malloc(size + 1); - if (data == NULL) goto error; - if (fread(data, 1, size, fp) != size) goto error; - data[size] = '\0'; // Must be null terminated. - fclose(fp); - - data_str.assign(data); - for (auto val : replaces) - boost::replace_all(data_str, val.first, val.second); - - free(data); - return; - -error: - if (fp) fclose(fp); - if (data) free(data); - return; -} - -wxBitmapBundle* BitmapCache::from_svg(const std::string& bitmap_name, unsigned target_width, unsigned target_height, - const bool dark_mode, const std::string& new_color /*= ""*/) -{ - if (target_width == 0) - target_width = target_height; - std::string bitmap_key = bitmap_name + (target_height != 0 ? - "-h" + std::to_string(target_height) : - "-w" + std::to_string(target_width)) - + (dark_mode ? "-dm" : "") - + new_color; - - auto it = m_bndl_map.find(bitmap_key); - if (it != m_bndl_map.end()) - return it->second; - - // map of color replaces - //Orca: use replaces from load_svg function - std::map replaces; - replaces["\"#0x00AE42\""] = "\"#009688\""; - replaces["\"#00FF00\""] = "\"#52c7b8\""; - if (dark_mode) { - replaces["\"#262E30\""] = "\"#EFEFF0\""; - replaces["\"#323A3D\""] = "\"#B3B3B5\""; - replaces["\"#808080\""] = "\"#818183\""; - replaces["\"#CECECE\""] = "\"#54545B\""; - replaces["\"#6B6B6B\""] = "\"#818182\""; - replaces["\"#909090\""] = "\"#FFFFFF\""; - replaces["\"#00FF00\""] = "\"#FF0000\""; - replaces["\"#009688\""] = "\"#00675b\""; - } - - std::string str; - nsvgGetDataFromFileWithReplace(Slic3r::var(bitmap_name + ".svg").c_str(), str, replaces); - if (str.empty()) - return nullptr; - - return insert_bndl(bitmap_key, str.data(), target_width, target_height); -} - -wxBitmapBundle* BitmapCache::from_png(const std::string& bitmap_name, unsigned width, unsigned height) -{ - std::string bitmap_key = bitmap_name + (height != 0 ? - "-h" + std::to_string(height) : - "-w" + std::to_string(width)); - - auto it = m_bndl_map.find(bitmap_key); - if (it != m_bndl_map.end()) - return it->second; - - wxImage image; - if (!image.LoadFile(Slic3r::GUI::from_u8(Slic3r::var(bitmap_name + ".png")), wxBITMAP_TYPE_PNG) || - image.GetWidth() == 0 || image.GetHeight() == 0) - return nullptr; - - if (height != 0 && unsigned(image.GetHeight()) != height) - width = unsigned(0.5f + float(image.GetWidth()) * height / image.GetHeight()); - else if (width != 0 && unsigned(image.GetWidth()) != width) - height = unsigned(0.5f + float(image.GetHeight()) * width / image.GetWidth()); - - if (height != 0 && width != 0) - image.Rescale(width, height, wxIMAGE_QUALITY_BILINEAR); - - return this->insert_bndl(bitmap_key, wxImage_to_wxBitmap_with_alpha(std::move(image))); -} - -wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_width, unsigned target_height, +wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_width, unsigned target_height, const bool grayscale/* = false*/, const bool dark_mode/* = false*/, const std::string& new_color /*= ""*/, const float scale_in_center/* = 0*/) { std::string bitmap_key = bitmap_name + ( target_height !=0 ? @@ -472,7 +322,7 @@ wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_ // map of color replaces std::map replaces; - replaces["\"#0x00AE42\""] = "\"#009688\""; +replaces["\"#0x00AE42\""] = "\"#009688\""; replaces["\"#00FF00\""] = "\"#52c7b8\""; if (dark_mode) { replaces["\"#262E30\""] = "\"#EFEFF0\""; @@ -483,7 +333,7 @@ wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_ replaces["\"#6B6B6B\""] = "\"#818182\""; replaces["\"#909090\""] = "\"#FFFFFF\""; replaces["\"#00FF00\""] = "\"#FF0000\""; - replaces["\"#009688\""] = "\"#00675b\""; +replaces["\"#009688\""] = "\"#00675b\""; } //if (!new_color.empty()) // replaces["\"#ED6B21\""] = "\"" + new_color + "\""; @@ -536,9 +386,9 @@ wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_ return this->insert_raw_rgba(bitmap_key, width, height, data.data(), grayscale); } -/* + //we make scaled solid bitmaps only for the cases, when its will be used with scaled SVG icon in one output bitmap -wxBitmap BitmapCache::mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency, bool suppress_scaling/* = false* /, size_t border_width /*= 0* /, bool dark_mode/* = false* /) +wxBitmap BitmapCache::mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency, bool suppress_scaling/* = false*/, size_t border_width /*= 0*/, bool dark_mode/* = false*/) { double scale = suppress_scaling ? 1.0f : m_scale; width *= scale; @@ -580,89 +430,6 @@ wxBitmap BitmapCache::mksolid(size_t width, size_t height, unsigned char r, unsi return wxImage_to_wxBitmap_with_alpha(std::move(image), scale); } -*/ -//we make scaled solid bitmaps only for the cases, when its will be used with scaled SVG icon in one output bitmap -wxBitmapBundle BitmapCache::mksolid(size_t width_in, size_t height_in, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency, size_t border_width /*= 0*/, bool dark_mode/* = false*/) -{ - wxVector bitmaps; - - std::set scales = { 1.0 }; -#ifndef __linux__ - -#ifdef __APPLE__ - scales.emplace(m_scale); -#else - size_t disp_cnt = wxDisplay::GetCount(); - for (size_t disp = 0; disp < disp_cnt; ++disp) - scales.emplace(wxDisplay(disp).GetScaleFactor()); -#endif - -#endif // !__linux__ - - for (double scale : scales) { - size_t width = width_in * scale; - size_t height = height_in * scale; - - wxImage image(width, height); - image.InitAlpha(); - unsigned char* imgdata = image.GetData(); - unsigned char* imgalpha = image.GetAlpha(); - for (size_t i = 0; i < width * height; ++i) { - *imgdata++ = r; - *imgdata++ = g; - *imgdata++ = b; - *imgalpha++ = transparency; - } - - // Add border, make white/light spools easier to see - if (border_width > 0) { - - // Restrict to width of image - if (border_width > height) border_width = height - 1; - if (border_width > width) border_width = width - 1; - - auto px_data = (uint8_t*)image.GetData(); - auto a_data = (uint8_t*)image.GetAlpha(); - - for (size_t x = 0; x < width; ++x) { - for (size_t y = 0; y < height; ++y) { - if (x < border_width || y < border_width || - x >= (width - border_width) || y >= (height - border_width)) { - const size_t idx = (x + y * width); - const size_t idx_rgb = (x + y * width) * 3; - px_data[idx_rgb] = px_data[idx_rgb + 1] = px_data[idx_rgb + 2] = dark_mode ? 245u : 110u; - a_data[idx] = 255u; - } - } - } - } - - bitmaps.push_back(wxImage_to_wxBitmap_with_alpha(std::move(image), scale)); - } - return wxBitmapBundle::FromBitmaps(bitmaps); -} - -wxBitmapBundle* BitmapCache::mksolid_bndl(size_t width, size_t height, const std::string& color, size_t border_width, bool dark_mode) -{ - std::string bitmap_key = (color.empty() ? "empty" : color) + "-h" + std::to_string(height) + "-w" + std::to_string(width) + (dark_mode ? "-dm" : ""); - - wxBitmapBundle* bndl = nullptr; - auto it = m_bndl_map.find(bitmap_key); - if (it == m_bndl_map.end()) { - if (color.empty()) - bndl = new wxBitmapBundle(mksolid(width, height, 0, 0, 0, wxALPHA_TRANSPARENT, size_t(0))); - else { - ColorRGB rgb;// [3] - decode_color(color, rgb); - bndl = new wxBitmapBundle(mksolid(width, height, rgb.r_uchar(), rgb.g_uchar(), rgb.b_uchar(), wxALPHA_OPAQUE, border_width, dark_mode)); - } - m_bndl_map[bitmap_key] = bndl; - } - else - return it->second; - - return bndl; -} bool BitmapCache::parse_color(const std::string& scolor, unsigned char* rgb_out) { diff --git a/src/slic3r/GUI/BitmapCache.hpp b/src/slic3r/GUI/BitmapCache.hpp index 54062777b4..ab9e457240 100644 --- a/src/slic3r/GUI/BitmapCache.hpp +++ b/src/slic3r/GUI/BitmapCache.hpp @@ -12,8 +12,7 @@ #include "libslic3r/Color.hpp" struct NSVGimage; -namespace Slic3r { -namespace GUI { +namespace Slic3r { namespace GUI { class BitmapCache { @@ -23,23 +22,15 @@ public: void clear(); double scale() { return m_scale; } - wxBitmapBundle* find_bndl(const std::string &name) { auto it = m_bndl_map.find(name); return (it == m_bndl_map.end()) ? nullptr : it->second; } - const wxBitmapBundle* find_bndl(const std::string &name) const { return const_cast(this)->find_bndl(name); } wxBitmap* find(const std::string &name) { auto it = m_map.find(name); return (it == m_map.end()) ? nullptr : it->second; } const wxBitmap* find(const std::string &name) const { return const_cast(this)->find(name); } - wxBitmapBundle* insert_bndl(const std::string& bitmap_key, const char* data, size_t width, size_t height); - wxBitmapBundle* insert_bndl(const std::string& bitmap_key, const wxBitmapBundle &bmp); - wxBitmapBundle* insert_bndl(const std::string& bitmap_key, const wxVector& bmps); - wxBitmapBundle* insert_bndl(const std::string& name, const std::vector& bmps); - wxBitmapBundle* insert_raw_rgba_bndl(const std::string &bitmap_key, unsigned width, unsigned height, const unsigned char *raw_data, const bool grayscale = false); - - wxBitmap* insert(const std::string &name, size_t width, size_t height, double scale = -1.0); + wxBitmap* insert(const std::string &name, size_t width, size_t height); wxBitmap* insert(const std::string &name, const wxBitmap &bmp); -// wxBitmap* insert(const std::string &name, const wxBitmap &bmp, const wxBitmap &bmp2); -// wxBitmap* insert(const std::string &name, const wxBitmap &bmp, const wxBitmap &bmp2, const wxBitmap &bmp3); -// wxBitmap* insert(const std::string &name, const std::vector &bmps) { return this->insert(name, &bmps.front(), &bmps.front() + bmps.size()); } -// wxBitmap* insert(const std::string &name, const wxBitmap *begin, const wxBitmap *end); + wxBitmap* insert(const std::string &name, const wxBitmap &bmp, const wxBitmap &bmp2); + wxBitmap* insert(const std::string &name, const wxBitmap &bmp, const wxBitmap &bmp2, const wxBitmap &bmp3); + wxBitmap* insert(const std::string &name, const std::vector &bmps) { return this->insert(name, &bmps.front(), &bmps.front() + bmps.size()); } + wxBitmap* insert(const std::string &name, const wxBitmap *begin, const wxBitmap *end); wxBitmap* insert_raw_rgba(const std::string &bitmap_key, unsigned width, unsigned height, const unsigned char *raw_data, const bool grayscale = false); // BBS: support resize by fill border (scale_in_center) @@ -50,28 +41,19 @@ public: // And makes replases befor parsing // replace_map containes old_value->new_value static NSVGimage* nsvgParseFromFileWithReplace(const char* filename, const char* units, float dpi, const std::map& replaces); - // Gets a data from SVG file and makes replases - // replace_map containes old_value->new_value - static void nsvgGetDataFromFileWithReplace(const char* filename, std::string& data_str, const std::map& replaces); - wxBitmapBundle* from_svg(const std::string& bitmap_name, unsigned target_width, unsigned target_height, const bool dark_mode, const std::string& new_color = ""); - wxBitmapBundle* from_png(const std::string& bitmap_name, unsigned width, unsigned height); // Load svg from resources/icons. bitmap_key is given without the .svg suffix. SVG will be rasterized to provided height/width. wxBitmap* load_svg(const std::string &bitmap_key, unsigned width = 0, unsigned height = 0, const bool grayscale = false, const bool dark_mode = false, const std::string& new_color = "", const float scale_in_center = 0.f); -// wxBitmap mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency, bool suppress_scaling = false, size_t border_width = 0, bool dark_mode = false); -// wxBitmap mksolid(size_t width, size_t height, const unsigned char rgb[3], bool suppress_scaling = false, size_t border_width = 0, bool dark_mode = false) { return mksolid(width, height, rgb[0], rgb[1], rgb[2], wxALPHA_OPAQUE, suppress_scaling, border_width, dark_mode); } -// wxBitmap mksolid(size_t width, size_t height, const ColorRGB& rgb, bool suppress_scaling = false, size_t border_width = 0, bool dark_mode = false) { return mksolid(width, height, rgb.r_uchar(), rgb.g_uchar(), rgb.b_uchar(), wxALPHA_OPAQUE, suppress_scaling, border_width, dark_mode); } -// wxBitmap mkclear(size_t width, size_t height) { return mksolid(width, height, 0, 0, 0, wxALPHA_TRANSPARENT, true, 0); } - wxBitmapBundle mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency, size_t border_width = 0, bool dark_mode = false); - wxBitmapBundle* mksolid_bndl(size_t width, size_t height, const std::string& color = std::string(), size_t border_width = 0, bool dark_mode = false); - wxBitmapBundle* mkclear_bndl(size_t width, size_t height) { return mksolid_bndl(width, height); } + wxBitmap mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency, bool suppress_scaling = false, size_t border_width = 0, bool dark_mode = false); + wxBitmap mksolid(size_t width, size_t height, const unsigned char rgb[3], bool suppress_scaling = false, size_t border_width = 0, bool dark_mode = false) { return mksolid(width, height, rgb[0], rgb[1], rgb[2], wxALPHA_OPAQUE, suppress_scaling, border_width, dark_mode); } + wxBitmap mksolid(size_t width, size_t height, const ColorRGB& rgb, bool suppress_scaling = false, size_t border_width = 0, bool dark_mode = false) { return mksolid(width, height, rgb.r_uchar(), rgb.g_uchar(), rgb.b_uchar(), wxALPHA_OPAQUE, suppress_scaling, border_width, dark_mode); } + wxBitmap mkclear(size_t width, size_t height) { return mksolid(width, height, 0, 0, 0, wxALPHA_TRANSPARENT); } static bool parse_color(const std::string& scolor, unsigned char* rgb_out); static bool parse_color4(const std::string& scolor, unsigned char* rgba_out); private: std::map m_map; - std::map m_bndl_map; double m_gs = 0.2; // value, used for image.ConvertToGreyscale(m_gs, m_gs, m_gs) double m_scale = 1.0; // value, used for correct scaling of SVG icons on Retina display }; diff --git a/src/slic3r/GUI/BitmapComboBox.cpp b/src/slic3r/GUI/BitmapComboBox.cpp index 24a971eb88..36c15343d3 100644 --- a/src/slic3r/GUI/BitmapComboBox.cpp +++ b/src/slic3r/GUI/BitmapComboBox.cpp @@ -54,6 +54,17 @@ using Slic3r::GUI::format_wxstr; namespace Slic3r { namespace GUI { +/* For PresetComboBox we use bitmaps that are created from images that are already scaled appropriately for Retina + * (Contrary to the intuition, the `scale` argument for Bitmap's constructor doesn't mean + * "please scale this to such and such" but rather + * "the wxImage is already sized for backing scale such and such". ) + * Unfortunately, the constructor changes the size of wxBitmap too. + * Thus We need to use unscaled size value for bitmaps that we use + * to avoid scaled size of control items. + * For this purpose control drawing methods and + * control size calculation methods (virtual) are overridden. + **/ + BitmapComboBox::BitmapComboBox(wxWindow* parent, wxWindowID id/* = wxID_ANY*/, const wxString& value/* = wxEmptyString*/, @@ -79,6 +90,72 @@ BitmapComboBox::~BitmapComboBox() { } +#ifdef __APPLE__ +bool BitmapComboBox::OnAddBitmap(const wxBitmap& bitmap) +{ + if (bitmap.IsOk()) + { + // we should use scaled! size values of bitmap + int width = (int)bitmap.GetScaledWidth(); + int height = (int)bitmap.GetScaledHeight(); + + if (m_usedImgSize.x < 0) + { + // If size not yet determined, get it from this image. + m_usedImgSize.x = width; + m_usedImgSize.y = height; + + // Adjust control size to vertically fit the bitmap + wxWindow* ctrl = GetControl(); + ctrl->InvalidateBestSize(); + wxSize newSz = ctrl->GetBestSize(); + wxSize sz = ctrl->GetSize(); + if (newSz.y > sz.y) + ctrl->SetSize(sz.x, newSz.y); + else + DetermineIndent(); + } + + wxCHECK_MSG(width == m_usedImgSize.x && height == m_usedImgSize.y, + false, + "you can only add images of same size"); + + return true; + } + + return false; +} + +void BitmapComboBox::OnDrawItem(wxDC& dc, + const wxRect& rect, + int item, + int flags) const +{ + const wxBitmap& bmp = *(static_cast(m_bitmaps[item])); + if (bmp.IsOk()) + { + // we should use scaled! size values of bitmap + wxCoord w = bmp.GetScaledWidth(); + wxCoord h = bmp.GetScaledHeight(); + + const int imgSpacingLeft = 4; + + // Draw the image centered + dc.DrawBitmap(bmp, + rect.x + (m_usedImgSize.x - w) / 2 + imgSpacingLeft, + rect.y + (rect.height - h) / 2, + true); + } + + wxString text = GetString(item); + if (!text.empty()) + dc.DrawText(text, + rect.x + m_imgAreaWidth + 1, + rect.y + (rect.height - dc.GetCharHeight()) / 2); +} +#endif + + #ifdef _WIN32 int BitmapComboBox::Append(const wxString& item) @@ -89,11 +166,18 @@ int BitmapComboBox::Append(const wxString& item) //2. But then set width to 0 value for no using of bitmap left and right spacing //3. Set this empty bitmap to the at list one item and BitmapCombobox will be recreated correct - wxBitmapBundle bitmap = *get_empty_bmp_bundle(1, 16); + wxBitmap bitmap(1, int(1.6 * wxGetApp().em_unit() + 1)); + { + // bitmap.SetWidth(0); is depricated now + // so, use next code + bitmap.UnShare();// AllocExclusive(); + bitmap.GetGDIImageData()->m_width = 0; + } + OnAddBitmap(bitmap); - const int n = wxComboBox::Append(item); - + if (n != wxNOT_FOUND) + DoSetItemBitmap(n, bitmap); return n; } diff --git a/src/slic3r/GUI/BitmapComboBox.hpp b/src/slic3r/GUI/BitmapComboBox.hpp index 545213fc3c..a77bf401d6 100644 --- a/src/slic3r/GUI/BitmapComboBox.hpp +++ b/src/slic3r/GUI/BitmapComboBox.hpp @@ -29,13 +29,28 @@ BitmapComboBox(wxWindow* parent, #ifdef _WIN32 int Append(const wxString& item); #endif - int Append(const wxString& item, const wxBitmapBundle& bitmap) + int Append(const wxString& item, const wxBitmap& bitmap) { return wxBitmapComboBox::Append(item, bitmap); } protected: +#ifdef __APPLE__ +/* For PresetComboBox we use bitmaps that are created from images that are already scaled appropriately for Retina + * (Contrary to the intuition, the `scale` argument for Bitmap's constructor doesn't mean + * "please scale this to such and such" but rather + * "the wxImage is already sized for backing scale such and such". ) + * Unfortunately, the constructor changes the size of wxBitmap too. + * Thus We need to use unscaled size value for bitmaps that we use + * to avoid scaled size of control items. + * For this purpose control drawing methods and + * control size calculation methods (virtual) are overridden. + **/ +bool OnAddBitmap(const wxBitmap& bitmap) override; +void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const override; +#endif + #ifdef _WIN32 bool MSWOnDraw(WXDRAWITEMSTRUCT* item) override; void DrawBackground_(wxDC& dc, const wxRect& rect, int WXUNUSED(item), int flags) const; diff --git a/src/slic3r/GUI/CalibrationPanel.cpp b/src/slic3r/GUI/CalibrationPanel.cpp index 465fc95e6f..9a16c13322 100644 --- a/src/slic3r/GUI/CalibrationPanel.cpp +++ b/src/slic3r/GUI/CalibrationPanel.cpp @@ -102,9 +102,9 @@ void MObjectPanel::doRender(wxDC& dc) if (m_state == PrinterState::IN_LAN) { dwbitmap = m_printer_in_lan; } // dc.DrawCircle(left, size.y / 2, 3); - dc.DrawBitmap(dwbitmap.get_bitmap(), wxPoint(left, (size.y - dwbitmap.GetSize().y) / 2)); + dc.DrawBitmap(dwbitmap.bmp(), wxPoint(left, (size.y - dwbitmap.GetBmpSize().y) / 2)); - left += dwbitmap.GetSize().x + 8; + left += dwbitmap.GetBmpSize().x + 8; dc.SetFont(Label::Body_13); dc.SetBackgroundMode(wxTRANSPARENT); dc.SetTextForeground(StateColor::darkModeColorFor(SELECT_MACHINE_GREY900)); @@ -242,7 +242,7 @@ void SelectMObjectPopup::Popup(wxWindow* WXUNUSED(focus)) if (wxGetApp().is_user_login()) { if (!get_print_info_thread) { - get_print_info_thread = new boost::thread(Slic3r::create_thread([this, token = std::weak_ptr(m_token)] { + get_print_info_thread = new boost::thread(Slic3r::create_thread([this, token = std::weak_ptr(m_token)] { NetworkAgent* agent = wxGetApp().getAgent(); unsigned int http_code; std::string body; @@ -716,4 +716,4 @@ CalibrationPanel::~CalibrationPanel() { delete m_refresh_timer; } -}} \ No newline at end of file +}} diff --git a/src/slic3r/GUI/CalibrationWizardPage.cpp b/src/slic3r/GUI/CalibrationWizardPage.cpp index 648ce0871c..f3ff77313b 100644 --- a/src/slic3r/GUI/CalibrationWizardPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPage.cpp @@ -371,7 +371,7 @@ CaliPageCaption::CaliPageCaption(wxWindow* parent, CalibMode cali_mode, auto top_sizer = new wxBoxSizer(wxVERTICAL); auto caption_sizer = new wxBoxSizer(wxHORIZONTAL); m_prev_btn = new ScalableButton(this, wxID_ANY, "cali_page_caption_prev", - wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, 30); + wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 30); m_prev_btn->SetBackgroundColour(*wxWHITE); caption_sizer->Add(m_prev_btn, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(10)); @@ -382,7 +382,7 @@ CaliPageCaption::CaliPageCaption(wxWindow* parent, CalibMode cali_mode, caption_sizer->Add(title_text, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(10)); m_help_btn = new ScalableButton(this, wxID_ANY, "cali_page_caption_help", - wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, 30); + wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 30); m_help_btn->Hide(); m_help_btn->SetBackgroundColour(*wxWHITE); caption_sizer->Add(m_help_btn, 0, wxALIGN_CENTER); @@ -472,12 +472,12 @@ void CaliPageCaption::show_help_icon(bool show) void CaliPageCaption::on_sys_color_changed() { - m_prev_btn->sys_color_changed(); + m_prev_btn->msw_rescale(); } void CaliPageCaption::msw_rescale() { - m_prev_btn->sys_color_changed(); + m_prev_btn->msw_rescale(); } CaliPageStepGuide::CaliPageStepGuide(wxWindow* parent, wxArrayString steps, @@ -593,7 +593,7 @@ PAPageHelpPanel::PAPageHelpPanel(wxWindow* parent, bool ground_panel, wxWindowID wxBoxSizer* help_text_sizer = new wxBoxSizer(wxHORIZONTAL); auto help_text = new Label(this, _L("You could change the Flow Dynamics Calibration Factor in material editing")); help_text->SetFont(Label::Body_14); - m_help_btn = new ScalableButton(this, wxID_ANY, "cali_page_caption_help", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, 24); + m_help_btn = new ScalableButton(this, wxID_ANY, "cali_page_caption_help", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 24); m_help_btn->SetBackgroundColour(m_help_btn->GetParent()->GetBackgroundColour()); help_text_sizer->Add(help_text, 0, wxALIGN_CENTER | wxLEFT, left_align_padding); help_text_sizer->Add(m_help_btn, 0, wxALIGN_CENTER | wxLEFT, FromDIP(8)); @@ -611,8 +611,8 @@ PAPageHelpPanel::PAPageHelpPanel(wxWindow* parent, bool ground_panel, wxWindowID void PAPageHelpPanel::msw_rescale() { - m_help_btn->sys_color_changed(); - m_bmp.sys_color_changed(); + m_help_btn->msw_rescale(); + m_bmp.msw_rescale(); m_img->SetBitmap(m_bmp.bmp()); } diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index 23e611f43b..83f385365c 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -448,7 +448,7 @@ CalibrationPresetPage::CalibrationPresetPage( void CalibrationPresetPage::msw_rescale() { CalibrationWizardPage::msw_rescale(); - m_ams_sync_button->sys_color_changed(); + m_ams_sync_button->msw_rescale(); m_virtual_tray_comboBox->msw_rescale(); for (auto& comboBox : m_filament_comboBox_list) { comboBox->msw_rescale(); @@ -458,7 +458,7 @@ void CalibrationPresetPage::msw_rescale() void CalibrationPresetPage::on_sys_color_changed() { CalibrationWizardPage::on_sys_color_changed(); - m_ams_sync_button->sys_color_changed(); + m_ams_sync_button->msw_rescale(); } void CalibrationPresetPage::create_selection_panel(wxWindow* parent) @@ -507,7 +507,7 @@ void CalibrationPresetPage::create_selection_panel(wxWindow* parent) filament_for_text->SetFont(Label::Head_14); filament_for_title_sizer->Add(filament_for_text, 0, wxALIGN_CENTER); filament_for_title_sizer->AddSpacer(FromDIP(25)); - m_ams_sync_button = new ScalableButton(parent, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, 18); + m_ams_sync_button = new ScalableButton(parent, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 18); m_ams_sync_button->SetBackgroundColour(*wxWHITE); m_ams_sync_button->SetToolTip(_L("Synchronize filament list from AMS")); filament_for_title_sizer->Add(m_ams_sync_button, 0, wxALIGN_CENTER); diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index be63c1706a..e7b5cf68dd 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -470,8 +470,8 @@ CameraItem::CameraItem(wxWindow *parent, std::string normal, std::string hover) CameraItem::~CameraItem() {} void CameraItem::msw_rescale() { - m_bitmap_normal.sys_color_changed(); - m_bitmap_hover.sys_color_changed(); + m_bitmap_normal.msw_rescale(); + m_bitmap_hover.msw_rescale(); } void CameraItem::on_enter_win(wxMouseEvent &evt) @@ -519,9 +519,9 @@ void CameraItem::render(wxDC &dc) void CameraItem::doRender(wxDC &dc) { if (m_hover) { - dc.DrawBitmap(m_bitmap_hover.get_bitmap(), wxPoint((GetSize().x - m_bitmap_hover.GetSize().x) / 2, (GetSize().y - m_bitmap_hover.GetSize().y) / 2)); + dc.DrawBitmap(m_bitmap_hover.bmp(), wxPoint((GetSize().x - m_bitmap_hover.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_hover.GetBmpSize().y) / 2)); } else { - dc.DrawBitmap(m_bitmap_normal.get_bitmap(), wxPoint((GetSize().x - m_bitmap_normal.GetSize().x) / 2, (GetSize().y - m_bitmap_normal.GetSize().y) / 2)); + dc.DrawBitmap(m_bitmap_normal.bmp(), wxPoint((GetSize().x - m_bitmap_normal.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_normal.GetBmpSize().y) / 2)); } } diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index bb0ced4406..79ba0dc7b7 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -277,7 +277,6 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con sparse_infill_density == 0 && ! config->opt_bool("enable_support") && config->opt_int("enforce_support_layers") == 0 && - config->opt_bool("ensure_vertical_shell_thickness") && ! config->opt_bool("detect_thin_wall") && ! config->opt_bool("overhang_reverse") && config->opt_enum("timelapse_type") == TimelapseType::tlTraditional)) @@ -305,7 +304,6 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con new_conf.set_key_value("sparse_infill_density", new ConfigOptionPercent(0)); new_conf.set_key_value("enable_support", new ConfigOptionBool(false)); new_conf.set_key_value("enforce_support_layers", new ConfigOptionInt(0)); - new_conf.set_key_value("ensure_vertical_shell_thickness", new ConfigOptionBool(true)); new_conf.set_key_value("detect_thin_wall", new ConfigOptionBool(false)); new_conf.set_key_value("overhang_reverse", new ConfigOptionBool(false)); new_conf.set_key_value("timelapse_type", new ConfigOptionEnum(tlTraditional)); @@ -326,6 +324,30 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con } is_msg_dlg_already_exist = false; } + + if (config->opt_bool("alternate_extra_wall") && config->opt_bool("ensure_vertical_shell_thickness")) + { + wxString msg_text = _(L("Alternate extra wall only works with ensure vertical shell thickness disabled. ")); + + if (is_global_config) + msg_text += "\n\n" + _(L("Change these settings automatically? \n" + "Yes - Disable ensure vertical shell thickness and enable alternate extra wall\n" + "No - Dont use alternate extra wall")); + + MessageDialog dialog(m_msg_dlg_parent, msg_text, "", + wxICON_WARNING | (is_global_config ? wxYES | wxNO : wxOK)); + DynamicPrintConfig new_conf = *config; + auto answer = dialog.ShowModal(); + if (!is_global_config || answer == wxID_YES) { + new_conf.set_key_value("ensure_vertical_shell_thickness", new ConfigOptionBool(false)); + new_conf.set_key_value("alternate_extra_wall", new ConfigOptionBool(true)); + } + else { + new_conf.set_key_value("ensure_vertical_shell_thickness", new ConfigOptionBool(true)); + new_conf.set_key_value("alternate_extra_wall", new ConfigOptionBool(false)); + } + apply(config, &new_conf); + } // BBS int filament_cnt = wxGetApp().preset_bundle->filament_presets.size(); @@ -506,7 +528,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co bool has_spiral_vase = config->opt_bool("spiral_mode"); toggle_line("spiral_mode_smooth", has_spiral_vase); - toggle_line("spiral_mode_max_xy_smoothing", config->opt_bool("spiral_mode_smooth")); + toggle_line("spiral_mode_max_xy_smoothing", has_spiral_vase && config->opt_bool("spiral_mode_smooth")); bool has_top_solid_infill = config->opt_int("top_shell_layers") > 0; bool has_bottom_solid_infill = config->opt_int("bottom_shell_layers") > 0; bool has_solid_infill = has_top_solid_infill || has_bottom_solid_infill; @@ -690,8 +712,6 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_line("make_overhang_printable_angle", have_make_overhang_printable); toggle_line("make_overhang_printable_hole_size", have_make_overhang_printable); - toggle_line("exclude_object", gcflavor == gcfKlipper); - toggle_line("min_width_top_surface",config->opt_bool("only_one_wall_top")); for (auto el : { "hole_to_polyhole_threshold", "hole_to_polyhole_twisted" }) diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index f59530ed0d..a34a7cd46e 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -1499,7 +1499,7 @@ ConfigWizardIndex::ConfigWizardIndex(wxWindow *parent) #ifndef __WXOSX__ SetDoubleBuffered(true);// SetDoubleBuffered exists on Win and Linux/GTK, but is missing on OSX #endif //__WXOSX__ - SetMinSize(bg.GetSize()); + SetMinSize(bg.bmp().GetSize()); const wxSize size = GetTextExtent("m"); em_w = size.x; @@ -1626,8 +1626,8 @@ void ConfigWizardIndex::on_paint(wxPaintEvent & evt) wxPaintDC dc(this); - const auto bullet_w = bullet_black.GetWidth(); - const auto bullet_h = bullet_black.GetHeight(); + const auto bullet_w = bullet_black.bmp().GetSize().GetWidth(); + const auto bullet_h = bullet_black.bmp().GetSize().GetHeight(); const int yoff_icon = bullet_h < em_h ? (em_h - bullet_h) / 2 : 0; const int yoff_text = bullet_h > em_h ? (bullet_h - em_h) / 2 : 0; const int yinc = item_height(); @@ -1640,10 +1640,10 @@ void ConfigWizardIndex::on_paint(wxPaintEvent & evt) unsigned x = em_w/2 + item.indent * em_w; if (i == item_active || (item_hover >= 0 && i == (size_t)item_hover)) { - dc.DrawBitmap(bullet_blue.get_bitmap(), x, y + yoff_icon, false); + dc.DrawBitmap(bullet_blue.bmp(), x, y + yoff_icon, false); } - else if (i < item_active) { dc.DrawBitmap(bullet_black.get_bitmap(), x, y + yoff_icon, false); } - else if (i > item_active) { dc.DrawBitmap(bullet_white.get_bitmap(), x, y + yoff_icon, false); } + else if (i < item_active) { dc.DrawBitmap(bullet_black.bmp(), x, y + yoff_icon, false); } + else if (i > item_active) { dc.DrawBitmap(bullet_white.bmp(), x, y + yoff_icon, false); } x += + bullet_w + em_w/2; const auto text_size = dc.GetTextExtent(item.label); @@ -1655,9 +1655,9 @@ void ConfigWizardIndex::on_paint(wxPaintEvent & evt) } //draw logo - if (int y = size.y - bg.GetHeight(); y>=0) { - dc.DrawBitmap(bg.get_bitmap(), 0, y, false); - index_width = std::max(index_width, bg.GetWidth() + em_w / 2); + if (int y = size.y - bg.GetBmpHeight(); y>=0) { + dc.DrawBitmap(bg.bmp(), 0, y, false); + index_width = std::max(index_width, bg.GetBmpWidth() + em_w / 2); } if (GetMinSize().x < index_width) { @@ -1689,12 +1689,12 @@ void ConfigWizardIndex::msw_rescale() em_w = size.x; em_h = size.y; - bg.sys_color_changed(); - SetMinSize(bg.GetSize()); + bg.msw_rescale(); + SetMinSize(bg.bmp().GetSize()); - bullet_black.sys_color_changed(); - bullet_blue.sys_color_changed(); - bullet_white.sys_color_changed(); + bullet_black.msw_rescale(); + bullet_blue.msw_rescale(); + bullet_white.msw_rescale(); Refresh(); } diff --git a/src/slic3r/GUI/ConfigWizard_private.hpp b/src/slic3r/GUI/ConfigWizard_private.hpp index 4b0a86703f..364d378b42 100644 --- a/src/slic3r/GUI/ConfigWizard_private.hpp +++ b/src/slic3r/GUI/ConfigWizard_private.hpp @@ -510,7 +510,7 @@ private: ssize_t item_hover; size_t last_page; - int item_height() const { return std::max(bullet_black.GetHeight(), em_w) + em_w; } + int item_height() const { return std::max(bullet_black.bmp().GetSize().GetHeight(), em_w) + em_w; } void on_paint(wxPaintEvent &evt); void on_mouse_move(wxMouseEvent &evt); diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 611602acc5..8f48923c4e 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -13,6 +13,7 @@ #include "FileHelp.hpp" #include "Tab.hpp" #include "MainFrame.hpp" +#include "libslic3r_version.h" #define NAME_OPTION_COMBOBOX_SIZE wxSize(FromDIP(200), FromDIP(24)) #define FILAMENT_PRESET_COMBOBOX_SIZE wxSize(FromDIP(300), FromDIP(24)) @@ -179,7 +180,7 @@ static bool delete_filament_preset_by_name(std::string delete_preset_name, std:: return true; } -static std::string get_curr_time() +static std::string get_curr_time(const char* format = "%Y_%m_%d_%H_%M_%S") { std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); @@ -187,7 +188,7 @@ static std::string get_curr_time() std::tm local_time = *std::localtime(&time); std::ostringstream time_stream; - time_stream << std::put_time(&local_time, "%Y_%m_%d_%H_%M_%S"); + time_stream << std::put_time(&local_time, format); std::string current_time = time_stream.str(); return current_time; @@ -195,11 +196,12 @@ static std::string get_curr_time() static std::string get_curr_timestmp() { - std::time_t currentTime = std::time(nullptr); - std::ostringstream oss; - oss << currentTime; - std::string timestampString = oss.str(); - return timestampString; + return get_curr_time("%Y%m%d%H%M%S"); + // std::time_t currentTime = std::time(nullptr); + // std::ostringstream oss; + // oss << currentTime; + // std::string timestampString = oss.str(); + // return timestampString; } static void get_filament_compatible_printer(Preset* preset, vector& printers) @@ -1474,9 +1476,9 @@ wxBoxSizer *CreatePrinterPresetDialog::create_step_switch_item() { wxBoxSizer *step_switch_sizer = new wxBoxSizer(wxVERTICAL); - std::string wiki_url = "https://wiki.bambulab.com/en/software/bambu-studio/3rd-party-printer-profile"; - wxHyperlinkCtrl *m_download_hyperlink = new wxHyperlinkCtrl(this, wxID_ANY, _L("wiki"), wiki_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); - step_switch_sizer->Add(m_download_hyperlink, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(5)); + // std::string wiki_url = "https://wiki.bambulab.com/en/software/bambu-studio/3rd-party-printer-profile"; + // wxHyperlinkCtrl *m_download_hyperlink = new wxHyperlinkCtrl(this, wxID_ANY, _L("wiki"), wiki_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); + // step_switch_sizer->Add(m_download_hyperlink, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(5)); wxBoxSizer *horizontal_sizer = new wxBoxSizer(wxHORIZONTAL); wxPanel * step_switch_panel = new wxPanel(this); @@ -3266,8 +3268,8 @@ void CreatePresetSuccessfulDialog::on_dpi_changed(const wxRect &suggested_rect) ExportConfigsDialog::ExportConfigsDialog(wxWindow *parent) : DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Export Configs"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { - m_exprot_type.preset_bundle = _L("Printer config bundle(.bbscfg)"); - m_exprot_type.filament_bundle = _L("Filament bundle(.bbsflmt)"); + m_exprot_type.preset_bundle = _L("Printer config bundle(.orca_printer)"); + m_exprot_type.filament_bundle = _L("Filament bundle(.orca_filament)"); m_exprot_type.printer_preset = _L("Printer presets(.zip)"); m_exprot_type.filament_preset = _L("Filament presets(.zip)"); m_exprot_type.process_preset = _L("Process presets(.zip)"); @@ -3407,49 +3409,7 @@ std::string ExportConfigsDialog::initial_file_path(const wxString &path, const s std::string export_path = into_u8(path); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "initial file path and path is:" << export_path << " and sub path is: " << sub_file_path; boost::filesystem::path printer_export_path = (boost::filesystem::path(export_path) / sub_file_path).make_preferred(); - if (boost::filesystem::exists(printer_export_path)) { - MessageDialog dlg(this, wxString::Format(_L("The '%s' folder already exists in the current directory. Do you want to clear it and rebuild it.\nIf not, a time suffix will be " - "added, and you can modify the name after creation."), sub_file_path), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE); - int res = dlg.ShowModal(); - if (wxID_YES == res) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Same path exists, delete and need to rebuild, and path is: " << printer_export_path.string(); - try { - boost::filesystem::remove_all(printer_export_path); - } catch (...) { - MessageDialog dlg(this, _L(wxString::Format("The file: %s \nin the directory may have been opened by another program. \nPlease close it and try again.", - encode_path(printer_export_path.string().c_str()))), - wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), - wxYES | wxYES_DEFAULT | wxCENTRE); - dlg.ShowModal(); - return "initial_failed"; - } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "delete path"; - boost::filesystem::create_directories(printer_export_path); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "create path"; - export_path = printer_export_path.string(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Same path exists, delete and rebuild, and path is: " << export_path; - } else if (wxID_NO == res) { - export_path = printer_export_path.string(); - std::string export_path_with_time; - boost::filesystem::path *printer_export_path_with_time = nullptr; - do { - if (printer_export_path_with_time) { - delete printer_export_path_with_time; - printer_export_path_with_time = nullptr; - } - export_path_with_time = export_path + " " + get_curr_time(); - printer_export_path_with_time = new boost::filesystem::path(export_path_with_time); - } while (boost::filesystem::exists(*printer_export_path_with_time)); - export_path = export_path_with_time; - boost::filesystem::create_directories(*printer_export_path_with_time); - if (printer_export_path_with_time) { - delete printer_export_path_with_time; - printer_export_path_with_time = nullptr; - } - } else { - return ""; - } - } else { + if (!boost::filesystem::exists(printer_export_path)) { boost::filesystem::create_directories(printer_export_path); export_path = printer_export_path.string(); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Same path exists, delete and rebuild, and path is: " << export_path; @@ -3519,7 +3479,7 @@ wxBoxSizer *ExportConfigsDialog::create_export_config_item(wxWindow *parent) radioBoxSizer->Add(create_radio_item(m_exprot_type.preset_bundle, parent, wxEmptyString, m_export_type_btns), 0, wxEXPAND | wxALL, 0); radioBoxSizer->Add(0, 0, 0, wxTOP, FromDIP(6)); - wxStaticText *static_export_printer_preset_bundle_text = new wxStaticText(parent, wxID_ANY, _L("Printer and all the filament&process presets that belongs to the printer. \nCan be shared with others."), wxDefaultPosition, wxDefaultSize); + wxStaticText *static_export_printer_preset_bundle_text = new wxStaticText(parent, wxID_ANY, _L("Printer and all the filament&&process presets that belongs to the printer. \nCan be shared with others."), wxDefaultPosition, wxDefaultSize); static_export_printer_preset_bundle_text->SetFont(Label::Body_12); static_export_printer_preset_bundle_text->SetForegroundColour(wxColour("#6B6B6B")); radioBoxSizer->Add(static_export_printer_preset_bundle_text, 0, wxEXPAND | wxLEFT, FromDIP(22)); @@ -3707,7 +3667,7 @@ void ExportConfigsDialog::select_curr_radiobox(std::vectorname; json bundle_structure; - NetworkAgent *agent = wxGetApp().getAgent(); std::string clock = get_curr_timestmp(); - if (agent) { - bundle_structure["user_name"] = agent->get_user_name(); - bundle_structure["user_id"] = agent->get_user_id(); - bundle_structure["version"] = agent->get_version(); - bundle_structure["bundle_id"] = agent->get_user_id() + "_" + printer_preset_name_ + "_" + clock; - } else { - bundle_structure["user_name"] = ""; - bundle_structure["user_id"] = ""; - bundle_structure["version"] = ""; - bundle_structure["bundle_id"] = "offline_" + printer_preset_name_ + "_" + clock; - } + bundle_structure["user_name"] = ""; + bundle_structure["user_id"] = ""; + bundle_structure["version"] = SoftFever_VERSION; + bundle_structure["bundle_id"] = printer_preset_name_ + "_" + clock; bundle_structure["bundle_type"] = "printer config bundle"; bundle_structure["printer_preset_name"] = printer_preset_name_; json printer_config = json::array(); @@ -3737,21 +3689,21 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_fi json process_configs = json::array(); mz_zip_archive zip_archive; - mz_bool status = initial_zip_archive(zip_archive, export_path + "/" + printer_preset->name + ".bbscfg"); + mz_bool status = initial_zip_archive(zip_archive, export_path + "/" + printer_preset->name + ".orca_printer"); if (MZ_FALSE == status) { BOOST_LOG_TRIVIAL(info) << "Failed to initialize ZIP archive"; return ExportCase::INITIALIZE_FAIL; } - boost::filesystem::path pronter_file_path = boost::filesystem::path(printer_preset->file); - std::string preset_path = pronter_file_path.make_preferred().string(); + boost::filesystem::path printer_file_path = boost::filesystem::path(printer_preset->file); + std::string preset_path = printer_file_path.make_preferred().string(); if (preset_path.empty()) { BOOST_LOG_TRIVIAL(info) << "Export printer preset: " << printer_preset->name << " skip because of the preset file path is empty."; continue; } // Add a file to the ZIP file - std::string printer_config_file_name = "printer/" + pronter_file_path.filename().string(); + std::string printer_config_file_name = "printer/" + printer_file_path.filename().string(); status = mz_zip_writer_add_file(&zip_archive, printer_config_file_name.c_str(), encode_path(preset_path.c_str()).c_str(), NULL, 0, MZ_DEFAULT_COMPRESSION); //status = mz_zip_writer_add_mem(&zip_archive, ("printer/" + printer_preset->name + ".json").c_str(), json_contents, strlen(json_contents), MZ_DEFAULT_COMPRESSION); if (MZ_FALSE == status) { @@ -3831,7 +3783,7 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_fi ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_filament_bundle_to_file(const wxString &path) { - std::string export_path = initial_file_path(path, "Filament bundle"); + std::string export_path = initial_file_path(path, ""); if (export_path.empty() || "initial_failed" == export_path) return ExportCase::EXPORT_CANCEL; BOOST_LOG_TRIVIAL(info) << "Export filament preset bundle"; @@ -3840,25 +3792,17 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_filament_bundle_to_ std::string filament_name = checkbox_filament_name.second; json bundle_structure; - NetworkAgent *agent = wxGetApp().getAgent(); std::string clock = get_curr_timestmp(); - if (agent) { - bundle_structure["user_name"] = agent->get_user_name(); - bundle_structure["user_id"] = agent->get_user_id(); - bundle_structure["version"] = agent->get_version(); - bundle_structure["bundle_id"] = agent->get_user_id() + "_" + filament_name + "_" + clock; - } else { - bundle_structure["user_name"] = ""; - bundle_structure["user_id"] = ""; - bundle_structure["version"] = ""; - bundle_structure["bundle_id"] = "offline_" + filament_name + "_" + clock; - } + bundle_structure["user_name"] = ""; + bundle_structure["user_id"] = ""; + bundle_structure["version"] = SoftFever_VERSION; + bundle_structure["bundle_id"] = filament_name + "_" + clock; bundle_structure["bundle_type"] = "filament config bundle"; bundle_structure["filament_name"] = filament_name; std::unordered_map vendor_structure; mz_zip_archive zip_archive; - mz_bool status = initial_zip_archive(zip_archive, export_path + "/" + filament_name + ".bbsflmt"); + mz_bool status = initial_zip_archive(zip_archive, export_path + "/" + filament_name + ".orca_filament"); if (MZ_FALSE == status) { BOOST_LOG_TRIVIAL(info) << "Failed to initialize ZIP archive"; return ExportCase::INITIALIZE_FAIL; @@ -4070,7 +4014,7 @@ wxBoxSizer *ExportConfigsDialog::create_button_item(wxWindow* parent) return; } - wxDirDialog dlg(this, _L("Choose a directory"), from_u8(wxGetApp().app_config->get_last_dir()), wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST); + wxDirDialog dlg(this, _L("Choose a directory"), "", wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST); wxString path; if (dlg.ShowModal() == wxID_OK) path = dlg.GetPath(); ExportCase export_case = ExportCase::EXPORT_CANCEL; diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index b3e9ea27ef..b654834c6e 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1378,9 +1378,13 @@ void MachineObject::parse_status(int flag) } if (!is_support_p1s_plus) { - is_support_p1s_plus = ((flag >> 27) & 0x1) != 0; - } + auto supported_plus = ((flag >> 27) & 0x1) != 0; + auto installed_plus = ((flag >> 26) & 0x1) != 0; + if (installed_plus && supported_plus) { + is_support_p1s_plus = true; + } + } sdcard_state = MachineObject::SdcardState((flag >> 8) & 0x11); @@ -4064,12 +4068,6 @@ int MachineObject::parse_json(std::string payload) } else if (jj["command"].get() == "gcode_line") { //ack of gcode_line BOOST_LOG_TRIVIAL(debug) << "parse_json, ack of gcode_line = " << j.dump(4); - if (m_agent && is_studio_cmd(sequence_id)) { - json t; - t["dev_id"] = this->dev_id; - t["signal"] = this->wifi_signal; - m_agent->track_event("ack_cmd_gcode_line", t.dump()); - } } else if (jj["command"].get() == "project_prepare") { //ack of project file BOOST_LOG_TRIVIAL(info) << "parse_json, ack of project_prepare = " << j.dump(4); @@ -4082,13 +4080,6 @@ int MachineObject::parse_json(std::string payload) } else if (jj["command"].get() == "project_file") { //ack of project file BOOST_LOG_TRIVIAL(debug) << "parse_json, ack of project_file = " << j.dump(4); - - if (m_agent && is_studio_cmd(sequence_id)) { - json t; - t["dev_id"] = this->dev_id; - t["signal"] = this->wifi_signal; - m_agent->track_event("ack_cmd_project_file", t.dump()); - } std::string result; if (jj.contains("result")) { result = jj["result"].get(); diff --git a/src/slic3r/GUI/DragCanvas.cpp b/src/slic3r/GUI/DragCanvas.cpp index 60e1da3bcd..38a827dca8 100644 --- a/src/slic3r/GUI/DragCanvas.cpp +++ b/src/slic3r/GUI/DragCanvas.cpp @@ -46,8 +46,8 @@ void DragCanvas::set_shape_list(const std::vector& colors, const st m_dragshape_list.clear(); for (int i = 0; i < order.size(); i++) { - wxBitmap bmp = get_extruder_color_icon(colors[order[i] - 1], std::to_string(order[i]), SHAPE_SIZE, SHAPE_SIZE)->GetBitmapFor(m_parent); - DragShape* shape = new DragShape(bmp, order[i]); + wxBitmap* bmp = get_extruder_color_icon(colors[order[i] - 1], std::to_string(order[i]), SHAPE_SIZE, SHAPE_SIZE); + DragShape* shape = new DragShape(*bmp, order[i]); m_dragshape_list.push_back(shape); } diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp index 5c74a5e0ad..068a463246 100644 --- a/src/slic3r/GUI/ExtraRenderers.cpp +++ b/src/slic3r/GUI/ExtraRenderers.cpp @@ -33,15 +33,6 @@ wxIMPLEMENT_DYNAMIC_CLASS(DataViewBitmapText, wxObject) IMPLEMENT_VARIANT_OBJECT(DataViewBitmapText) -static wxSize get_size(const wxBitmap& icon) -{ -#ifdef __WIN32__ - return icon.GetSize(); -#else - return icon.GetScaledSize(); -#endif -} - // --------------------------------------------------------- // BitmapTextRenderer // --------------------------------------------------------- @@ -133,7 +124,11 @@ bool BitmapTextRenderer::Render(wxRect rect, wxDC *dc, int state) const wxBitmap& icon = m_value.GetBitmap(); if (icon.IsOk()) { - wxSize icon_sz = get_size(icon); +#ifdef __APPLE__ + wxSize icon_sz = icon.GetScaledSize(); +#else + wxSize icon_sz = icon.GetSize(); +#endif dc->DrawBitmap(icon, rect.x, rect.y + (rect.height - icon_sz.y) / 2); xoffset = icon_sz.x + 4; } @@ -275,12 +270,11 @@ bool BitmapChoiceRenderer::Render(wxRect rect, wxDC* dc, int state) const wxBitmap& icon = m_value.GetBitmap(); if (icon.IsOk()) { - wxSize icon_sz = get_size(icon); - dc->DrawBitmap(icon, rect.x, rect.y + (rect.height - icon_sz.GetHeight()) / 2); -// xoffset = icon_sz.GetWidth() + 4; + dc->DrawBitmap(icon, rect.x, rect.y + (rect.height - icon.GetHeight()) / 2); +// xoffset = icon.GetWidth() + 4; if (rect.height == 0) - rect.height = icon_sz.GetHeight(); + rect.height = icon.GetHeight(); } #ifdef _WIN32 @@ -311,7 +305,7 @@ wxWindow* BitmapChoiceRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelR if (can_create_editor_ctrl && !can_create_editor_ctrl()) return nullptr; - std::vector icons = get_extruder_color_icons(); + std::vector icons = get_extruder_color_icons(); if (icons.empty()) return nullptr; diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 13a9fa1283..65cac2cc5e 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -1132,7 +1132,7 @@ void Choice::BUILD() auto icon_name = "param_" + m_opt.enum_values[i]; if (boost::filesystem::exists(image_path / (icon_name + ".svg"))) { ScalableBitmap bm(temp, icon_name, 24); - temp->Append(_(el), bm.get_bitmap()); + temp->Append(_(el), bm.bmp()); } else { temp->Append(_(el)); } @@ -1534,7 +1534,7 @@ void Choice::msw_rescale() auto icon_name = "param_" + m_opt.enum_values[i]; if (boost::filesystem::exists(image_path / (icon_name + ".svg"))) { ScalableBitmap bm(window, icon_name, 24); - temp->SetItemBitmap(i, bm.get_bitmap()); + temp->SetItemBitmap(i, bm.bmp()); } ++i; } diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 1e607bd5f1..cd751b8c47 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -4485,11 +4485,14 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } }; - auto append_headers = [&imgui](const std::vector>& title_offsets) { + auto append_headers = [&imgui, window_padding](const std::vector>& title_offsets) { for (size_t i = 0; i < title_offsets.size(); i++) { ImGui::SameLine(title_offsets[i].second); imgui.bold_text(title_offsets[i].first); } + // Ensure right padding + ImGui::SameLine(); + ImGui::Dummy({window_padding, 1}); ImGui::Separator(); }; @@ -4507,8 +4510,12 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv offsets.push_back(max_width(title_columns[0].second, title_columns[0].first, extra_size) + 3.0f * style.ItemSpacing.x); for (size_t i = 1; i < title_columns.size() - 1; i++) offsets.push_back(offsets.back() + max_width(title_columns[i].second, title_columns[i].first) + style.ItemSpacing.x); - if (title_columns.back().first == _u8L("Display")) - offsets.back() = ImGui::GetWindowWidth() - ImGui::CalcTextSize(_u8L("Display").c_str()).x - ImGui::GetFrameHeight() / 2 - 2 * window_padding; + if (title_columns.back().first == _u8L("Display")) { + const auto preferred_offset = ImGui::GetWindowWidth() - ImGui::CalcTextSize(_u8L("Display").c_str()).x - ImGui::GetFrameHeight() / 2 - 2 * window_padding; + if (preferred_offset > offsets.back()) { + offsets.back() = preferred_offset; + } + } float average_col_width = ImGui::GetWindowWidth() / static_cast(title_columns.size()); std::vector ret; @@ -4586,8 +4593,9 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv if (it == m_print_statistics.used_filaments_per_role.end()) return std::make_pair(0.0, 0.0); - double koef = imperial_units ? 1000.0 / GizmoObjectManipulation::in_to_mm : 1.0; - return std::make_pair(it->second.first * koef, it->second.second); + double koef = imperial_units ? GizmoObjectManipulation::in_to_mm / 1000.0 : 1.0; + double unit_conver = imperial_units ? GizmoObjectManipulation::oz_to_g : 1; + return std::make_pair(it->second.first / koef, it->second.second / unit_conver); }; // get used filament (meters and grams) from used volume in respect to the active extruder @@ -4664,6 +4672,8 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv std::vector times; std::string travel_time; std::vector percents; + std::vector used_filaments_length; + std::vector used_filaments_weight; std::string travel_percent; std::vector model_used_filaments_m; std::vector model_used_filaments_g; @@ -4707,9 +4717,12 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv else percent > 0.001 ? ::sprintf(buffer, "%.1f%%", percent * 100) : ::sprintf(buffer, "<0.1%%"); percents.push_back(buffer); - //auto [model_used_filament_m, model_used_filament_g] = used_filament_per_role(role); - //model_used_filaments_m.push_back(model_used_filament_m); - //model_used_filaments_g.push_back(model_used_filament_g); + + auto [model_used_filament_m, model_used_filament_g] = used_filament_per_role(role); + ::sprintf(buffer, imperial_units ? "%.2f in" : "%.2f m", model_used_filament_m); + used_filaments_length.push_back(buffer); + ::sprintf(buffer, imperial_units ? "%.2f oz" : "%.2f g", model_used_filament_g); + used_filaments_weight.push_back(buffer); } } @@ -4724,8 +4737,8 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv travel_percent = buffer; } - offsets = calculate_offsets({ {_u8L("Line Type"), labels}, {_u8L("Time"), times}, {_u8L("Percent"), percents}, {_u8L("Display"), {""}}}, icon_size); - append_headers({{_u8L("Line Type"), offsets[0]}, {_u8L("Time"), offsets[1]}, {_u8L("Percent"), offsets[2]}, {_u8L("Display"), offsets[3]}}); + offsets = calculate_offsets({ {_u8L("Line Type"), labels}, {_u8L("Time"), times}, {_u8L("Percent"), percents}, {"", used_filaments_length}, {"", used_filaments_weight}, {_u8L("Display"), {""}}}, icon_size); + append_headers({{_u8L("Line Type"), offsets[0]}, {_u8L("Time"), offsets[1]}, {_u8L("Percent"), offsets[2]}, {_u8L("Used filament"), offsets[3]}, {_u8L("Display"), offsets[5]}}); break; } case EViewType::Height: { imgui.title(_u8L("Layer Height (mm)")); break; } @@ -4877,7 +4890,9 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv std::vector> columns_offsets; columns_offsets.push_back({ labels[i], offsets[0] }); columns_offsets.push_back({ times[i], offsets[1] }); - columns_offsets.push_back({ percents[i], offsets[2] }); + columns_offsets.push_back({percents[i], offsets[2]}); + columns_offsets.push_back({used_filaments_length[i], offsets[3]}); + columns_offsets.push_back({used_filaments_weight[i], offsets[4]}); append_item(EItemType::Rect, Extrusion_Role_Colors[static_cast(role)], columns_offsets, true, visible, [this, role, visible]() { m_extrusions.role_visibility_flags = visible ? m_extrusions.role_visibility_flags & ~(1 << role) : m_extrusions.role_visibility_flags | (1 << role); diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index c1137487e1..dba3523491 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -28,8 +28,8 @@ #define STB_DXT_IMPLEMENTATION #include "stb_dxt/stb_dxt.h" -#include -#include +#include "nanosvg/nanosvg.h" +#include "nanosvg/nanosvgrast.h" #include "libslic3r/Utils.hpp" #include "GUI_App.hpp" diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index bdfaa95170..567009fdb9 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4,6 +4,7 @@ #include "GUI_ObjectList.hpp" #include "GUI_Factories.hpp" #include "format.hpp" +#include "libslic3r_version.h" // Localization headers: include libslic3r version first so everything in this file // uses the slic3r/GUI version (the macros will take precedence over the functions). @@ -369,7 +370,7 @@ public: // See https://github.com/wxWidgets/wxWidgets/blob/master/src/msw/font.cpp // void wxNativeFontInfo::SetFractionalPointSize(float pointSizeNew) wxNativeFontInfo nfi= *font.GetNativeFontInfo(); - float pointSizeNew = wxDisplay(this).GetScaleFactor() * scale * font.GetPointSize(); + float pointSizeNew = scale * font.GetPointSize(); nfi.lf.lfHeight = nfi.GetLogFontHeightAtPPI(pointSizeNew, get_dpi_for_window(this)); nfi.pointSize = pointSizeNew; font = wxFont(nfi); @@ -2107,6 +2108,9 @@ void GUI_App::init_app_config() if (!boost::filesystem::exists(data_dir_path)){ boost::filesystem::create_directory(data_dir_path); } + + // Change current dirtory of application + chdir(encode_path((Slic3r::data_dir() + "/log").c_str()).c_str()); } else { m_datadir_redefined = true; } @@ -4290,7 +4294,8 @@ Semver get_version(const std::string& str, const std::regex& regexp) { void GUI_App::check_new_version_sf(bool show_tips, int by_user) { AppConfig* app_config = wxGetApp().app_config; - auto version_check_url = app_config->version_check_url(); + bool check_stable_only = app_config->get_bool("check_stable_update_only"); + auto version_check_url = app_config->version_check_url(check_stable_only); Http::get(version_check_url) .on_error([&](std::string body, std::string error, unsigned http_status) { (void)body; @@ -4298,25 +4303,22 @@ void GUI_App::check_new_version_sf(bool show_tips, int by_user) error); }) .timeout_connect(1) - .on_complete([this,by_user](std::string body, unsigned http_status) { + .on_complete([this,by_user, check_stable_only](std::string body, unsigned http_status) { // Http response OK if (http_status != 200) return; try { boost::trim(body); - // SoftFever: parse github release, ported from SS - + // Orca: parse github release, inspired by SS boost::property_tree::ptree root; - std::stringstream json_stream(body); boost::property_tree::read_json(json_stream, root); - bool i_am_pre = false; // at least two number, use '.' as separator. can be followed by -Az23 for prereleased and +Az42 for // metadata std::regex matcher("[0-9]+\\.[0-9]+(\\.[0-9]+)*(-[A-Za-z0-9]+)?(\\+[A-Za-z0-9]+)?"); - Semver current_version = get_version(SoftFever_VERSION, matcher); + Semver current_version = get_version(SoftFever_VERSION, matcher); Semver best_pre(1, 0, 0); Semver best_release(1, 0, 0); std::string best_pre_url; @@ -4324,56 +4326,73 @@ void GUI_App::check_new_version_sf(bool show_tips, int by_user) std::string best_release_content; std::string best_pre_content; const std::regex reg_num("([0-9]+)"); - std::string tag = root.get("tag_name"); - if (tag[0] == 'v') - tag.erase(0, 1); - for (std::regex_iterator it = std::sregex_iterator(tag.begin(), tag.end(), reg_num); - it != std::sregex_iterator(); ++it) { - } - Semver tag_version = get_version(tag, matcher); - if (current_version == tag_version) - i_am_pre = root.get("prerelease"); - if (root.get("prerelease")) { - if (best_pre < tag_version) { - best_pre = tag_version; - best_pre_url = root.get("html_url"); - best_pre_content = root.get("body"); - best_pre.set_prerelease("Preview"); - } + if (check_stable_only) { + std::string tag = root.get("tag_name"); + if (tag[0] == 'v') + tag.erase(0, 1); + for (std::regex_iterator it = std::sregex_iterator(tag.begin(), tag.end(), reg_num); it != std::sregex_iterator(); ++it) {} + Semver tag_version = get_version(tag, matcher); + if (root.get("prerelease")) { + if (best_pre < tag_version) { + best_pre = tag_version; + best_pre_url = root.get("html_url"); + best_pre_content = root.get("body"); + best_pre.set_prerelease("Preview"); + } + } else { + if (best_release < tag_version) { + best_release = tag_version; + best_release_url = root.get("html_url"); + best_release_content = root.get("body"); + } + } } else { - if (best_release < tag_version) { - best_release = tag_version; - best_release_url = root.get("html_url"); - best_release_content = root.get("body"); - } + for (auto json_version : root) { + std::string tag = json_version.second.get("tag_name"); + if (tag[0] == 'v') + tag.erase(0, 1); + for (std::regex_iterator it = std::sregex_iterator(tag.begin(), tag.end(), reg_num); it != std::sregex_iterator(); + ++it) {} + Semver tag_version = get_version(tag, matcher); + if (json_version.second.get("prerelease")) { + if (best_pre < tag_version) { + best_pre = tag_version; + best_pre_url = json_version.second.get("html_url"); + best_pre_content = json_version.second.get("body"); + best_pre.set_prerelease("Preview"); + } + } else { + if (best_release < tag_version) { + best_release = tag_version; + best_release_url = json_version.second.get("html_url"); + best_release_content = json_version.second.get("body"); + } + } + } } // if release is more recent than beta, use release anyway if (best_pre < best_release) { - best_pre = best_release; - best_pre_url = best_release_url; - best_pre_content = best_release_content; + best_pre = best_release; + best_pre_url = best_release_url; + best_pre_content = best_release_content; } // if we're the most recent, don't do anything - if ((i_am_pre ? best_pre : best_release) <= current_version) { - if (by_user != 0) - this->no_new_version(); - return; + if ((check_stable_only ? best_release : best_pre) <= current_version) { + if (by_user != 0) + this->no_new_version(); + return; } - // BOOST_LOG_TRIVIAL(info) << format("Got %1% online version: `%2%`. Sending to GUI thread...", - // SLIC3R_APP_NAME, i_am_pre ? best_pre.to_string(): best_release.to_string()); - - version_info.url = i_am_pre ? best_pre_url : best_release_url; - version_info.version_str = i_am_pre ? best_pre.to_string() : best_release.to_string_sf(); - version_info.description = i_am_pre ? best_pre_content : best_release_content; + version_info.url = check_stable_only ? best_release_url : best_pre_url; + version_info.version_str = check_stable_only ? best_release.to_string_sf() : best_pre.to_string(); + version_info.description = check_stable_only ? best_release_content : best_pre_content; version_info.force_upgrade = false; - wxCommandEvent *evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE); - evt->SetString((i_am_pre ? best_pre : best_release).to_string()); + wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE); + evt->SetString((check_stable_only ? best_release : best_pre).to_string()); GUI::wxGetApp().QueueEvent(evt); - } catch (...) { - } + } catch (...) {} }) .perform(); } @@ -4591,8 +4610,7 @@ void GUI_App::sync_preset(Preset* preset) if (http_code >= 400) { result = 0; updated_info = "hold"; - } - else + } else result = -1; } } @@ -4614,8 +4632,7 @@ void GUI_App::sync_preset(Preset* preset) auto update_time_str = values_map[BBL_JSON_KEY_UPDATE_TIME]; if (!update_time_str.empty()) update_time = std::atoll(update_time_str.c_str()); - } - else { + } else { BOOST_LOG_TRIVIAL(trace) << "[sync_preset]create: request_setting_id failed, http code "<= 400 if (http_code >= 400) { @@ -4625,12 +4642,10 @@ void GUI_App::sync_preset(Preset* preset) else result = -1; } - } - else { + } else { BOOST_LOG_TRIVIAL(trace) << "[sync_preset]create: can not generate differed preset"; } - } - else if (preset->sync_info.compare("update") == 0) { + } else if (preset->sync_info.compare("update") == 0) { if (!setting_id.empty()) { int ret = preset_bundle->get_differed_values_to_update(*preset, values_map); if (!ret) { @@ -4724,7 +4739,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg) cancelFn = [this, dlg]() { return m_is_closing || dlg->WasCanceled(); }; - finishFn = [this, userid = m_agent->get_user_id(), dlg, t = std::weak_ptr(m_user_sync_token)](bool ok) { + finishFn = [this, userid = m_agent->get_user_id(), dlg, t = std::weak_ptr(m_user_sync_token)](bool ok) { CallAfter([=]{ dlg->Destroy(); if (ok && m_agent && t.lock() == m_user_sync_token && userid == m_agent->get_user_id()) reload_settings(); @@ -4732,7 +4747,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg) }; } else { - finishFn = [this, userid = m_agent->get_user_id(), t = std::weak_ptr(m_user_sync_token)](bool ok) { + finishFn = [this, userid = m_agent->get_user_id(), t = std::weak_ptr(m_user_sync_token)](bool ok) { CallAfter([=] { if (ok && m_agent && t.lock() == m_user_sync_token && userid == m_agent->get_user_id()) reload_settings(); }); @@ -4740,7 +4755,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg) } m_sync_update_thread = Slic3r::create_thread( - [this, progressFn, cancelFn, finishFn, t = std::weak_ptr(m_user_sync_token)] { + [this, progressFn, cancelFn, finishFn, t = std::weak_ptr(m_user_sync_token)] { // get setting list, update setting list std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::BBL_BUNDLE).to_string(); int ret = m_agent->get_setting_list2(version, [this](auto info) { @@ -5028,7 +5043,7 @@ bool GUI_App::select_language() // 3) new_language_info->CanonicalName is a safe bet. It points to a valid dictionary name. app_config->set("language", new_language_info->CanonicalName.ToUTF8().data()); return true; - } + } } return false; @@ -5936,18 +5951,15 @@ void GUI_App::MacOpenFiles(const wxArrayString &fileNames) input_files.push_back(non_gcode_files[i]); } this->plater()->load_files(input_files); - } - else { + } else { for (size_t i = 0; i < files.size(); ++i) { this->init_params->input_files.emplace_back(files[i]); } } - } - else { + } else { if (m_post_initialized) { this->plater()->load_gcode(gcode_files.front()); - } - else { + } else { this->init_params->input_gcode = true; this->init_params->input_files = { into_u8(gcode_files.front()) }; } @@ -6296,8 +6308,7 @@ void GUI_App::gcode_thumbnails_debug() width = 0; height = 0; rows.clear(); - } - else if (reading_image) + } else if (reading_image) row += gcode_line.substr(2); } } diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 4de5874175..9ea5aa5c2b 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -267,13 +267,14 @@ std::map SettingsFactory::CATEGORY_ICON = // BBS: remove SLA categories }; -wxBitmapBundle* SettingsFactory::get_category_bitmap(const std::string& category_name) +wxBitmap SettingsFactory::get_category_bitmap(const std::string& category_name, bool menu_bmp) { if (CATEGORY_ICON.find(category_name) == CATEGORY_ICON.end()) - return get_bmp_bundle("empty"); - return get_bmp_bundle(CATEGORY_ICON.at(category_name)); + return wxNullBitmap; + return create_scaled_bitmap(CATEGORY_ICON.at(category_name)); } + //------------------------------------- // MenuFactory //------------------------------------- @@ -434,30 +435,31 @@ static void create_freq_settings_popupmenu(wxMenu* menu, const bool is_object_se } } -std::vector MenuFactory::get_volume_bitmaps() +std::vector MenuFactory::get_volume_bitmaps() { - std::vector volume_bmps; + std::vector volume_bmps; volume_bmps.reserve(ADD_VOLUME_MENU_ITEMS.size()); - for (const auto& item : ADD_VOLUME_MENU_ITEMS) - volume_bmps.push_back(get_bmp_bundle(item.second)); + for (const auto& item : ADD_VOLUME_MENU_ITEMS) { + volume_bmps.push_back(create_scaled_bitmap(item.second)); + } return volume_bmps; } -std::vector MenuFactory::get_text_volume_bitmaps() +std::vector MenuFactory::get_text_volume_bitmaps() { - std::vector volume_bmps; + std::vector volume_bmps; volume_bmps.reserve(TEXT_VOLUME_ICONS.size()); for (const auto& item : TEXT_VOLUME_ICONS) - volume_bmps.push_back(get_bmp_bundle(item.second)); + volume_bmps.push_back(create_scaled_bitmap(item.second)); return volume_bmps; } -std::vector MenuFactory::get_svg_volume_bitmaps() +std::vector MenuFactory::get_svg_volume_bitmaps() { - std::vector volume_bmps; + std::vector volume_bmps; volume_bmps.reserve(SVG_VOLUME_ICONS.size()); for (const auto &item : SVG_VOLUME_ICONS) - volume_bmps.push_back(get_bmp_bundle(item.second)); + volume_bmps.push_back(create_scaled_bitmap(item.second)); return volume_bmps; } @@ -496,8 +498,27 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty sub_menu->AppendSeparator(); } + for (auto &item : {L("Cube"), L("Cylinder"), L("Sphere"), L("Cone"), L("Disc"), L("Torus")}) { + append_menu_item( + sub_menu, wxID_ANY, _(item), "", + [type, item](wxCommandEvent &) { + obj_list()->load_generic_subobject(item, type); + }, + "", menu); + } + + append_menu_item_add_text(sub_menu, type); + append_menu_item_add_svg(sub_menu, type); + + return sub_menu; +} + +// Orca: add submenu for adding handy models +wxMenu* MenuFactory::append_submenu_add_handy_model(wxMenu* menu, ModelVolumeType type) { + auto sub_menu = new wxMenu; + for (auto &item : {L("Orca Cube"), L("3DBenchy"), L("Autodesk FDM Test"), - L("Voron Cube")}) { + L("Voron Cube"), L("Stanford Bunny")}) { append_menu_item( sub_menu, wxID_ANY, _(item), "", [type, item](wxCommandEvent &) { @@ -511,6 +532,8 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty file_name = "ksr_fdmtest_v4.stl"; else if (file_name == L("Voron Cube")) file_name = "Voron_Design_Cube_v7.stl"; + else if (file_name == L("Stanford Bunny")) + file_name = "Stanford_Bunny.stl"; else return; input_files.push_back( @@ -521,22 +544,9 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty "", menu); } - append_menu_item_add_text(sub_menu, type); - append_menu_item_add_svg(sub_menu, type); - - sub_menu->AppendSeparator(); - for (auto &item : {L("Cube"), L("Cylinder"), L("Sphere"), L("Cone")}) { - append_menu_item( - sub_menu, wxID_ANY, _(item), "", - [type, item](wxCommandEvent &) { - obj_list()->load_generic_subobject(item, type); - }, - "", menu); - } return sub_menu; } - static void append_menu_itemm_add_(const wxString& name, GLGizmosManager::EType gizmo_type, wxMenu *menu, ModelVolumeType type, bool is_submenu_item) { auto add_ = [type, gizmo_type](const wxCommandEvent & /*unnamed*/) { const GLCanvas3D *canvas = plater()->canvas3D(); @@ -690,7 +700,7 @@ wxMenuItem* MenuFactory::append_menu_item_settings(wxMenu* menu_) // Add full settings list auto menu_item = new wxMenuItem(menu, wxID_ANY, menu_name); - menu_item->SetBitmap(*get_bmp_bundle("cog")); + menu_item->SetBitmap(create_scaled_bitmap("cog")); menu_item->SetSubMenu(create_settings_popupmenu(menu, is_object_settings, item)); return menu->Append(menu_item); @@ -839,7 +849,7 @@ void MenuFactory::append_menu_item_change_extruder(wxMenu* menu) if (sels.IsEmpty()) return; - std::vector icons = get_extruder_color_icons(true); + std::vector icons = get_extruder_color_icons(true); wxMenu* extruder_selection_menu = new wxMenu(); const wxString& name = sels.Count() == 1 ? names[0] : names[1]; @@ -860,7 +870,7 @@ void MenuFactory::append_menu_item_change_extruder(wxMenu* menu) if (icon_idx >= 0 && icon_idx < icons.size()) { append_menu_item( - extruder_selection_menu, wxID_ANY, item_name, "", [i](wxCommandEvent &) { obj_list()->set_extruder_for_selected_items(i); }, icons[icon_idx], menu, + extruder_selection_menu, wxID_ANY, item_name, "", [i](wxCommandEvent &) { obj_list()->set_extruder_for_selected_items(i); }, *icons[icon_idx], menu, [is_active_extruder]() { return !is_active_extruder; }, m_parent); } else { append_menu_item( @@ -1163,12 +1173,17 @@ MenuFactory::MenuFactory() void MenuFactory::create_default_menu() { - wxMenu* sub_menu = append_submenu_add_generic(&m_default_menu, ModelVolumeType::INVALID); + wxMenu* sub_menu_primitives = append_submenu_add_generic(&m_default_menu, ModelVolumeType::INVALID); + wxMenu* sub_menu_handy = append_submenu_add_handy_model(&m_default_menu, ModelVolumeType::INVALID); #ifdef __WINDOWS__ - append_submenu(&m_default_menu, sub_menu, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", + append_submenu(&m_default_menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", + []() {return true; }, m_parent); + append_submenu(&m_default_menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "menu_add_part", []() {return true; }, m_parent); #else - append_submenu(&m_default_menu, sub_menu, wxID_ANY, _L("Add Primitive"), "", "", + append_submenu(&m_default_menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "", + []() {return true; }, m_parent); + append_submenu(&m_default_menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "", []() {return true; }, m_parent); #endif @@ -1452,13 +1467,18 @@ void MenuFactory::create_plate_menu() // add shapes menu->AppendSeparator(); - wxMenu* sub_menu = append_submenu_add_generic(menu, ModelVolumeType::INVALID); + wxMenu* sub_menu_primitives = append_submenu_add_generic(menu, ModelVolumeType::INVALID); + wxMenu* sub_menu_handy = append_submenu_add_handy_model(menu, ModelVolumeType::INVALID); #ifdef __WINDOWS__ - append_submenu(menu, sub_menu, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", + append_submenu(menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", + []() {return true; }, m_parent); + append_submenu(menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "menu_add_part", []() {return true; }, m_parent); #else - append_submenu(menu, sub_menu, wxID_ANY, _L("Add Primitive"), "", "", + append_submenu(menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "", + []() {return true; }, m_parent); + append_submenu(menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "", []() {return true; }, m_parent); #endif @@ -1788,7 +1808,7 @@ void MenuFactory::append_menu_item_change_filament(wxMenu* menu) return; } - std::vector icons = get_extruder_color_icons(true); + std::vector icons = get_extruder_color_icons(true); if (icons.size() < filaments_cnt) { BOOST_LOG_TRIVIAL(warning) << boost::format("Warning: icons size %1%, filaments_cnt=%2%")%icons.size()%filaments_cnt; if (icons.size() <= 1) @@ -1828,9 +1848,8 @@ void MenuFactory::append_menu_item_change_filament(wxMenu* menu) const wxString& item_name = (i == 0 ? _L("Default") : wxString::Format(_L("Filament %d"), i)) + (is_active_extruder ? " (" + _L("current") + ")" : ""); - //OcraftyoneTODO: determine if nullptr in place of icon causes issues append_menu_item(extruder_selection_menu, wxID_ANY, item_name, "", - [i](wxCommandEvent&) { obj_list()->set_extruder_for_selected_items(i); }, i == 0 ? nullptr : icons[i - 1], menu, + [i](wxCommandEvent&) { obj_list()->set_extruder_for_selected_items(i); }, i == 0 ? wxNullBitmap : *icons[i - 1], menu, [is_active_extruder]() { return !is_active_extruder; }, m_parent); } menu->Append(wxID_ANY, name, extruder_selection_menu, _L("Change Filament")); @@ -1940,7 +1959,7 @@ void MenuFactory::update_object_menu() void MenuFactory::update_default_menu() { - for (auto& name : { _L("Add Primitive") , _L("Show Labels") }) { + for (auto& name : { _L("Add Primitive") , _L("Add Handy models"), _L("Show Labels") }) { const auto menu_item_id = m_default_menu.FindItem(name); if (menu_item_id != wxNOT_FOUND) m_default_menu.Destroy(menu_item_id); @@ -1948,6 +1967,12 @@ void MenuFactory::update_default_menu() create_default_menu(); } +void MenuFactory::msw_rescale() +{ + for (MenuWithSeparators* menu : { &m_object_menu, &m_sla_object_menu, &m_part_menu, &m_default_menu }) + msw_rescale_menu(dynamic_cast(menu)); +} + #ifdef _WIN32 // For this class is used code from stackoverflow: // https://stackoverflow.com/questions/257288/is-it-possible-to-write-a-template-to-check-for-a-functions-existence @@ -1977,7 +2002,7 @@ static void update_menu_item_def_colors(T* item) void MenuFactory::sys_color_changed() { for (MenuWithSeparators* menu : { &m_object_menu, &m_sla_object_menu, &m_part_menu, &m_default_menu }) { - sys_color_changed_menu(dynamic_cast(menu));// msw_rescale_menu updates just icons, so use it + msw_rescale_menu(dynamic_cast(menu));// msw_rescale_menu updates just icons, so use it #ifdef _WIN32 // but under MSW we have to update item's bachground color for (wxMenuItem* item : menu->GetMenuItems()) @@ -1992,17 +2017,14 @@ void MenuFactory::sys_color_changed(wxMenuBar* menubar) #if 0 for (size_t id = 0; id < menubar->GetMenuCount(); id++) { wxMenu* menu = menubar->GetMenu(id); - sys_color_changed_menu(menu); -#ifndef __linux__ - menu->SetupBitmaps(); + msw_rescale_menu(menu); #ifdef _WIN32 // but under MSW we have to update item's bachground color for (wxMenuItem* item : menu->GetMenuItems()) update_menu_item_def_colors(item); #endif } -// menubar->Refresh(); -#endif + menubar->Refresh(); #endif } diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index 70cb225af3..16e25533fa 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -40,7 +40,7 @@ struct SettingsFactory static std::map> OBJECT_CATEGORY_SETTINGS; static std::map> PART_CATEGORY_SETTINGS; - static wxBitmapBundle* get_category_bitmap(const std::string& category_name); + static wxBitmap get_category_bitmap(const std::string& category_name, bool menu_bmp = true); static Bundle get_bundle(const DynamicPrintConfig* config, bool is_object_settings, bool is_layer_settings = false); static std::vector get_options(bool is_part); //BBS: add api to get options for catogary @@ -51,9 +51,9 @@ struct SettingsFactory class MenuFactory { public: - static std::vector get_volume_bitmaps(); - static std::vector get_text_volume_bitmaps(); - static std::vector get_svg_volume_bitmaps(); + static std::vector get_volume_bitmaps(); + static std::vector get_text_volume_bitmaps(); + static std::vector get_svg_volume_bitmaps(); MenuFactory(); ~MenuFactory() = default; @@ -62,6 +62,7 @@ public: void update(); void update_object_menu(); void update_default_menu(); + void msw_rescale(); void sys_color_changed(); static void sys_color_changed(wxMenuBar* menu_bar); @@ -124,6 +125,8 @@ private: void create_bbl_assemble_part_menu(); wxMenu* append_submenu_add_generic(wxMenu* menu, ModelVolumeType type); + // Orca: add submenu for adding handy models + wxMenu* append_submenu_add_handy_model(wxMenu* menu, ModelVolumeType type); void append_menu_item_add_text(wxMenu* menu, ModelVolumeType type, bool is_submenu_item = true); void append_menu_item_add_svg(wxMenu *menu, ModelVolumeType type, bool is_submenu_item = true); void append_menu_items_add_volume(wxMenu* menu); diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index cd1ff8ca28..76dd268633 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -248,14 +248,47 @@ void ObjectLayers::UpdateAndShow(const bool show) void ObjectLayers::msw_rescale() { - //Orca: deleted what PS commented out + m_bmp_delete.msw_rescale(); + m_bmp_add.msw_rescale(); + + m_grid_sizer->SetHGap(wxGetApp().em_unit()); + + // rescale edit-boxes + const int cells_cnt = m_grid_sizer->GetCols() * m_grid_sizer->GetEffectiveRowsCount(); + for (int i = 0; i < cells_cnt; ++i) { + const wxSizerItem* item = m_grid_sizer->GetItem(i); + if (item->IsWindow()) { + LayerRangeEditor* editor = dynamic_cast(item->GetWindow()); + if (editor != nullptr) + editor->msw_rescale(); + } + else if (item->IsSizer()) // case when we have editor with buttons + { + wxSizerItem* e_item = item->GetSizer()->GetItem(size_t(0)); // editor + if (e_item->IsWindow()) { + LayerRangeEditor* editor = dynamic_cast(e_item->GetWindow()); + if (editor != nullptr) + editor->msw_rescale(); + } + + if (item->GetSizer()->GetItemCount() > 2) // if there are Add/Del buttons + for (size_t btn : {2, 3}) { // del_btn, add_btn + wxSizerItem* b_item = item->GetSizer()->GetItem(btn); + if (b_item->IsWindow()) { + auto button = dynamic_cast(b_item->GetWindow()); + if (button != nullptr) + button->msw_rescale(); + } + } + } + } m_grid_sizer->Layout(); } void ObjectLayers::sys_color_changed() { - m_bmp_delete.sys_color_changed(); - m_bmp_add.sys_color_changed(); + m_bmp_delete.msw_rescale(); + m_bmp_add.msw_rescale(); // rescale edit-boxes const int cells_cnt = m_grid_sizer->GetCols() * m_grid_sizer->GetEffectiveRowsCount(); @@ -267,7 +300,7 @@ void ObjectLayers::sys_color_changed() if (b_item && b_item->IsWindow()) { auto button = dynamic_cast(b_item->GetWindow()); if (button != nullptr) - button->sys_color_changed(); + button->msw_rescale(); } } } diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 697fba968e..1ec93489e9 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1368,11 +1368,12 @@ void ObjectList::extruder_editing() if (!item || !(m_objects_model->GetItemType(item) & (itVolume | itObject))) return; - wxRect rect = this->GetItemRect(item, GetColumn(colFilament)); - wxPoint pos = rect.GetPosition(); - pos.y -= 4; - wxSize size = rect.GetSize(); - size.SetWidth(size.GetWidth() + 8); + const int column_width = GetColumn(colFilament)->GetWidth() + wxSystemSettings::GetMetric(wxSYS_VSCROLL_X) + 5; + + wxPoint pos = this->get_mouse_position_in_control(); + wxSize size = wxSize(column_width, -1); + pos.x = GetColumn(colName)->GetWidth() + GetColumn(colPrint)->GetWidth() + 5; + pos.y -= GetTextExtent("m").y; apply_extruder_selector(&m_extruder_editor, this, "1", pos, size); @@ -2084,23 +2085,27 @@ static TriangleMesh create_mesh(const std::string& type_name, const BoundingBoxf { const double side = wxGetApp().plater()->canvas3D()->get_size_proportional_to_max_bed_size(0.1); - indexed_triangle_set mesh; + TriangleMesh mesh; if (type_name == "Cube") // Sitting on the print bed, left front front corner at (0, 0). - mesh = its_make_cube(side, side, side); + mesh = TriangleMesh(its_make_cube(side, side, side)); else if (type_name == "Cylinder") // Centered around 0, sitting on the print bed. // The cylinder has the same volume as the box above. - mesh = its_make_cylinder(0.5 * side, side); + mesh = TriangleMesh(its_make_cylinder(0.5 * side, side)); else if (type_name == "Sphere") // Centered around 0, half the sphere below the print bed, half above. // The sphere has the same volume as the box above. - mesh = its_make_sphere(0.5 * side, PI / 18); + mesh = TriangleMesh(its_make_sphere(0.5 * side, PI / 18)); else if (type_name == "Slab") // Sitting on the print bed, left front front corner at (0, 0). - mesh = its_make_cube(bb.size().x() * 1.5, bb.size().y() * 1.5, bb.size().z() * 0.5); + mesh = TriangleMesh(its_make_cube(bb.size().x() * 1.5, bb.size().y() * 1.5, bb.size().z() * 0.5)); else if (type_name == "Cone") - mesh = its_make_cone(0.5 * side, side); + mesh = TriangleMesh(its_make_cone(0.5 * side, side)); + else if (type_name == "Disc") + mesh.ReadSTLFile((Slic3r::resources_dir() + "/handy_models/helper_disk.stl").c_str(), true, nullptr); + else if (type_name == "Torus") + mesh.ReadSTLFile((Slic3r::resources_dir() + "/handy_models/torus.stl").c_str(), true, nullptr); return TriangleMesh(mesh); } @@ -3156,21 +3161,6 @@ bool ObjectList::can_merge_to_single_object() const return (*m_objects)[obj_idx]->volumes.size() > 1; } -wxPoint ObjectList::get_mouse_position_in_control() const -{ - wxPoint pt = wxGetMousePosition() - this->GetScreenPosition(); - -#ifdef __APPLE__ - // Workaround for OSX. From wxWidgets 3.1.6 Hittest doesn't respect to the header of wxDataViewCtrl - if (wxDataViewItem top_item = this->GetTopItem(); top_item.IsOk()) { - auto rect = this->GetItemRect(top_item, this->GetColumn(0)); - pt.y -= rect.y; - } -#endif // __APPLE__ - - return pt; -} - bool ObjectList::can_mesh_boolean() const { int obj_idx = get_selected_obj_idx(); @@ -5482,17 +5472,17 @@ void ObjectList::msw_rescale() GetColumn(colSinking)->SetWidth(3 * em); GetColumn(colEditing )->SetWidth( 3 * em); + // rescale/update existing items with bitmaps + m_objects_model->Rescale(); + Layout(); } void ObjectList::sys_color_changed() { wxGetApp().UpdateDVCDarkUI(this, true); - - // rescale/update existing items with bitmaps - m_objects_model->UpdateBitmaps(); - - Layout(); + + msw_rescale(); if (m_objects_model) { m_objects_model->sys_color_changed(); } } @@ -5529,12 +5519,6 @@ void GUI::ObjectList::OnStartEditing(wxDataViewEvent &event) // Here the last active column is forgotten, so when leaving the editing mode, the next mouse click will not enter the editing mode of the newly selected column. void ObjectList::OnEditingStarted(wxDataViewEvent &event) { - // Orca: Automatically show drop down on editing start and finish editing when the combobox is closed - if (event.GetColumn() == colFilament) { - ::ComboBox*c = static_cast<::ComboBox *>(event.GetDataViewColumn()->GetRenderer()->GetEditorCtrl()); - c->ToggleDropDown(); - c->Bind(wxEVT_COMBOBOX_CLOSEUP, [event](wxCommandEvent& evt){ event.GetDataViewColumn()->GetRenderer()->FinishEditing(); }); - } #ifdef __WXMSW__ m_last_selected_column = -1; #else diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 1c96e3e5a3..ef503251f6 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -319,7 +319,7 @@ public: void delete_all_connectors_for_selection(); void delete_all_connectors_for_object(int obj_idx); - wxPoint get_mouse_position_in_control() const; + wxPoint get_mouse_position_in_control() const { return wxGetMousePosition() - this->GetScreenPosition(); } int get_selected_obj_idx() const; ModelConfig& get_item_config(const wxDataViewItem& item) const; diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index b0b59a1ac2..ff9521b584 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -112,7 +112,7 @@ bool ObjectSettings::update_settings_list() btn->SetToolTip(_(L("Remove parameter"))); btn->SetBitmapFocus(m_bmp_delete_focus.bmp()); - btn->SetBitmapCurrent(m_bmp_delete_focus.bmp()); + btn->SetBitmapHover(m_bmp_delete_focus.bmp()); btn->Bind(wxEVT_BUTTON, [opt_key, config, this](wxEvent &event) { wxGetApp().plater()->take_snapshot(from_u8((boost::format("Delete Option %s") % opt_key).str()).ToStdString()); @@ -146,7 +146,7 @@ bool ObjectSettings::update_settings_list() return; ctrl->SetBitmap_(m_bmp_delete); ctrl->SetBitmapFocus(m_bmp_delete_focus.bmp()); - ctrl->SetBitmapCurrent(m_bmp_delete_focus.bmp()); + ctrl->SetBitmapHover(m_bmp_delete_focus.bmp()); }; const bool is_extruders_cat = cat.first == "Extruders"; @@ -415,13 +415,21 @@ void ObjectSettings::UpdateAndShow(const bool show) #endif } +void ObjectSettings::msw_rescale() +{ +#if !NEW_OBJECT_SETTING + m_bmp_delete.msw_rescale(); + m_bmp_delete_focus.msw_rescale(); + + for (auto group : m_og_settings) + group->msw_rescale(); +#endif +} + void ObjectSettings::sys_color_changed() { #if !NEW_OBJECT_SETTING - m_og->sys_color_changed(); // not in old msw_rescale. is it needed? - // moved from old msw_rescale - m_bmp_delete.sys_color_changed(); - m_bmp_delete_focus.sys_color_changed(); + m_og->sys_color_changed(); for (auto group : m_og_settings) group->sys_color_changed(); diff --git a/src/slic3r/GUI/GUI_ObjectSettings.hpp b/src/slic3r/GUI/GUI_ObjectSettings.hpp index 0e50901b2d..8903f8748b 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.hpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.hpp @@ -68,6 +68,7 @@ public: bool add_missed_options(ModelConfig *config_to, const DynamicPrintConfig &config_from); void update_config_values(ModelConfig *config); void UpdateAndShow(const bool show); + void msw_rescale(); void sys_color_changed(); }; diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index c23c871395..eda7c15b71 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -77,7 +77,7 @@ void GridCellIconRenderer::Draw(wxGrid& grid, table->m_icon_row_height = grid.GetRowSize(row); table->m_icon_col_width = grid.GetColSize(col); //} - wxBitmap bitmap = table->get_undo_bitmap().GetBitmapFor(dc.GetWindow()); + wxBitmap& bitmap = table->get_undo_bitmap(); int bitmap_width = bitmap.GetWidth(); int bitmap_height = bitmap.GetHeight(); int offset_x = (table->m_icon_col_width - bitmap_width)/2; @@ -125,7 +125,7 @@ GridCellIconRenderer *GridCellIconRenderer::Clone() const GridCellFilamentsEditor::GridCellFilamentsEditor(const wxArrayString& choices, bool allowOthers, - std::vector* bitmaps) + std::vector* bitmaps) : wxGridCellChoiceEditor(choices, allowOthers), m_icons(bitmaps) { } @@ -133,7 +133,7 @@ GridCellFilamentsEditor::GridCellFilamentsEditor(const wxArrayString& choices, GridCellFilamentsEditor::GridCellFilamentsEditor(size_t count, const wxString choices[], bool allowOthers, - std::vector* bitmaps) + std::vector* bitmaps) : wxGridCellChoiceEditor(count, choices, allowOthers), m_icons(bitmaps) { } @@ -159,14 +159,13 @@ void GridCellFilamentsEditor::Create(wxWindow* parent, if ( !m_allowOthers ) style |= wxCB_READONLY; ::ComboBox *bitmap_combo = new ComboBox(parent, id, wxEmptyString, - wxDefaultPosition, wxSize(get_preferred_size(*((*m_icons)[0]), wxGetApp().mainframe).GetWidth() + 10, -1), - 0, nullptr, CB_NO_DROP_ICON | CB_NO_TEXT | wxCB_READONLY); //Unsure + wxDefaultPosition, wxSize(((*m_icons)[0])->GetWidth() + 10, -1), 0, nullptr, CB_NO_DROP_ICON | CB_NO_TEXT | wxCB_READONLY); if (m_icons) { int array_count = m_choices.GetCount(); int icon_count = m_icons->size(); for (int i = 0; i < array_count; i++) { - wxBitmapBundle* bitmap = (i < icon_count) ? (*m_icons)[i] : (*m_icons)[0]; + wxBitmap* bitmap = (i < icon_count) ? (*m_icons)[i] : (*m_icons)[0]; bitmap_combo->Append(m_choices[i], *bitmap); } } @@ -240,9 +239,6 @@ void GridCellFilamentsEditor::BeginEdit(int row, int col, wxGrid* grid) Combo()->SetFocus(); - // Orca: Show dropdown on editing start - Combo()->ToggleDropDown(); - #ifdef __WXOSX_COCOA__ // This is a work around for the combobox being simply dismissed when a // choice is made in it under OS X. The bug is almost certainly due to a @@ -339,9 +335,9 @@ void GridCellFilamentsRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &d ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); ConfigOptionInt & cur_option = dynamic_cast((*grid_row)[(ObjectGridTable::GridColType) col]); - wxBitmapBundle *bitmap = table->get_color_bitmap((cur_option.value >= 1) ? cur_option.value - 1 : cur_option.value); - int bitmap_width = bitmap->GetBitmapFor(dc.GetWindow()).GetWidth(); - int bitmap_height = bitmap->GetBitmapFor(dc.GetWindow()).GetHeight(); + wxBitmap *bitmap = table->get_color_bitmap((cur_option.value >= 1) ? cur_option.value - 1 : cur_option.value); + int bitmap_width = bitmap->GetWidth(); + int bitmap_height = bitmap->GetHeight(); int offset_x = grid_cell_border_width; int offset_y = (rect.height > bitmap_height) ? (rect.height - bitmap_height) / 2 : grid_cell_border_height; @@ -349,7 +345,7 @@ void GridCellFilamentsRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &d dc.SetBrush(wxBrush(attr.GetBackgroundColour())); dc.DrawRectangle(rect); if ( grid_row->model_volume_type != ModelVolumeType::NEGATIVE_VOLUME) { - dc.DrawBitmap(bitmap->GetBitmapFor(dc.GetWindow()), wxPoint(rect.x + offset_x, rect.y + offset_y));//TODO: determine if this way of getting bitmap works well + dc.DrawBitmap(*bitmap, wxPoint(rect.x + offset_x, rect.y + offset_y)); } text_rect.x += bitmap_width + grid_cell_border_width * 2; @@ -435,9 +431,6 @@ void GridCellChoiceEditor::BeginEdit(int row, int col, wxGrid *grid) Combo()->SetFocus(); - // Orca: Show dropdown on editing start - Combo()->ToggleDropDown(); - #ifdef __WXOSX_COCOA__ // This is a work around for the combobox being simply dismissed when a // choice is made in it under OS X. The bug is almost certainly due to a @@ -525,16 +518,16 @@ void GridCellComboBoxRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &dc ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); ConfigOptionInt & cur_option = dynamic_cast((*grid_row)[(ObjectGridTable::GridColType) col]); - wxBitmapBundle *bitmap = table->get_color_bitmap((cur_option.value >= 1) ? cur_option.value - 1 : cur_option.value); - int bitmap_width = bitmap->GetBitmapFor(dc.GetWindow()).GetWidth(); - int bitmap_height = bitmap->GetBitmapFor(dc.GetWindow()).GetHeight(); + wxBitmap *bitmap = table->get_color_bitmap((cur_option.value >= 1) ? cur_option.value - 1 : cur_option.value); + int bitmap_width = bitmap->GetWidth(); + int bitmap_height = bitmap->GetHeight(); int offset_x = grid_cell_border_width; int offset_y = (rect.height > bitmap_height) ? (rect.height - bitmap_height) / 2 : grid_cell_border_height; dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(wxBrush(attr.GetBackgroundColour())); dc.DrawRectangle(rect); - dc.DrawBitmap(bitmap->GetBitmapFor(dc.GetWindow()), wxPoint(rect.x + offset_x, rect.y + offset_y)); + dc.DrawBitmap(*bitmap, wxPoint(rect.x + offset_x, rect.y + offset_y)); text_rect.x += bitmap_width + grid_cell_border_width * 2; text_rect.width -= (bitmap_width + grid_cell_border_width * 2); } @@ -2648,12 +2641,12 @@ void ObjectGridTable::OnCellValueChanged(int row, int col) } } -wxBitmapBundle& ObjectGridTable::get_undo_bitmap(bool selected) +wxBitmap& ObjectGridTable::get_undo_bitmap(bool selected) { return m_panel->m_undo_bitmap; } -wxBitmapBundle* ObjectGridTable::get_color_bitmap(int color_index) +wxBitmap* ObjectGridTable::get_color_bitmap(int color_index) { if (color_index < m_panel->m_color_bitmaps.size()) return m_panel->m_color_bitmaps[color_index]; diff --git a/src/slic3r/GUI/GUI_ObjectTable.hpp b/src/slic3r/GUI/GUI_ObjectTable.hpp index 6aca182533..a21436fe0e 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.hpp +++ b/src/slic3r/GUI/GUI_ObjectTable.hpp @@ -82,10 +82,10 @@ public: GridCellFilamentsEditor(size_t count = 0, const wxString choices[] = NULL, bool allowOthers = false, - std::vector* bitmaps = NULL); + std::vector* bitmaps = NULL); GridCellFilamentsEditor(const wxArrayString& choices, bool allowOthers = false, - std::vector* bitmaps = NULL); + std::vector* bitmaps = NULL); virtual void Create(wxWindow* parent, wxWindowID id, @@ -105,7 +105,7 @@ protected: ::ComboBox *Combo() const { return (::ComboBox *)m_control; } void OnComboCloseUp(wxCommandEvent& evt); - std::vector* m_icons; + std::vector* m_icons; wxDECLARE_NO_COPY_CLASS(GridCellFilamentsEditor); private: @@ -498,8 +498,8 @@ public: void update_filament_to_config(ModelConfig* config, std::string& key, ConfigOption& new_value, ConfigOption& ori_value, bool is_object); void update_volume_values_from_object(int row, int col); void update_value_to_object(Model* model, ObjectGridRow* grid_row, int col); - wxBitmapBundle& get_undo_bitmap(bool selected = false); - wxBitmapBundle* get_color_bitmap(int color_index); + wxBitmap& get_undo_bitmap(bool selected = false); + wxBitmap* get_color_bitmap(int color_index); bool OnCellLeftClick(int row, int col, ConfigOptionType &type); void OnSelectCell(int row, int col); void OnRangeSelected(int row, int col, int row_count, int col_count); @@ -610,10 +610,10 @@ private: int init_filaments_and_colors(); wxFloatingPointValidator m_float_validator; - wxBitmapBundle m_undo_bitmap; - std::vector m_color_bitmaps; - wxBitmapBundle m_bmp_reset; - wxBitmapBundle m_bmp_reset_disable; + wxBitmap m_undo_bitmap; + std::vector m_color_bitmaps; + ScalableBitmap m_bmp_reset; + ScalableBitmap m_bmp_reset_disable; private: wxDECLARE_ABSTRACT_CLASS(ObjectGrid); wxDECLARE_EVENT_TABLE(); diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index b3508c5aaa..10578be691 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -173,7 +173,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ btn->SetBitmapFocus(m_bmp_reset_focus.bmp()); - btn->SetBitmapHover(m_bmp_reset_focus.get_bitmap()); + btn->SetBitmapHover(m_bmp_reset_focus.bmp()); #ifdef __WINDOWS__ btn->SetBitmapDisabled(m_bmp_reset_disable.bmp()); @@ -220,7 +220,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ optgroup->sidetext_width = 5; optgroup->set_config_category_and_type(GUI::from_u8(group_category), Preset::TYPE_PRINT); - std::weak_ptr weak_optgroup(optgroup); + std::weak_ptr weak_optgroup(optgroup); optgroup->m_on_change = [this, is_object, object, config, group_category](const t_config_option_key &opt_id, const boost::any &value) { this->m_parent->Freeze(); this->update_config_values(is_object, object, config, group_category); @@ -236,7 +236,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ return; ctrl->SetBitmap_(m_bmp_reset); ctrl->SetBitmapFocus(m_bmp_reset_focus.bmp()); - ctrl->SetBitmapHover(m_bmp_reset_focus.get_bitmap()); + ctrl->SetBitmapHover(m_bmp_reset_focus.bmp()); #ifdef __WINDOWS__ ctrl->SetBitmapDisabled(m_bmp_reset_disable.bmp()); #endif diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 50c82439f4..81c6e8710c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -668,7 +668,7 @@ void GLGizmoAdvancedCut::perform_cut(const Selection& selection) if (its_num_open_edges(new_objects[i]->volumes[j]->mesh().its) > 0) { if (!is_showed_dialog) { is_showed_dialog = true; - MessageDialog dlg(nullptr, _L("non-mainifold edges be caused by cut tool, do you want to fix it now?"), "", wxYES | wxCANCEL); + MessageDialog dlg(nullptr, _L("non-manifold edges be caused by cut tool, do you want to fix it now?"), "", wxYES | wxCANCEL); int ret = dlg.ShowModal(); if (ret == wxID_YES) { user_fix_model = true; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index f0f221f1df..a61b4a5b0a 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -3392,7 +3392,7 @@ void GLGizmoCut3D::perform_cut(const Selection& selection) if (its_num_open_edges(new_objects[i]->volumes[j]->mesh().its) > 0) { if (!is_showed_dialog) { is_showed_dialog = true; - MessageDialog dlg(nullptr, _L("non-mainifold edges be caused by cut tool, do you want to fix it now?"), "", wxYES | wxCANCEL); + MessageDialog dlg(nullptr, _L("non-manifold edges be caused by cut tool, do you want to fix it now?"), "", wxYES | wxCANCEL); int ret = dlg.ShowModal(); if (ret == wxID_YES) { user_fix_model = true; diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index 9fef6720ce..2ab6748f4e 100644 --- a/src/slic3r/GUI/ImageGrid.cpp +++ b/src/slic3r/GUI/ImageGrid.cpp @@ -508,10 +508,10 @@ void ImageGrid::render(wxDC& dc) if (!m_file_sys || m_file_sys->GetCount() == 0) { dc.DrawRectangle({ 0, 0, size.x, size.y }); if (!m_status_msg.IsEmpty()) { - auto si = m_status_icon.GetSize(); + auto si = m_status_icon.GetBmpSize(); auto st = dc.GetTextExtent(m_status_msg); auto rect = wxRect{0, 0, max(st.x, si.x), si.y + 26 + st.y}.CenterIn(wxRect({0, 0}, size)); - dc.DrawBitmap(m_status_icon.get_bitmap(), rect.x + (rect.width - si.x) / 2, rect.y); + dc.DrawBitmap(m_status_icon.bmp(), rect.x + (rect.width - si.x) / 2, rect.y); dc.SetTextForeground(wxColor(0x909090)); dc.DrawText(m_status_msg, rect.x + (rect.width - st.x) / 2, rect.GetBottom() - st.y); } @@ -602,7 +602,7 @@ void Slic3r::GUI::ImageGrid::renderContent1(wxDC &dc, wxPoint const &pt, int ind bool show_download_state_always = true; // Draw checked icon if (m_selecting && !show_download_state_always) - dc.DrawBitmap(selected ? m_checked_icon.get_bitmap() : m_unchecked_icon.get_bitmap(), pt + wxPoint{10, m_content_rect.GetHeight() - m_checked_icon.GetHeight() - 10}); + dc.DrawBitmap(selected ? m_checked_icon.bmp() : m_unchecked_icon.bmp(), pt + wxPoint{10, 10}); // can't handle alpha // dc.GradientFillLinear({pt.x, pt.y, m_border_size.GetWidth(), 60}, wxColour(0x6F, 0x6F, 0x6F, 0x99), wxColour(0x6F, 0x6F, 0x6F, 0), wxBOTTOM); else if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { @@ -653,7 +653,7 @@ void Slic3r::GUI::ImageGrid::renderContent1(wxDC &dc, wxPoint const &pt, int ind dc.DrawText(date, pt + wxPoint{24, 16}); } if (m_selecting && show_download_state_always) - dc.DrawBitmap(selected ? m_checked_icon.get_bitmap() : m_unchecked_icon.get_bitmap(), pt + wxPoint{10, m_content_rect.GetHeight() - m_checked_icon.GetHeight() - 10}); + dc.DrawBitmap(selected ? m_checked_icon.bmp() : m_unchecked_icon.bmp(), pt + wxPoint{10, 10}); } void Slic3r::GUI::ImageGrid::renderContent2(wxDC &dc, wxPoint const &pt, int index, bool hit) @@ -745,8 +745,8 @@ void Slic3r::GUI::ImageGrid::renderText2(wxDC &dc, wxString text, wxRect const & void Slic3r::GUI::ImageGrid::renderIconText(wxDC & dc, ScalableBitmap const & icon, wxString text, wxRect const & rect) { - dc.DrawBitmap(icon.get_bitmap(), rect.x, rect.y + (rect.height - icon.GetHeight()) / 2); - renderText2(dc, text, {rect.x + icon.GetWidth() + 4, rect.y, rect.width - icon.GetWidth() - 4, rect.height}); + dc.DrawBitmap(icon.bmp(), rect.x, rect.y + (rect.height - icon.GetBmpHeight()) / 2); + renderText2(dc, text, {rect.x + icon.GetBmpWidth() + 4, rect.y, rect.width - icon.GetBmpWidth() - 4, rect.height}); } }} diff --git a/src/slic3r/GUI/Jobs/PlaterWorker.hpp b/src/slic3r/GUI/Jobs/PlaterWorker.hpp index 1a38736d99..7f155bd69c 100644 --- a/src/slic3r/GUI/Jobs/PlaterWorker.hpp +++ b/src/slic3r/GUI/Jobs/PlaterWorker.hpp @@ -118,26 +118,20 @@ class PlaterWorker: public Worker { } }; - void on_idle(wxIdleEvent &evt) - { - process_events(); - evt.Skip(); - } + EventGuard on_idle_evt; + EventGuard on_paint_evt; public: template PlaterWorker(wxWindow *plater, WorkerArgs &&...args) - : m_w{std::forward(args)...}, m_plater{plater} - { + : m_w{std::forward(args)...} + , m_plater{plater} // Ensure that messages from the worker thread to the UI thread are // processed continuously. - plater->Bind(wxEVT_IDLE, &PlaterWorker::on_idle, this); - } - - ~PlaterWorker() + , on_idle_evt(plater, wxEVT_IDLE, [this](wxIdleEvent&) { process_events(); }) + , on_paint_evt(plater, wxEVT_PAINT, [this](wxPaintEvent&) { process_events(); }) { - m_plater->Unbind(wxEVT_IDLE, &PlaterWorker::on_idle, this); } // Always package the job argument into a PlaterJob diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index fcd7e5e9fb..3a85d70433 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -155,7 +155,7 @@ wxWindow *KBShortcutsDialog::create_button(int id, wxString text) void KBShortcutsDialog::on_dpi_changed(const wxRect& suggested_rect) { - m_logo_bmp.sys_color_changed(); + m_logo_bmp.msw_rescale(); m_header_bitmap->SetBitmap(m_logo_bmp.bmp()); msw_buttons_rescale(this, em_unit(), { wxID_OK }); @@ -258,7 +258,7 @@ void KBShortcutsDialog::fill_shortcuts() { "F", L("Gizmo Place face on bed") }, { "L", L("Gizmo SLA support points") }, { "P", L("Gizmo FDM paint-on seam") }, - { "Tab", L("Swtich between Prepare/Prewview") }, + { "Tab", L("Switch between Prepare/Preview") }, }; m_full_shortcuts.push_back({ { _L("Plater"), "" }, plater_shortcuts }); @@ -300,7 +300,7 @@ void KBShortcutsDialog::fill_shortcuts() { L("Arrow Right"), L("Horizontal slider - Move active thumb Right")}, { "L", L("On/Off one layer mode of the vertical slider")}, { "C", L("On/Off g-code window")}, - { "Tab", L("Swtich between Prepare/Prewview") }, + { "Tab", L("Switch between Prepare/Preview") }, {L("Shift+Any arrow"), L("Move slider 5x faster")}, {L("Shift+Mouse wheel"), L("Move slider 5x faster")}, #ifdef __APPLE__ diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index c8dad01b4a..17a753186a 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -396,29 +396,20 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ sizer->SetSizeHints(this); #ifdef WIN32 - auto setMaxSize = [this]() { - wxDisplay display(this); - auto size = display.GetClientArea().GetSize(); - HWND hWnd = GetHandle(); - RECT borderThickness; - SetRectEmpty(&borderThickness); - AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE), FALSE, 0); - SetMaxSize(size + wxSize{-borderThickness.left + borderThickness.right, -borderThickness.top + borderThickness.bottom}); - }; - this->Bind(wxEVT_DPI_CHANGED, [setMaxSize](auto & e) { - setMaxSize(); - e.Skip(); - }); - setMaxSize(); - // SetMaximize already position window at left/top corner, even if Windows Task Bar is at left side. - // Not known why, but fix it here + // SetMaximize causes the window to overlap the taskbar, due to the fact this window has wxMAXIMIZE_BOX off + // https://forums.wxwidgets.org/viewtopic.php?t=50634 + // Fix it here this->Bind(wxEVT_MAXIMIZE, [this](auto &e) { wxDisplay display(this); - auto pos = display.GetClientArea().GetPosition(); + auto size = display.GetClientArea().GetSize(); + auto pos = display.GetClientArea().GetPosition(); HWND hWnd = GetHandle(); RECT borderThickness; SetRectEmpty(&borderThickness); AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE), FALSE, 0); + const auto max_size = size + wxSize{-borderThickness.left + borderThickness.right, -borderThickness.top + borderThickness.bottom}; + const auto current_size = GetSize(); + SetSize({std::min(max_size.x, current_size.x), std::min(max_size.y, current_size.y)}); Move(pos + wxPoint{borderThickness.left, borderThickness.top}); e.Skip(); }); @@ -1979,6 +1970,11 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) m_monitor->msw_rescale(); m_calibration->msw_rescale(); + // BBS +#if 0 + for (size_t id = 0; id < m_menubar->GetMenuCount(); id++) + msw_rescale_menu(m_menubar->GetMenu(id)); +#endif // Workarounds for correct Window rendering after rescale @@ -2020,7 +2016,7 @@ void MainFrame::on_sys_color_changed() #ifdef _MSW_DARK_MODE // update common mode sizer if (!wxGetApp().tabs_as_menu()) - dynamic_cast(m_tabpanel)->OnColorsChanged(); + dynamic_cast(m_tabpanel)->Rescale(); #endif #endif @@ -3088,7 +3084,7 @@ void MainFrame::load_config_file() // return; wxFileDialog dlg(this, _L("Select profile to load:"), !m_last_config.IsEmpty() ? get_dir_name(m_last_config) : wxGetApp().app_config->get_last_dir(), - "config.json", "Config files (*.json;*.zip;*.bbscfg;*.bbsflmt)|*.json;*.zip;*.bbscfg;*.bbsflmt", wxFD_OPEN | wxFD_MULTIPLE | wxFD_FILE_MUST_EXIST); + "config.json", "Config files (*.json;*.zip;*.orca_printer;*.orca_filament)|*.json;*.zip;*.orca_printer;*.orca_filament", wxFD_OPEN | wxFD_MULTIPLE | wxFD_FILE_MUST_EXIST); wxArrayString files; if (dlg.ShowModal() != wxID_OK) return; @@ -3117,8 +3113,11 @@ void MainFrame::load_config_file() } wxGetApp().preset_bundle->update_compatible(PresetSelectCompatibleType::Always); update_side_preset_ui(); - MessageDialog dlg2(this, wxString::Format(_L_PLURAL("There is %d config imported. (Only non-system and compatible configs)", - "There are %d configs imported. (Only non-system and compatible configs)", cfiles.size()), cfiles.size()), + auto msg = wxString::Format(_L_PLURAL("There is %d config imported. (Only non-system and compatible configs)", + "There are %d configs imported. (Only non-system and compatible configs)", cfiles.size()), cfiles.size()); + if(cfiles.empty()) + msg += _L("\nHint: Make sure you have added the corresponding printer before importing the configs."); + MessageDialog dlg2(this,msg , _L("Import result"), wxOK); dlg2.ShowModal(); } diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index 4c85725d3f..dded21372b 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -354,9 +354,9 @@ void MediaFilePanel::SwitchStorage(bool external) void MediaFilePanel::Rescale() { - m_bmp_loading.sys_color_changed(); - m_bmp_failed.sys_color_changed(); - m_bmp_empty.sys_color_changed(); + m_bmp_loading.msw_rescale(); + m_bmp_failed.msw_rescale(); + m_bmp_empty.msw_rescale(); auto top_sizer = GetSizer()->GetItem((size_t) 0)->GetSizer(); top_sizer->SetMinSize({-1, 75 * em_unit(this) / 10}); diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 42bf891da4..eae8942bcb 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -37,10 +37,10 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w m_button_play->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &e) { TogglePlay(); }); m_button_play->Bind(wxEVT_RIGHT_UP, [this](auto & e) { m_media_ctrl->Play(); }); - m_label_status->Bind(wxEVT_LEFT_UP, [this](auto &e) { - auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/faq/live-view", L"en"); - wxLaunchDefaultBrowser(url); - }); + // m_label_status->Bind(wxEVT_LEFT_UP, [this](auto &e) { + // auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/faq/live-view", L"en"); + // wxLaunchDefaultBrowser(url); + // }); Bind(wxEVT_RIGHT_UP, [this](auto & e) { wxClipboard & c = *wxTheClipboard; diff --git a/src/slic3r/GUI/ModelMall.cpp b/src/slic3r/GUI/ModelMall.cpp index 83c05bf544..f14de1ebf0 100644 --- a/src/slic3r/GUI/ModelMall.cpp +++ b/src/slic3r/GUI/ModelMall.cpp @@ -36,7 +36,7 @@ namespace GUI { wxBoxSizer* m_sizer_web_control = new wxBoxSizer(wxHORIZONTAL); - auto m_control_back = new ScalableButton(m_web_control_panel, wxID_ANY, "mall_control_back", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER); + auto m_control_back = new ScalableButton(m_web_control_panel, wxID_ANY, "mall_control_back", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); m_control_back->SetBackgroundColour(*wxWHITE); m_control_back->SetSize(wxSize(FromDIP(25), FromDIP(30))); m_control_back->SetMinSize(wxSize(FromDIP(25), FromDIP(30))); @@ -47,7 +47,7 @@ namespace GUI { m_control_back->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCursor(wxCURSOR_ARROW));}); - auto m_control_forward = new ScalableButton(m_web_control_panel, wxID_ANY, "mall_control_forward", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER); + auto m_control_forward = new ScalableButton(m_web_control_panel, wxID_ANY, "mall_control_forward", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); m_control_forward->SetBackgroundColour(*wxWHITE); m_control_forward->SetSize(wxSize(FromDIP(25), FromDIP(30))); m_control_forward->SetMinSize(wxSize(FromDIP(25), FromDIP(30))); @@ -57,7 +57,7 @@ namespace GUI { m_control_forward->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCursor(wxCURSOR_HAND)); }); m_control_forward->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCursor(wxCURSOR_ARROW)); }); - auto m_control_refresh = new ScalableButton(m_web_control_panel, wxID_ANY, "mall_control_refresh", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER); + auto m_control_refresh = new ScalableButton(m_web_control_panel, wxID_ANY, "mall_control_refresh", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); m_control_refresh->SetBackgroundColour(*wxWHITE); m_control_refresh->SetSize(wxSize(FromDIP(25), FromDIP(30))); m_control_refresh->SetMinSize(wxSize(FromDIP(25), FromDIP(30))); diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index d685ad3a81..ed323417aa 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -227,10 +227,10 @@ void MsgDialog::apply_style(long style) if (style & wxNO) add_button(wxID_NO, false,_L("No")); if (style & wxCANCEL) add_button(wxID_CANCEL, false, _L("Cancel")); - logo->SetBitmap( *get_bmp_bundle(style & wxAPPLY ? "completed" : + logo->SetBitmap( create_scaled_bitmap(style & wxAPPLY ? "completed" : style & wxICON_WARNING ? "obj_warning" : style & wxICON_INFORMATION ? "info" : - style & wxICON_QUESTION ? "question" : "OrcaSlicer", 64)); + style & wxICON_QUESTION ? "question" : "OrcaSlicer", this, 64, style & wxICON_ERROR)); } void MsgDialog::finalize() @@ -339,7 +339,7 @@ ErrorDialog::ErrorDialog(wxWindow *parent, const wxString &msg, bool monospaced_ add_msg_content(this, content_sizer, msg, monospaced_font); // Use a small bitmap with monospaced font, as the error text will not be wrapped. - logo->SetBitmap(*get_bmp_bundle("OrcaSlicer_192px_grayscale.png", monospaced_font ? 48 : /*1*/84)); + logo->SetBitmap(create_scaled_bitmap("OrcaSlicer_192px_grayscale.png", this, monospaced_font ? 48 : /*1*/84)); SetMaxSize(wxSize(-1, CONTENT_MAX_HEIGHT*wxGetApp().em_unit())); diff --git a/src/slic3r/GUI/Notebook.cpp b/src/slic3r/GUI/Notebook.cpp index aac7ee5af3..84bbf9950a 100644 --- a/src/slic3r/GUI/Notebook.cpp +++ b/src/slic3r/GUI/Notebook.cpp @@ -122,8 +122,6 @@ void ButtonsListCtrl::Rescale() { //m_mode_sizer->msw_rescale(); int em = em_unit(this); - // Orca: following is removed by PS in wx 3.16 refactor. - // doesn't seem to be doing anything rn so leaving it alone for (Button* btn : m_pageButtons) { //BBS btn->SetMinSize({(btn->GetLabel().empty() ? 40 : 132) * em / 10, 36 * em / 10}); @@ -139,14 +137,6 @@ void ButtonsListCtrl::Rescale() m_sizer->Layout(); } -void ButtonsListCtrl::OnColorsChanged() -{ - for (Button* btn : m_pageButtons) - btn->Rescale(); - - m_sizer->Layout(); -} - void ButtonsListCtrl::SetSelection(int sel) { if (m_selection == sel) diff --git a/src/slic3r/GUI/Notebook.hpp b/src/slic3r/GUI/Notebook.hpp index 482a909fe1..d75898a7cd 100644 --- a/src/slic3r/GUI/Notebook.hpp +++ b/src/slic3r/GUI/Notebook.hpp @@ -23,7 +23,6 @@ public: void SetSelection(int sel); void UpdateMode(); void Rescale(); - void OnColorsChanged(); bool InsertPage(size_t n, const wxString &text, bool bSelect = false, const std::string &bmp_name = "", const std::string &inactive_bmp_name = ""); void RemovePage(size_t n); bool SetPageImage(size_t n, const std::string& bmp_name) const; @@ -262,11 +261,6 @@ public: GetBtnsListCtrl()->Rescale(); } - void OnColorsChanged() - { - GetBtnsListCtrl()->OnColorsChanged(); - } - void OnNavigationKey(wxNavigationKeyEvent& event) { if (event.IsWindowChange()) { diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp index 2d796924aa..b612ae30fd 100644 --- a/src/slic3r/GUI/OG_CustomCtrl.cpp +++ b/src/slic3r/GUI/OG_CustomCtrl.cpp @@ -28,12 +28,12 @@ static bool is_point_in_rect(const wxPoint& pt, const wxRect& rect) rect.GetTop() <= pt.y && pt.y <= rect.GetBottom(); } -static wxSize get_bitmap_size(const wxBitmapBundle* bmp, wxWindow* parent) +static wxSize get_bitmap_size(const wxBitmap& bmp) { -#ifndef __WIN32__ - return bmp->GetBitmapFor(parent).GetSize(); +#ifdef __APPLE__ + return bmp.GetScaledSize(); #else - return bmp->GetDefaultSize(); + return bmp.GetSize(); #endif } @@ -58,8 +58,8 @@ OG_CustomCtrl::OG_CustomCtrl( wxWindow* parent, m_v_gap2 = lround(0.8 * m_em_unit); m_h_gap = lround(0.2 * m_em_unit); - //m_bmp_mode_sz = get_bitmap_size(get_bmp_bundle("mode_simple", wxOSX ? 10 : 12), this); - m_bmp_blinking_sz = get_bitmap_size(get_bmp_bundle("blank_16"), this); + //m_bmp_mode_sz = get_bitmap_size(create_scaled_bitmap("mode_simple", this, wxOSX ? 10 : 12)); + m_bmp_blinking_sz = get_bitmap_size(create_scaled_bitmap("blank_16", this)); init_ctrl_lines();// from og.lines() @@ -597,8 +597,8 @@ void OG_CustomCtrl::msw_rescale() m_v_gap2 = lround(0.8 * m_em_unit); m_h_gap = lround(0.2 * m_em_unit); - //m_bmp_mode_sz = get_bitmap_size(get_bmp_bundle("mode_simple", wxOSX ? 10 : 12), this); - m_bmp_blinking_sz = get_bitmap_size(get_bmp_bundle("blank_16"), this); + //m_bmp_mode_sz = create_scaled_bitmap("mode_simple", this, wxOSX ? 10 : 12).GetSize(); + m_bmp_blinking_sz = create_scaled_bitmap("blank_16", this).GetSize(); m_max_win_width = 0; @@ -691,7 +691,7 @@ void OG_CustomCtrl::CtrlLine::msw_rescale() { // if we have a single option with no label, no sidetext if (draw_just_act_buttons) - height = get_bitmap_size(get_bmp_bundle("empty"), ctrl).GetHeight(); + height = get_bitmap_size(create_scaled_bitmap("empty")).GetHeight(); if (ctrl->opt_group->label_width != 0 && !og_line.label.IsEmpty()) { wxSize label_sz = ctrl->GetTextExtent(og_line.label); @@ -773,8 +773,8 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord h_pos, wxCoord v_pos) if (field && field->undo_bitmap()) { // if (field) // BBS: new layout - const wxPoint pos = draw_act_bmps(dc, wxPoint(h_pos, v_pos), field->undo_to_sys_bitmap()->get_bitmap(), - field->undo_bitmap()->get_bitmap(), field->blink()); + const wxPoint pos = draw_act_bmps(dc, wxPoint(h_pos, v_pos), field->undo_to_sys_bitmap()->bmp(), + field->undo_bitmap()->bmp(), field->blink()); if (field->has_edit_ui()) draw_edit_bmp(dc, pos, field->edit_bitmap()); } @@ -831,7 +831,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord h_pos, wxCoord v_pos) auto draw_buttons = [&h_pos, &dc, &v_pos, this](Field* field, size_t bmp_rect_id = 0) { if (field && field->undo_to_sys_bitmap()) { - h_pos = draw_act_bmps(dc, wxPoint(h_pos, v_pos), field->undo_to_sys_bitmap()->get_bitmap(), field->undo_bitmap()->get_bitmap(), field->blink(), bmp_rect_id).x; + h_pos = draw_act_bmps(dc, wxPoint(h_pos, v_pos), field->undo_to_sys_bitmap()->bmp(), field->undo_bitmap()->bmp(), field->blink(), bmp_rect_id).x; } #ifndef DISABLE_BLINKING else if (field && !field->undo_to_sys_bitmap() && field->blink()) @@ -962,19 +962,19 @@ wxCoord OG_CustomCtrl::CtrlLine::draw_text(wxDC &dc, wxPoint pos, const wxString wxPoint OG_CustomCtrl::CtrlLine::draw_blinking_bmp(wxDC& dc, wxPoint pos, bool is_blinking) { - wxBitmapBundle* bmp_blinking = get_bmp_bundle(is_blinking ? "blank_16" : "empty"); + wxBitmap bmp_blinking = create_scaled_bitmap(is_blinking ? "blank_16" : "empty", ctrl); wxCoord h_pos = pos.x; - wxCoord v_pos = pos.y + lround((height - get_bitmap_size(bmp_blinking, ctrl).GetHeight()) / 2); + wxCoord v_pos = pos.y + lround((height - get_bitmap_size(bmp_blinking).GetHeight()) / 2); - dc.DrawBitmap(bmp_blinking->GetBitmapFor(ctrl), h_pos, v_pos); + dc.DrawBitmap(bmp_blinking, h_pos, v_pos); - int bmp_dim = get_bitmap_size(bmp_blinking, ctrl).GetWidth(); + int bmp_dim = get_bitmap_size(bmp_blinking).GetWidth(); h_pos += bmp_dim + ctrl->m_h_gap; return wxPoint(h_pos, v_pos); } -wxPoint OG_CustomCtrl::CtrlLine::draw_act_bmps(wxDC& dc, wxPoint pos, const wxBitmapBundle& bmp_undo_to_sys, const wxBitmapBundle& bmp_undo, bool is_blinking, size_t rect_id) +wxPoint OG_CustomCtrl::CtrlLine::draw_act_bmps(wxDC& dc, wxPoint pos, const wxBitmap& bmp_undo_to_sys, const wxBitmap& bmp_undo, bool is_blinking, size_t rect_id) { #ifndef DISABLE_BLINKING pos = draw_blinking_bmp(dc, pos, is_blinking); @@ -982,11 +982,11 @@ wxPoint OG_CustomCtrl::CtrlLine::draw_act_bmps(wxDC& dc, wxPoint pos, const wxBi if (ctrl->opt_group->split_multi_line) { // BBS const std::vector